From e18389718c87b60696db70c65b02cfb4a8526212 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 29 Aug 2024 13:34:55 -0400 Subject: [PATCH 001/217] Implement stdin models Unfortunately due to how variable and varargs work, these are better done in QL --- go/ql/lib/semmle/go/frameworks/stdlib/Fmt.qll | 9 ++++ go/ql/lib/semmle/go/frameworks/stdlib/Os.qll | 10 ++++ .../dataflow/flowsources/local/stdin/go.mod | 3 ++ .../flowsources/local/stdin/source.ext.yml | 7 +++ .../flowsources/local/stdin/source.ql | 19 ++++++++ .../flowsources/local/stdin/test.expected | 2 + .../flowsources/local/stdin/test.ext.yml | 7 +++ .../dataflow/flowsources/local/stdin/test.go | 48 +++++++++++++++++++ .../dataflow/flowsources/local/stdin/test.ql | 15 ++++++ 9 files changed, 120 insertions(+) create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/go.mod create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.ext.yml create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.ql create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.expected create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.ext.yml create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.go create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.ql diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Fmt.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Fmt.qll index 950b67483f00..54794ea21c9e 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Fmt.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Fmt.qll @@ -112,6 +112,15 @@ module Fmt { Scanner() { this.hasQualifiedName("fmt", ["Scan", "Scanf", "Scanln"]) } } + private class ScannerSource extends SourceNode { + ScannerSource() { + // All of the arguments which are sources are varargs. + this.asExpr() = any(Scanner s).getACall().getAnImplicitVarargsArgument().asExpr() + } + + override string getThreatModel() { result = "stdin" } + } + /** * The `Fscan` function or one of its variants, * all of which read from a specified `io.Reader`. diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Os.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Os.qll index 72ea4cc6c573..3e443d942b16 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Os.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Os.qll @@ -43,4 +43,14 @@ module Os { input = inp and output = outp } } + + private class Stdin extends SourceNode { + Stdin() { + exists(Variable osStdin | osStdin.hasQualifiedName("os", "Stdin") | + this.asExpr() = osStdin.getARead().asExpr() + ) + } + + override string getThreatModel() { result = "stdin" } + } } diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/go.mod b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/go.mod new file mode 100644 index 000000000000..2334541a2f0d --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/go.mod @@ -0,0 +1,3 @@ +module test + +go 1.22.6 diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.ext.yml b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.ext.yml new file mode 100644 index 000000000000..92156e87f400 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.ext.yml @@ -0,0 +1,7 @@ +extensions: + + - addsTo: + pack: codeql/threat-models + extensible: threatModelConfiguration + data: + - ["stdin", true, 0] diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.ql b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.ql new file mode 100644 index 000000000000..db6bbb1a2d16 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.ql @@ -0,0 +1,19 @@ +import go +import ModelValidation +import TestUtilities.InlineExpectationsTest + +module SourceTest implements TestSig { + string getARelevantTag() { result = "source" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + exists(ThreatModelFlowSource s | + s.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), + location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and + element = s.toString() and + value = "" and + tag = "source" + ) + } +} + +import MakeTest diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.expected b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.expected new file mode 100644 index 000000000000..55e9aed2e93c --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.expected @@ -0,0 +1,2 @@ +testFailures +invalidModelRow diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.ext.yml b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.ext.yml new file mode 100644 index 000000000000..92156e87f400 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.ext.yml @@ -0,0 +1,7 @@ +extensions: + + - addsTo: + pack: codeql/threat-models + extensible: threatModelConfiguration + data: + - ["stdin", true, 0] diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.go new file mode 100644 index 000000000000..4166dc4000b0 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.go @@ -0,0 +1,48 @@ +package test + +import ( + "bufio" + "fmt" + "os" +) + +func sink(string) { + +} + +func readStdinBuffer() { + buf := make([]byte, 1024) + n, err := os.Stdin.Read(buf) // $source + if err != nil { + return + } + sink(string(buf[:n])) // $hasTaintFlow="type conversion" +} + +func readStdinBuffReader() { + buf := make([]byte, 1024) + r := bufio.NewReader(os.Stdin) // $source + n, err := r.Read(buf) + if err != nil { + return + } + sink(string(buf[:n])) // $hasTaintFlow="type conversion" +} + +func scan() { + var username, email string + fmt.Scan(&username, &email) // $source + sink(username) // $hasTaintFlow="username" +} + +func scanf() { + var s string + fmt.Scanf("%s", &s) // $source + sink(s) // $hasTaintFlow="s" +} + +func scanl() { + var s string + fmt.Scanln(&s) // $source + sink(s) // $hasTaintFlow="s" +} diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.ql b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.ql new file mode 100644 index 000000000000..7c7f587de571 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.ql @@ -0,0 +1,15 @@ +import go +import semmle.go.dataflow.ExternalFlow +import ModelValidation +import experimental.frameworks.CleverGo +import TestUtilities.InlineFlowTest + +module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } + + predicate isSink(DataFlow::Node sink) { + sink.asExpr() = any(CallExpr c | c.getTarget().getName() = "sink").getArgument(0) + } +} + +import TaintFlowTest From d80a1487bed5e3f26ac96ecc24fe2433d14aefde Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 29 Aug 2024 14:27:45 -0400 Subject: [PATCH 002/217] Add change note --- go/ql/lib/change-notes/2024-08-29-add-stdin-threat-models.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 go/ql/lib/change-notes/2024-08-29-add-stdin-threat-models.md diff --git a/go/ql/lib/change-notes/2024-08-29-add-stdin-threat-models.md b/go/ql/lib/change-notes/2024-08-29-add-stdin-threat-models.md new file mode 100644 index 000000000000..f01c843320de --- /dev/null +++ b/go/ql/lib/change-notes/2024-08-29-add-stdin-threat-models.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Local source models with the `stdin` source kind have been added for `os.Stdin`, `fmt.Scan`, `fmt.Scanf`, `fmt.Scanln`. You can optionally include threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see [Analyzing your code with CodeQL queries](https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>) and [Customizing your advanced setup for code scanning](https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models). From 26b49dd0dfaa267b502a1f430b899e42ec3aeb2d Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 29 Aug 2024 15:06:19 -0400 Subject: [PATCH 003/217] Fix test expectation --- .../semmle/go/dataflow/flowsources/local/stdin/source.expected | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.expected diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.expected b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.expected new file mode 100644 index 000000000000..db33d6d2504a --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.expected @@ -0,0 +1,3 @@ +testFailures +invalidModelRow +failures From 1f932d407f9a38282f4b6c74ee197e9250942443 Mon Sep 17 00:00:00 2001 From: Edward Minnix III Date: Wed, 4 Sep 2024 09:48:02 -0400 Subject: [PATCH 004/217] Remove unnecessary `asExpr()` Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> --- go/ql/lib/semmle/go/frameworks/stdlib/Os.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Os.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Os.qll index 3e443d942b16..492e4b002411 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Os.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Os.qll @@ -47,7 +47,7 @@ module Os { private class Stdin extends SourceNode { Stdin() { exists(Variable osStdin | osStdin.hasQualifiedName("os", "Stdin") | - this.asExpr() = osStdin.getARead().asExpr() + this = osStdin.getARead() ) } From 91b7a6cbd801a035ec492bd82c6eed1eda9cd759 Mon Sep 17 00:00:00 2001 From: Edward Minnix III Date: Wed, 4 Sep 2024 09:48:25 -0400 Subject: [PATCH 005/217] Wording of change note Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> --- go/ql/lib/change-notes/2024-08-29-add-stdin-threat-models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/lib/change-notes/2024-08-29-add-stdin-threat-models.md b/go/ql/lib/change-notes/2024-08-29-add-stdin-threat-models.md index f01c843320de..d98ac68f1edc 100644 --- a/go/ql/lib/change-notes/2024-08-29-add-stdin-threat-models.md +++ b/go/ql/lib/change-notes/2024-08-29-add-stdin-threat-models.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -* Local source models with the `stdin` source kind have been added for `os.Stdin`, `fmt.Scan`, `fmt.Scanf`, `fmt.Scanln`. You can optionally include threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see [Analyzing your code with CodeQL queries](https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>) and [Customizing your advanced setup for code scanning](https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models). +* Local source models with the `stdin` source kind have been added for the variable `os.Stdin` and the functions `fmt.Scan`, `fmt.Scanf` and `fmt.Scanln`. You can optionally include threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see [Analyzing your code with CodeQL queries](https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>) and [Customizing your advanced setup for code scanning](https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models). From f8335e6163d73d38ff2071573611598e600be68c Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Tue, 1 Oct 2024 15:58:07 -0400 Subject: [PATCH 006/217] Fix formatting --- go/ql/lib/semmle/go/frameworks/stdlib/Os.qll | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Os.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Os.qll index 492e4b002411..fb153451c597 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Os.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Os.qll @@ -46,9 +46,7 @@ module Os { private class Stdin extends SourceNode { Stdin() { - exists(Variable osStdin | osStdin.hasQualifiedName("os", "Stdin") | - this = osStdin.getARead() - ) + exists(Variable osStdin | osStdin.hasQualifiedName("os", "Stdin") | this = osStdin.getARead()) } override string getThreatModel() { result = "stdin" } From ba9c2f1e3a743bb9efdd1010605ff50c90acb7a7 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 2 Oct 2024 15:31:14 +0100 Subject: [PATCH 007/217] Rust: Add extractor warnings query. --- rust/ql/lib/codeql/rust/Diagnostics.qll | 5 +++++ .../queries/diagnostics/ExtractionWarnings.ql | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 rust/ql/src/queries/diagnostics/ExtractionWarnings.ql diff --git a/rust/ql/lib/codeql/rust/Diagnostics.qll b/rust/ql/lib/codeql/rust/Diagnostics.qll index 5902bb594141..8c207e708889 100644 --- a/rust/ql/lib/codeql/rust/Diagnostics.qll +++ b/rust/ql/lib/codeql/rust/Diagnostics.qll @@ -52,3 +52,8 @@ class Diagnostic extends @diagnostic { class ExtractionError extends Diagnostic { ExtractionError() { this.getTag() = "parse_error" } } + +/** A diagnostic that is warning severity. */ +class ExtractionWarning extends Diagnostic { + ExtractionWarning() { this.getSeverity() = 30 } +} diff --git a/rust/ql/src/queries/diagnostics/ExtractionWarnings.ql b/rust/ql/src/queries/diagnostics/ExtractionWarnings.ql new file mode 100644 index 000000000000..99773cc6d53a --- /dev/null +++ b/rust/ql/src/queries/diagnostics/ExtractionWarnings.ql @@ -0,0 +1,19 @@ +/** + * @name Extraction warnings + * @description List all extraction warnings for files in the source code directory. + * @kind diagnostic + * @id rust/diagnostics/extraction-warnings + */ + +import codeql.rust.Diagnostics +import codeql.files.FileSystem + +/** Gets the SARIF severity to associate with a warning. */ +int getSeverity() { result = 1 } + +from ExtractionWarning warning, File f +where + f = warning.getLocation().getFile() and + exists(f.getRelativePath()) +select warning, "Extraction warning in " + f + " with message " + warning.getMessage(), + getSeverity() From f30a642c8fcc9b8c34493ea170b41fb38c91e93b Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 2 Oct 2024 15:40:26 +0100 Subject: [PATCH 008/217] Rust: Add a test for the extractor warnings query. --- .../query-tests/diagnostics/ExtractionWarnings.expected | 6 ++++++ .../test/query-tests/diagnostics/ExtractionWarnings.qlref | 1 + 2 files changed, 7 insertions(+) create mode 100644 rust/ql/test/query-tests/diagnostics/ExtractionWarnings.expected create mode 100644 rust/ql/test/query-tests/diagnostics/ExtractionWarnings.qlref diff --git a/rust/ql/test/query-tests/diagnostics/ExtractionWarnings.expected b/rust/ql/test/query-tests/diagnostics/ExtractionWarnings.expected new file mode 100644 index 000000000000..0a68f2bce0ef --- /dev/null +++ b/rust/ql/test/query-tests/diagnostics/ExtractionWarnings.expected @@ -0,0 +1,6 @@ +| does_not_compile.rs:2:6:2:5 | expected SEMICOLON | Extraction warning in does_not_compile.rs with message expected SEMICOLON | 1 | +| does_not_compile.rs:2:9:2:8 | expected SEMICOLON | Extraction warning in does_not_compile.rs with message expected SEMICOLON | 1 | +| does_not_compile.rs:2:13:2:12 | expected SEMICOLON | Extraction warning in does_not_compile.rs with message expected SEMICOLON | 1 | +| does_not_compile.rs:2:21:2:20 | expected SEMICOLON | Extraction warning in does_not_compile.rs with message expected SEMICOLON | 1 | +| does_not_compile.rs:2:26:2:25 | expected SEMICOLON | Extraction warning in does_not_compile.rs with message expected SEMICOLON | 1 | +| does_not_compile.rs:2:32:2:31 | expected field name or number | Extraction warning in does_not_compile.rs with message expected field name or number | 1 | diff --git a/rust/ql/test/query-tests/diagnostics/ExtractionWarnings.qlref b/rust/ql/test/query-tests/diagnostics/ExtractionWarnings.qlref new file mode 100644 index 000000000000..ff6e566d20a7 --- /dev/null +++ b/rust/ql/test/query-tests/diagnostics/ExtractionWarnings.qlref @@ -0,0 +1 @@ +queries/diagnostics/ExtractionWarnings.ql From ad7c96554fbf05eb7b0519672ad2bcb84f95ad83 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 2 Oct 2024 18:29:47 +0100 Subject: [PATCH 009/217] Rust: Correct extraction errors query to output only errors. --- rust/ql/lib/codeql/rust/Diagnostics.qll | 4 ++-- rust/ql/src/queries/diagnostics/ExtractionErrors.ql | 2 +- .../test/query-tests/diagnostics/ExtractionErrors.expected | 6 ------ 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/rust/ql/lib/codeql/rust/Diagnostics.qll b/rust/ql/lib/codeql/rust/Diagnostics.qll index 8c207e708889..8f77b64c5123 100644 --- a/rust/ql/lib/codeql/rust/Diagnostics.qll +++ b/rust/ql/lib/codeql/rust/Diagnostics.qll @@ -48,9 +48,9 @@ class Diagnostic extends @diagnostic { string toString() { result = this.getMessage() } } -/** A diagnostic relating to a particular error in extracting a file. */ +/** A diagnostic that is error severity. */ class ExtractionError extends Diagnostic { - ExtractionError() { this.getTag() = "parse_error" } + ExtractionError() { this.getSeverity() = 40 } } /** A diagnostic that is warning severity. */ diff --git a/rust/ql/src/queries/diagnostics/ExtractionErrors.ql b/rust/ql/src/queries/diagnostics/ExtractionErrors.ql index a04c4e618c41..68be66f8ca9b 100644 --- a/rust/ql/src/queries/diagnostics/ExtractionErrors.ql +++ b/rust/ql/src/queries/diagnostics/ExtractionErrors.ql @@ -8,7 +8,7 @@ import codeql.rust.Diagnostics import codeql.files.FileSystem -/** Gets the SARIF severity to associate an error. */ +/** Gets the SARIF severity to associate with an error. */ int getSeverity() { result = 2 } from ExtractionError error, File f diff --git a/rust/ql/test/query-tests/diagnostics/ExtractionErrors.expected b/rust/ql/test/query-tests/diagnostics/ExtractionErrors.expected index b6aaf7b6d373..e69de29bb2d1 100644 --- a/rust/ql/test/query-tests/diagnostics/ExtractionErrors.expected +++ b/rust/ql/test/query-tests/diagnostics/ExtractionErrors.expected @@ -1,6 +0,0 @@ -| does_not_compile.rs:2:6:2:5 | expected SEMICOLON | Extraction failed in does_not_compile.rs with error expected SEMICOLON | 2 | -| does_not_compile.rs:2:9:2:8 | expected SEMICOLON | Extraction failed in does_not_compile.rs with error expected SEMICOLON | 2 | -| does_not_compile.rs:2:13:2:12 | expected SEMICOLON | Extraction failed in does_not_compile.rs with error expected SEMICOLON | 2 | -| does_not_compile.rs:2:21:2:20 | expected SEMICOLON | Extraction failed in does_not_compile.rs with error expected SEMICOLON | 2 | -| does_not_compile.rs:2:26:2:25 | expected SEMICOLON | Extraction failed in does_not_compile.rs with error expected SEMICOLON | 2 | -| does_not_compile.rs:2:32:2:31 | expected field name or number | Extraction failed in does_not_compile.rs with error expected field name or number | 2 | From 12fbd18f3a9c8a08f548942ab732e565c8f3f7c2 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 2 Oct 2024 18:32:25 +0100 Subject: [PATCH 010/217] Rust: Have ExtractionConsistency.ql report both. --- rust/ql/consistency-queries/ExtractionConsistency.ql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rust/ql/consistency-queries/ExtractionConsistency.ql b/rust/ql/consistency-queries/ExtractionConsistency.ql index b839f2ad783c..20148f0cea2d 100644 --- a/rust/ql/consistency-queries/ExtractionConsistency.ql +++ b/rust/ql/consistency-queries/ExtractionConsistency.ql @@ -1,3 +1,5 @@ import codeql.rust.Diagnostics query predicate extractionError(ExtractionError ee) { any() } + +query predicate extractionWarning(ExtractionWarning ew) { any() } From a4c06b2bbcb4c1942505e123546225142191aa9f Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 2 Oct 2024 18:23:25 +0100 Subject: [PATCH 011/217] Rust: Define SuccessfullyExtractedFile and use it to simplify queries. --- rust/ql/lib/codeql/files/FileSystem.qll | 18 ++++++++++++++++++ .../NumberOfFilesExtractedWithErrors.ql | 7 ++++--- .../NumberOfSuccessfullyExtractedFiles.ql | 7 ++----- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/rust/ql/lib/codeql/files/FileSystem.qll b/rust/ql/lib/codeql/files/FileSystem.qll index ee7a2235476e..fd7ad56c74a0 100644 --- a/rust/ql/lib/codeql/files/FileSystem.qll +++ b/rust/ql/lib/codeql/files/FileSystem.qll @@ -5,6 +5,7 @@ private import codeql.util.FileSystem private import codeql.rust.elements.SourceFile private import codeql.rust.elements.AstNode private import codeql.rust.elements.Comment +private import codeql.rust.Diagnostics private module Input implements InputSig { abstract class ContainerBase extends @container { @@ -56,3 +57,20 @@ class File extends Container, Impl::File { ) } } + +/** + * A successfully extracted file, that is, a file that was extracted and + * contains no extraction errors or warnings. + */ +class SuccessfullyExtractedFile extends File { + SuccessfullyExtractedFile() { + not exists(Diagnostic d | + d.getLocation().getFile() = this and + ( + d instanceof ExtractionError + or + d instanceof ExtractionWarning + ) + ) + } +} diff --git a/rust/ql/src/queries/summary/NumberOfFilesExtractedWithErrors.ql b/rust/ql/src/queries/summary/NumberOfFilesExtractedWithErrors.ql index 1af3f0f88ec0..23db30f53e96 100644 --- a/rust/ql/src/queries/summary/NumberOfFilesExtractedWithErrors.ql +++ b/rust/ql/src/queries/summary/NumberOfFilesExtractedWithErrors.ql @@ -2,14 +2,15 @@ * @id rust/summary/number-of-files-extracted-with-errors * @name Total number of Rust files that were extracted with errors * @description The total number of Rust files in the source code directory that - * were extracted, but where at least one extraction error occurred in the process. + * were extracted, but where at least one extraction error (or warning) occurred + * in the process. * @kind metric * @tags summary */ import codeql.files.FileSystem -import codeql.rust.Diagnostics select count(File f | - exists(ExtractionError e | e.getLocation().getFile() = f) and exists(f.getRelativePath()) + exists(f.getRelativePath()) and + not f instanceof SuccessfullyExtractedFile ) diff --git a/rust/ql/src/queries/summary/NumberOfSuccessfullyExtractedFiles.ql b/rust/ql/src/queries/summary/NumberOfSuccessfullyExtractedFiles.ql index eb86577b4b80..c960599ad18f 100644 --- a/rust/ql/src/queries/summary/NumberOfSuccessfullyExtractedFiles.ql +++ b/rust/ql/src/queries/summary/NumberOfSuccessfullyExtractedFiles.ql @@ -2,14 +2,11 @@ * @id rust/summary/number-of-successfully-extracted-files * @name Total number of Rust files that were extracted without error * @description The total number of Rust files in the source code directory that - * were extracted without encountering any extraction errors. + * were extracted without encountering any extraction errors (or warnings). * @kind metric * @tags summary */ -import codeql.rust.Diagnostics import codeql.files.FileSystem -select count(File f | - not exists(ExtractionError e | e.getLocation().getFile() = f) and exists(f.getRelativePath()) - ) +select count(SuccessfullyExtractedFile f | exists(f.getRelativePath())) From 88abc8f72f8b96d139909bc97d4fb6137fb22334 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 2 Oct 2024 17:29:32 +0100 Subject: [PATCH 012/217] Rust: Add to summary stats. --- rust/ql/src/queries/summary/SummaryStats.ql | 17 +++++++++++++++-- .../diagnostics/SummaryStats.expected | 6 +++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/rust/ql/src/queries/summary/SummaryStats.ql b/rust/ql/src/queries/summary/SummaryStats.ql index 447325514cac..a3494ccb769c 100644 --- a/rust/ql/src/queries/summary/SummaryStats.ql +++ b/rust/ql/src/queries/summary/SummaryStats.ql @@ -7,16 +7,29 @@ */ import rust +import codeql.rust.Diagnostics import Stats from string key, string value where - key = "Files extracted" and value = count(File f | exists(f.getRelativePath())).toString() - or key = "Elements extracted" and value = count(Element e | not e instanceof Unextracted).toString() or key = "Elements unextracted" and value = count(Unextracted e).toString() or + key = "Extraction errors" and value = count(ExtractionError e).toString() + or + key = "Extraction warnings" and value = count(ExtractionWarning w).toString() + or + key = "Files extracted - total" and value = count(File f | exists(f.getRelativePath())).toString() + or + key = "Files extracted - with errors" and + value = + count(File f | exists(f.getRelativePath()) and not f instanceof SuccessfullyExtractedFile) + .toString() + or + key = "Files extracted - without errors" and + value = count(SuccessfullyExtractedFile f | exists(f.getRelativePath())).toString() + or key = "Lines of code extracted" and value = getLinesOfCode().toString() or key = "Lines of user code extracted" and value = getLinesOfUserCode().toString() diff --git a/rust/ql/test/query-tests/diagnostics/SummaryStats.expected b/rust/ql/test/query-tests/diagnostics/SummaryStats.expected index ff07c0f589a6..cc467865b00f 100644 --- a/rust/ql/test/query-tests/diagnostics/SummaryStats.expected +++ b/rust/ql/test/query-tests/diagnostics/SummaryStats.expected @@ -1,5 +1,9 @@ | Elements extracted | 210 | | Elements unextracted | 0 | -| Files extracted | 6 | +| Extraction errors | 6 | +| Extraction warnings | 0 | +| Files extracted - total | 6 | +| Files extracted - with errors | 1 | +| Files extracted - without errors | 5 | | Lines of code extracted | 48 | | Lines of user code extracted | 48 | From da84889242e786e7b2bdbd844e7bfdf7cef6fab6 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 3 Oct 2024 12:50:40 +0100 Subject: [PATCH 013/217] Rust: Use @diagnostic_error, @diagnostic_warning rather than constants. --- rust/ql/lib/codeql/rust/Diagnostics.qll | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/rust/ql/lib/codeql/rust/Diagnostics.qll b/rust/ql/lib/codeql/rust/Diagnostics.qll index 8f77b64c5123..58de14b8fcf5 100644 --- a/rust/ql/lib/codeql/rust/Diagnostics.qll +++ b/rust/ql/lib/codeql/rust/Diagnostics.qll @@ -49,11 +49,7 @@ class Diagnostic extends @diagnostic { } /** A diagnostic that is error severity. */ -class ExtractionError extends Diagnostic { - ExtractionError() { this.getSeverity() = 40 } -} +class ExtractionError extends Diagnostic, @diagnostic_error { } /** A diagnostic that is warning severity. */ -class ExtractionWarning extends Diagnostic { - ExtractionWarning() { this.getSeverity() = 30 } -} +class ExtractionWarning extends Diagnostic, @diagnostic_warning { } From 32dbdb39133c80ab29386d78cb62e96b8e68d5db Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 3 Oct 2024 12:50:59 +0100 Subject: [PATCH 014/217] Rust: Update summary stats .expected file. --- rust/ql/test/query-tests/diagnostics/SummaryStats.expected | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rust/ql/test/query-tests/diagnostics/SummaryStats.expected b/rust/ql/test/query-tests/diagnostics/SummaryStats.expected index cc467865b00f..8fe7ee7fb47c 100644 --- a/rust/ql/test/query-tests/diagnostics/SummaryStats.expected +++ b/rust/ql/test/query-tests/diagnostics/SummaryStats.expected @@ -1,7 +1,7 @@ | Elements extracted | 210 | | Elements unextracted | 0 | -| Extraction errors | 6 | -| Extraction warnings | 0 | +| Extraction errors | 0 | +| Extraction warnings | 6 | | Files extracted - total | 6 | | Files extracted - with errors | 1 | | Files extracted - without errors | 5 | From 2e772a80c4bed04c04083e6f8eb2c20e4dc8effb Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 3 Oct 2024 15:15:32 +0100 Subject: [PATCH 015/217] Rust: Accept minor consistency .expected changes. --- .../utf8/CONSISTENCY/ExtractionConsistency.expected | 1 + .../diagnostics/CONSISTENCY/ExtractionConsistency.expected | 1 + 2 files changed, 2 insertions(+) diff --git a/rust/ql/test/extractor-tests/utf8/CONSISTENCY/ExtractionConsistency.expected b/rust/ql/test/extractor-tests/utf8/CONSISTENCY/ExtractionConsistency.expected index 23b423a489a1..45026be3af2b 100644 --- a/rust/ql/test/extractor-tests/utf8/CONSISTENCY/ExtractionConsistency.expected +++ b/rust/ql/test/extractor-tests/utf8/CONSISTENCY/ExtractionConsistency.expected @@ -1,3 +1,4 @@ +extractionWarning | lib.rs:3:9:3:8 | expected `;` or `{` | | lib.rs:3:9:3:8 | expected an item | | lib.rs:3:21:3:20 | expected BANG | diff --git a/rust/ql/test/query-tests/diagnostics/CONSISTENCY/ExtractionConsistency.expected b/rust/ql/test/query-tests/diagnostics/CONSISTENCY/ExtractionConsistency.expected index 157aafc87852..0d5ffb095614 100644 --- a/rust/ql/test/query-tests/diagnostics/CONSISTENCY/ExtractionConsistency.expected +++ b/rust/ql/test/query-tests/diagnostics/CONSISTENCY/ExtractionConsistency.expected @@ -1,3 +1,4 @@ +extractionWarning | does_not_compile.rs:2:6:2:5 | expected SEMICOLON | | does_not_compile.rs:2:9:2:8 | expected SEMICOLON | | does_not_compile.rs:2:13:2:12 | expected SEMICOLON | From 4c7ec59306a432242f510618611f4fddf3099cc3 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 3 Oct 2024 14:16:12 +0100 Subject: [PATCH 016/217] Ruby: Sync identical files. --- ruby/ql/lib/codeql/ruby/Diagnostics.qll | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/Diagnostics.qll b/ruby/ql/lib/codeql/ruby/Diagnostics.qll index 5902bb594141..58de14b8fcf5 100644 --- a/ruby/ql/lib/codeql/ruby/Diagnostics.qll +++ b/ruby/ql/lib/codeql/ruby/Diagnostics.qll @@ -48,7 +48,8 @@ class Diagnostic extends @diagnostic { string toString() { result = this.getMessage() } } -/** A diagnostic relating to a particular error in extracting a file. */ -class ExtractionError extends Diagnostic { - ExtractionError() { this.getTag() = "parse_error" } -} +/** A diagnostic that is error severity. */ +class ExtractionError extends Diagnostic, @diagnostic_error { } + +/** A diagnostic that is warning severity. */ +class ExtractionWarning extends Diagnostic, @diagnostic_warning { } From 1ea94faccf7113ae339190c1151926184fbbfe7d Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:27:52 +0100 Subject: [PATCH 017/217] Ruby: Make similar changes to differentiate extraction errors and warnings, and mostly restore original behaviour. --- ruby/ql/consistency-queries/AstConsistency.ql | 2 ++ ruby/ql/lib/codeql/files/FileSystem.qll | 18 ++++++++++++++++++ .../NumberOfFilesExtractedWithErrors.ql | 7 ++++--- .../NumberOfSuccessfullyExtractedFiles.ql | 8 +++----- .../CONSISTENCY/AstConsistency.expected | 2 +- .../diagnostics/ExtractionErrors.expected | 1 - 6 files changed, 28 insertions(+), 10 deletions(-) diff --git a/ruby/ql/consistency-queries/AstConsistency.ql b/ruby/ql/consistency-queries/AstConsistency.ql index 2a9fea8fea90..d7792a8ae4d0 100644 --- a/ruby/ql/consistency-queries/AstConsistency.ql +++ b/ruby/ql/consistency-queries/AstConsistency.ql @@ -31,3 +31,5 @@ query predicate multipleToString(AstNode n, string s) { } query predicate extractionError(ExtractionError error) { any() } + +query predicate extractionWarning(ExtractionWarning error) { any() } diff --git a/ruby/ql/lib/codeql/files/FileSystem.qll b/ruby/ql/lib/codeql/files/FileSystem.qll index 528dde52fd91..8985cc333447 100644 --- a/ruby/ql/lib/codeql/files/FileSystem.qll +++ b/ruby/ql/lib/codeql/files/FileSystem.qll @@ -2,6 +2,7 @@ private import codeql.Locations private import codeql.util.FileSystem +private import codeql.ruby.Diagnostics private module Input implements InputSig { abstract class ContainerBase extends @container { @@ -34,3 +35,20 @@ class File extends Container, Impl::File { /** Holds if this file was extracted from ordinary source code. */ predicate fromSource() { any() } } + +/** + * A successfully extracted file, that is, a file that was extracted and + * contains no extraction errors or warnings. + */ +class SuccessfullyExtractedFile extends File { + SuccessfullyExtractedFile() { + not exists(Diagnostic d | + d.getLocation().getFile() = this and + ( + d instanceof ExtractionError + or + d instanceof ExtractionWarning + ) + ) + } +} diff --git a/ruby/ql/src/queries/summary/NumberOfFilesExtractedWithErrors.ql b/ruby/ql/src/queries/summary/NumberOfFilesExtractedWithErrors.ql index 8623ed911d5a..1cbc28b6cc6b 100644 --- a/ruby/ql/src/queries/summary/NumberOfFilesExtractedWithErrors.ql +++ b/ruby/ql/src/queries/summary/NumberOfFilesExtractedWithErrors.ql @@ -2,14 +2,15 @@ * @id rb/summary/number-of-files-extracted-with-errors * @name Total number of Ruby files that were extracted with errors * @description The total number of Ruby code files that we extracted, but where - * at least one extraction error occurred in the process. + * at least one extraction error (or warning) occurred in the process. * @kind metric * @tags summary */ import codeql.ruby.AST -import codeql.ruby.Diagnostics +import codeql.files.FileSystem select count(File f | - exists(ExtractionError e | e.getLocation().getFile() = f) and exists(f.getRelativePath()) + exists(f.getRelativePath()) and + not f instanceof SuccessfullyExtractedFile ) diff --git a/ruby/ql/src/queries/summary/NumberOfSuccessfullyExtractedFiles.ql b/ruby/ql/src/queries/summary/NumberOfSuccessfullyExtractedFiles.ql index 236374ff2261..afd667cf58c5 100644 --- a/ruby/ql/src/queries/summary/NumberOfSuccessfullyExtractedFiles.ql +++ b/ruby/ql/src/queries/summary/NumberOfSuccessfullyExtractedFiles.ql @@ -2,14 +2,12 @@ * @id rb/summary/number-of-successfully-extracted-files * @name Total number of Ruby files that were extracted without error * @description The total number of Ruby code files that we extracted without - * encountering any extraction errors + * encountering any extraction errors (or warnings). * @kind metric * @tags summary */ import codeql.ruby.AST -import codeql.ruby.Diagnostics +import codeql.files.FileSystem -select count(File f | - not exists(ExtractionError e | e.getLocation().getFile() = f) and exists(f.getRelativePath()) - ) +select count(SuccessfullyExtractedFile f | exists(f.getRelativePath())) diff --git a/ruby/ql/test/query-tests/diagnostics/CONSISTENCY/AstConsistency.expected b/ruby/ql/test/query-tests/diagnostics/CONSISTENCY/AstConsistency.expected index 5dc14116b917..93df75151a77 100644 --- a/ruby/ql/test/query-tests/diagnostics/CONSISTENCY/AstConsistency.expected +++ b/ruby/ql/test/query-tests/diagnostics/CONSISTENCY/AstConsistency.expected @@ -1,2 +1,2 @@ -extractionError +extractionWarning | src/not_ruby.rb:5:25:5:26 | A parse error occurred. Check the syntax of the file. If the file is invalid, correct the error or exclude the file from analysis. | diff --git a/ruby/ql/test/query-tests/diagnostics/ExtractionErrors.expected b/ruby/ql/test/query-tests/diagnostics/ExtractionErrors.expected index dc37ca3642b3..e69de29bb2d1 100644 --- a/ruby/ql/test/query-tests/diagnostics/ExtractionErrors.expected +++ b/ruby/ql/test/query-tests/diagnostics/ExtractionErrors.expected @@ -1 +0,0 @@ -| src/not_ruby.rb:5:25:5:26 | A parse error occurred. Check the syntax of the file. If the file is invalid, correct the error or exclude the file from analysis. | Extraction failed in src/not_ruby.rb with error A parse error occurred. Check the syntax of the file. If the file is invalid, correct the error or exclude the file from analysis. | 2 | From 86cc2dc5a1e117b8a9f3e58c639c41d1509593d3 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:29:25 +0100 Subject: [PATCH 018/217] Ruby: Add rb/diagnostics/extraction-warnings so that we don't miss anything we had before. --- .../queries/diagnostics/ExtractionWarnings.ql | 19 +++++++++++++++++++ .../diagnostics/ExtractionWarnings.expected | 1 + .../diagnostics/ExtractionWarnings.qlref | 1 + 3 files changed, 21 insertions(+) create mode 100644 ruby/ql/src/queries/diagnostics/ExtractionWarnings.ql create mode 100644 ruby/ql/test/query-tests/diagnostics/ExtractionWarnings.expected create mode 100644 ruby/ql/test/query-tests/diagnostics/ExtractionWarnings.qlref diff --git a/ruby/ql/src/queries/diagnostics/ExtractionWarnings.ql b/ruby/ql/src/queries/diagnostics/ExtractionWarnings.ql new file mode 100644 index 000000000000..74f007390567 --- /dev/null +++ b/ruby/ql/src/queries/diagnostics/ExtractionWarnings.ql @@ -0,0 +1,19 @@ +/** + * @name Extraction warnings + * @description List all extraction warnings for files in the source code directory. + * @kind diagnostic + * @id rb/diagnostics/extraction-warnings + */ + +import codeql.ruby.AST +import codeql.ruby.Diagnostics + +/** Gets the SARIF severity to associate with a warning. */ +int getSeverity() { result = 1 } + +from ExtractionWarning warning, File f +where + f = warning.getLocation().getFile() and + exists(f.getRelativePath()) +select warning, "Extraction warning in " + f + " with message " + warning.getMessage(), + getSeverity() diff --git a/ruby/ql/test/query-tests/diagnostics/ExtractionWarnings.expected b/ruby/ql/test/query-tests/diagnostics/ExtractionWarnings.expected new file mode 100644 index 000000000000..c47ec9c5d365 --- /dev/null +++ b/ruby/ql/test/query-tests/diagnostics/ExtractionWarnings.expected @@ -0,0 +1 @@ +| src/not_ruby.rb:5:25:5:26 | A parse error occurred. Check the syntax of the file. If the file is invalid, correct the error or exclude the file from analysis. | Extraction warning in src/not_ruby.rb with message A parse error occurred. Check the syntax of the file. If the file is invalid, correct the error or exclude the file from analysis. | 1 | diff --git a/ruby/ql/test/query-tests/diagnostics/ExtractionWarnings.qlref b/ruby/ql/test/query-tests/diagnostics/ExtractionWarnings.qlref new file mode 100644 index 000000000000..ff6e566d20a7 --- /dev/null +++ b/ruby/ql/test/query-tests/diagnostics/ExtractionWarnings.qlref @@ -0,0 +1 @@ +queries/diagnostics/ExtractionWarnings.ql From d4414dabff35e74aace2743596d31108ad4cdb5e Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:38:28 +0100 Subject: [PATCH 019/217] Ruby: Add change notes. --- ruby/ql/lib/change-notes/2024-10-03-extraction-warnings.md | 4 ++++ ruby/ql/src/change-notes/2024-10-03-extraction-warnings.md | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 ruby/ql/lib/change-notes/2024-10-03-extraction-warnings.md create mode 100644 ruby/ql/src/change-notes/2024-10-03-extraction-warnings.md diff --git a/ruby/ql/lib/change-notes/2024-10-03-extraction-warnings.md b/ruby/ql/lib/change-notes/2024-10-03-extraction-warnings.md new file mode 100644 index 000000000000..5d6128354c3b --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-10-03-extraction-warnings.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The `ExtractionError` class has been split into `ExtractionError` and `ExtractionWarning`, reporting extraction errors and warnings respectively. diff --git a/ruby/ql/src/change-notes/2024-10-03-extraction-warnings.md b/ruby/ql/src/change-notes/2024-10-03-extraction-warnings.md new file mode 100644 index 000000000000..ac97cd1e7ba2 --- /dev/null +++ b/ruby/ql/src/change-notes/2024-10-03-extraction-warnings.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The `rb/diagnostics/extraction-errors` diagnostic query has been split into `rb/diagnostics/extraction-errors` and `rb/diagnostics/extraction-warnings`, counting extraction errors and warnings respectively. From 073189ed6b1daae6c254a0b25f0800ce3e9f85c0 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Thu, 3 Oct 2024 14:50:16 +0200 Subject: [PATCH 020/217] python: add test for `re.Match` objects returned from `finditer` --- python/ql/test/library-tests/frameworks/stdlib/test_re.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/python/ql/test/library-tests/frameworks/stdlib/test_re.py b/python/ql/test/library-tests/frameworks/stdlib/test_re.py index e45a3fe2576d..b95d65619e27 100644 --- a/python/ql/test/library-tests/frameworks/stdlib/test_re.py +++ b/python/ql/test/library-tests/frameworks/stdlib/test_re.py @@ -38,6 +38,12 @@ compiled_pat.match(ts).string, # $ tainted re.compile(ts).match("safe").re.pattern, # $ tainted + + list(re.finditer(pat, ts))[0].string, # $ MISSING: tainted + [m.string for m in re.finditer(pat, ts)], # $ MISSING: tainted + + list(re.finditer(pat, ts))[0].groups()[0], # $ MISSING: tainted + [m.groups()[0] for m in re.finditer(pat, ts)], # $ MISSING: tainted ) ensure_not_tainted( safe_match.expand("Hello \1"), From 494b8bd7e14d0bea50057eca124c203abb5ce584 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 9 Oct 2024 12:40:47 +0200 Subject: [PATCH 021/217] python: model `string` property of resultof `finditer` --- python/ql/lib/semmle/python/frameworks/Stdlib.qll | 8 ++++++++ python/ql/test/library-tests/frameworks/stdlib/test_re.py | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index c7179dbd46c0..950e741d58eb 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -3463,6 +3463,14 @@ module StdlibPrivate { ) and preservesValue = false ) + or + // flow from input string to attribute on match object + exists(int arg | arg = methodName.(RegexExecutionMethod).getStringArgIndex() - offset | + input in ["Argument[" + arg + "]", "Argument[string:]"] and + methodName = "finditer" and + output = "ReturnValue.ListElement.Attribute[string]" and + preservesValue = true + ) ) } } diff --git a/python/ql/test/library-tests/frameworks/stdlib/test_re.py b/python/ql/test/library-tests/frameworks/stdlib/test_re.py index b95d65619e27..c2c3c75a979a 100644 --- a/python/ql/test/library-tests/frameworks/stdlib/test_re.py +++ b/python/ql/test/library-tests/frameworks/stdlib/test_re.py @@ -39,8 +39,8 @@ compiled_pat.match(ts).string, # $ tainted re.compile(ts).match("safe").re.pattern, # $ tainted - list(re.finditer(pat, ts))[0].string, # $ MISSING: tainted - [m.string for m in re.finditer(pat, ts)], # $ MISSING: tainted + list(re.finditer(pat, ts))[0].string, # $ tainted + [m.string for m in re.finditer(pat, ts)], # $ tainted list(re.finditer(pat, ts))[0].groups()[0], # $ MISSING: tainted [m.groups()[0] for m in re.finditer(pat, ts)], # $ MISSING: tainted From 0ac4a10345735444ce8c00c62bfbdd5bd8387710 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 9 Oct 2024 12:42:38 +0200 Subject: [PATCH 022/217] Python: model that `finditer` returns iterable of `re.Match` objects --- .../lib/semmle/python/frameworks/Stdlib.qll | 52 ++++++++++++------- .../frameworks/stdlib/test_re.py | 4 +- 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index 950e741d58eb..2bec246bfc0b 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -3284,6 +3284,18 @@ module StdlibPrivate { } } + /** + * A base API node for regular expression functions. + * Either the `re` module or a compiled regular expression. + */ + private API::Node re(boolean compiled) { + result = API::moduleImport("re") and + compiled = false + or + result = any(RePatternSummary c).getACall().(API::CallNode).getReturn() and + compiled = true + } + /** * A flow summary for methods returning a `re.Match` object * @@ -3293,17 +3305,18 @@ module StdlibPrivate { ReMatchSummary() { this = ["re.Match", "compiled re.Match"] } override DataFlow::CallCfgNode getACall() { - this = "re.Match" and - result = API::moduleImport("re").getMember(["match", "search", "fullmatch"]).getACall() - or - this = "compiled re.Match" and - result = - any(RePatternSummary c) - .getACall() - .(API::CallNode) - .getReturn() - .getMember(["match", "search", "fullmatch"]) - .getACall() + exists(API::Node re, boolean compiled | + re = re(compiled) and + ( + compiled = false and + this = "re.Match" + or + compiled = true and + this = "compiled re.Match" + ) + | + result = re.getMember(["match", "search", "fullmatch"]).getACall() + ) } override DataFlow::ArgumentNode getACallback() { none() } @@ -3340,6 +3353,13 @@ module StdlibPrivate { } } + /** An API node for a `re.Match` object */ + private API::Node match() { + result = any(ReMatchSummary c).getACall().(API::CallNode).getReturn() + or + result = re(_).getMember("finditer").getReturn().getASubscript() + } + /** * A flow summary for methods on a `re.Match` object * @@ -3353,15 +3373,7 @@ module StdlibPrivate { methodName in ["expand", "group", "groups", "groupdict"] } - override DataFlow::CallCfgNode getACall() { - result = - any(ReMatchSummary c) - .getACall() - .(API::CallNode) - .getReturn() - .getMember(methodName) - .getACall() - } + override DataFlow::CallCfgNode getACall() { result = match().getMember(methodName).getACall() } override DataFlow::ArgumentNode getACallback() { none() } diff --git a/python/ql/test/library-tests/frameworks/stdlib/test_re.py b/python/ql/test/library-tests/frameworks/stdlib/test_re.py index c2c3c75a979a..4cfe5d972b7b 100644 --- a/python/ql/test/library-tests/frameworks/stdlib/test_re.py +++ b/python/ql/test/library-tests/frameworks/stdlib/test_re.py @@ -42,8 +42,8 @@ list(re.finditer(pat, ts))[0].string, # $ tainted [m.string for m in re.finditer(pat, ts)], # $ tainted - list(re.finditer(pat, ts))[0].groups()[0], # $ MISSING: tainted - [m.groups()[0] for m in re.finditer(pat, ts)], # $ MISSING: tainted + list(re.finditer(pat, ts))[0].groups()[0], # $ MISSING: tainted // this requires list content in type tracking + [m.groups()[0] for m in re.finditer(pat, ts)], # $ tainted ) ensure_not_tainted( safe_match.expand("Hello \1"), From 201842d2f9c8312d86909fbae5b8497f223c60c0 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 9 Oct 2024 14:33:20 +0100 Subject: [PATCH 023/217] C++: Add test with missing flow through 'fopen'. --- .../dataflow/taint-tests/localTaint.expected | 9 +++++++++ .../library-tests/dataflow/taint-tests/taint.cpp | 12 ++++++++++++ 2 files changed, 21 insertions(+) diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected b/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected index 80541c16115f..480899ea78bf 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected @@ -6584,6 +6584,15 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | taint.cpp:767:21:767:24 | ref arg path | taint.cpp:768:8:768:11 | path | | | taint.cpp:768:8:768:11 | path | taint.cpp:768:7:768:11 | * ... | | | taint.cpp:778:37:778:42 | call to source | taint.cpp:779:7:779:9 | obj | | +| taint.cpp:785:23:785:28 | source | taint.cpp:785:23:785:28 | source | | +| taint.cpp:785:23:785:28 | source | taint.cpp:786:18:786:23 | source | | +| taint.cpp:785:23:785:28 | source | taint.cpp:790:15:790:20 | source | | +| taint.cpp:786:12:786:16 | call to fopen | taint.cpp:787:7:787:7 | f | | +| taint.cpp:789:8:789:9 | f2 | taint.cpp:790:11:790:12 | f2 | | +| taint.cpp:789:8:789:9 | f2 | taint.cpp:791:7:791:8 | f2 | | +| taint.cpp:790:10:790:12 | ref arg & ... | taint.cpp:790:11:790:12 | f2 [inner post update] | | +| taint.cpp:790:10:790:12 | ref arg & ... | taint.cpp:791:7:791:8 | f2 | | +| taint.cpp:790:11:790:12 | f2 | taint.cpp:790:10:790:12 | & ... | | | vector.cpp:16:43:16:49 | source1 | vector.cpp:17:26:17:32 | source1 | | | vector.cpp:16:43:16:49 | source1 | vector.cpp:31:38:31:44 | source1 | | | vector.cpp:17:21:17:33 | call to vector | vector.cpp:19:14:19:14 | v | | diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp index 220265a3bb1a..579df2865785 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp @@ -777,4 +777,16 @@ TaintInheritingContentObject source(bool); void test_TaintInheritingContent() { TaintInheritingContentObject obj = source(true); sink(obj.flowFromObject); // $ ir MISSING: ast +} + +FILE* fopen(const char*, const char*); +int fopen_s(FILE** pFile, const char *filename, const char *mode); + +void fopen_test(char* source) { + FILE* f = fopen(source, "r"); + sink(f); // $ MISSING: ast,ir + + FILE* f2; + fopen_s(&f2, source, "r"); + sink(f2); // $ ast MISSING: ir } \ No newline at end of file From 338e82064e3d18f718757e19fa4beccc145d515d Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 9 Oct 2024 14:40:26 +0100 Subject: [PATCH 024/217] C++: Add a taint model for 'fopen' and accept test changes. --- .../code/cpp/models/implementations/Fopen.qll | 17 ++++++++++++++++- .../dataflow/taint-tests/localTaint.expected | 1 + .../dataflow/taint-tests/taint.cpp | 4 ++-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll index 6bc700becf1e..e7cb84753853 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll @@ -7,7 +7,7 @@ import semmle.code.cpp.models.interfaces.Alias import semmle.code.cpp.models.interfaces.SideEffect /** The function `fopen` and friends. */ -private class Fopen extends Function, AliasFunction, SideEffectFunction { +private class Fopen extends Function, AliasFunction, SideEffectFunction, TaintFunction { Fopen() { this.hasGlobalOrStdName(["fopen", "fopen_s", "freopen"]) or @@ -47,4 +47,19 @@ private class Fopen extends Function, AliasFunction, SideEffectFunction { i = 0 and buffer = true } + + override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) { + this.hasGlobalOrStdName(["fopen", "freopen", "_wfopen", "_fsopen", "_wfsopen"]) and + input.isParameterDeref(0) and + output.isReturnValueDeref() + or + // The out parameter is a pointer to a `FILE*`. + this.hasGlobalOrStdName(["fopen_s"]) and + input.isParameterDeref(1) and + output.isParameterDeref(0, 2) + or + this.hasGlobalName(["_open", "_wopen"]) and + input.isParameterDeref(0) and + output.isReturnValue() + } } diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected b/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected index 480899ea78bf..7de6914e8aac 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected @@ -6588,6 +6588,7 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | taint.cpp:785:23:785:28 | source | taint.cpp:786:18:786:23 | source | | | taint.cpp:785:23:785:28 | source | taint.cpp:790:15:790:20 | source | | | taint.cpp:786:12:786:16 | call to fopen | taint.cpp:787:7:787:7 | f | | +| taint.cpp:786:18:786:23 | source | taint.cpp:786:12:786:16 | call to fopen | TAINT | | taint.cpp:789:8:789:9 | f2 | taint.cpp:790:11:790:12 | f2 | | | taint.cpp:789:8:789:9 | f2 | taint.cpp:791:7:791:8 | f2 | | | taint.cpp:790:10:790:12 | ref arg & ... | taint.cpp:790:11:790:12 | f2 [inner post update] | | diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp index 579df2865785..a5f63b3d2e61 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp @@ -784,9 +784,9 @@ int fopen_s(FILE** pFile, const char *filename, const char *mode); void fopen_test(char* source) { FILE* f = fopen(source, "r"); - sink(f); // $ MISSING: ast,ir + sink(f); // $ ast,ir FILE* f2; fopen_s(&f2, source, "r"); - sink(f2); // $ ast MISSING: ir + sink(f2); // $ ast,ir } \ No newline at end of file From 954235ecddc426c483796788cb7c39bdd48ed840 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 9 Oct 2024 14:42:36 +0100 Subject: [PATCH 025/217] C++: Add change note. --- cpp/ql/lib/change-notes/2024-10-09-fopen-taint.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2024-10-09-fopen-taint.md diff --git a/cpp/ql/lib/change-notes/2024-10-09-fopen-taint.md b/cpp/ql/lib/change-notes/2024-10-09-fopen-taint.md new file mode 100644 index 000000000000..d2516859a910 --- /dev/null +++ b/cpp/ql/lib/change-notes/2024-10-09-fopen-taint.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added taint flow model for `fopen` and related functions. \ No newline at end of file From 4de0fefe867d8fc888d5ff3399c6dd4977b59155 Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Wed, 9 Oct 2024 15:49:11 +0200 Subject: [PATCH 026/217] Upgrade rules_kotlin to 2.0.0. This is required for the bazel 8 upgrade, as one of the incompatible-flag flips breaks 1.9.4. --- MODULE.bazel | 2 +- .../rules_kotlin/1.9.4-codeql.1/source.json | 9 --------- .../MODULE.bazel | 12 ++++++++---- .../codeql_add_language_version_option.patch | 16 ++++++++-------- .../patches/codeql_do_not_emit_jdeps.patch | 8 +++++--- .../rules_kotlin/2.0.0-codeql.1/source.json | 9 +++++++++ .../registry/modules/rules_kotlin/metadata.json | 2 +- 7 files changed, 32 insertions(+), 26 deletions(-) delete mode 100644 misc/bazel/registry/modules/rules_kotlin/1.9.4-codeql.1/source.json rename misc/bazel/registry/modules/rules_kotlin/{1.9.4-codeql.1 => 2.0.0-codeql.1}/MODULE.bazel (74%) rename misc/bazel/registry/modules/rules_kotlin/{1.9.4-codeql.1 => 2.0.0-codeql.1}/patches/codeql_add_language_version_option.patch (80%) rename misc/bazel/registry/modules/rules_kotlin/{1.9.4-codeql.1 => 2.0.0-codeql.1}/patches/codeql_do_not_emit_jdeps.patch (73%) create mode 100644 misc/bazel/registry/modules/rules_kotlin/2.0.0-codeql.1/source.json diff --git a/MODULE.bazel b/MODULE.bazel index 4a2219d43a54..568e35c41767 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -23,7 +23,7 @@ bazel_dep(name = "bazel_skylib", version = "1.6.1") bazel_dep(name = "abseil-cpp", version = "20240116.0", repo_name = "absl") bazel_dep(name = "nlohmann_json", version = "3.11.3", repo_name = "json") bazel_dep(name = "fmt", version = "10.0.0") -bazel_dep(name = "rules_kotlin", version = "1.9.4-codeql.1") +bazel_dep(name = "rules_kotlin", version = "2.0.0-codeql.1") bazel_dep(name = "gazelle", version = "0.38.0") bazel_dep(name = "rules_dotnet", version = "0.15.1") bazel_dep(name = "googletest", version = "1.14.0.bcr.1") diff --git a/misc/bazel/registry/modules/rules_kotlin/1.9.4-codeql.1/source.json b/misc/bazel/registry/modules/rules_kotlin/1.9.4-codeql.1/source.json deleted file mode 100644 index 5089476d754a..000000000000 --- a/misc/bazel/registry/modules/rules_kotlin/1.9.4-codeql.1/source.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "integrity": "sha256-dsD8wsI+33NjIK3tGs2d3guuQY5XMd8Skz2IbLqGt5U=", - "url": "https://github.com/bazelbuild/rules_kotlin/releases/download/v1.9.4/rules_kotlin-v1.9.4.tar.gz", - "patches": { - "codeql_do_not_emit_jdeps.patch": "sha256-x/HsujFlR1FGrgmbAbRZag9V4vKZZinBcs73tgRS478=", - "codeql_add_language_version_option.patch": "sha256-qFpP/hIvqGzjJi0h8LAQK0UuWqwlj/oCecZYGqlMVP8=" - }, - "patch_strip": 1 -} diff --git a/misc/bazel/registry/modules/rules_kotlin/1.9.4-codeql.1/MODULE.bazel b/misc/bazel/registry/modules/rules_kotlin/2.0.0-codeql.1/MODULE.bazel similarity index 74% rename from misc/bazel/registry/modules/rules_kotlin/1.9.4-codeql.1/MODULE.bazel rename to misc/bazel/registry/modules/rules_kotlin/2.0.0-codeql.1/MODULE.bazel index 4982ad4b9a4d..6c11301e2340 100644 --- a/misc/bazel/registry/modules/rules_kotlin/1.9.4-codeql.1/MODULE.bazel +++ b/misc/bazel/registry/modules/rules_kotlin/2.0.0-codeql.1/MODULE.bazel @@ -1,14 +1,16 @@ module( name = "rules_kotlin", - version = "1.9.4-codeql.1", + version = "2.0.0-codeql.1", + compatibility_level = 1, repo_name = "rules_kotlin", ) -bazel_dep(name = "platforms", version = "0.0.6") -bazel_dep(name = "bazel_skylib", version = "1.4.2") +bazel_dep(name = "platforms", version = "0.0.10") +bazel_dep(name = "bazel_skylib", version = "1.7.1") bazel_dep(name = "rules_java", version = "7.2.0") bazel_dep(name = "rules_python", version = "0.23.1") bazel_dep(name = "rules_cc", version = "0.0.8") +bazel_dep(name = "rules_android", version = "0.1.1") rules_kotlin_extensions = use_extension( "//src/main/starlark/core/repositories:bzlmod_setup.bzl", @@ -19,7 +21,9 @@ use_repo( "com_github_google_ksp", "com_github_jetbrains_kotlin", "com_github_pinterest_ktlint", - "rules_android", + "kotlinx_serialization_core_jvm", + "kotlinx_serialization_json", + "kotlinx_serialization_json_jvm", ) register_toolchains("//kotlin/internal:default_toolchain") diff --git a/misc/bazel/registry/modules/rules_kotlin/1.9.4-codeql.1/patches/codeql_add_language_version_option.patch b/misc/bazel/registry/modules/rules_kotlin/2.0.0-codeql.1/patches/codeql_add_language_version_option.patch similarity index 80% rename from misc/bazel/registry/modules/rules_kotlin/1.9.4-codeql.1/patches/codeql_add_language_version_option.patch rename to misc/bazel/registry/modules/rules_kotlin/2.0.0-codeql.1/patches/codeql_add_language_version_option.patch index bb8fa5e4fcaf..d5716daba07b 100644 --- a/misc/bazel/registry/modules/rules_kotlin/1.9.4-codeql.1/patches/codeql_add_language_version_option.patch +++ b/misc/bazel/registry/modules/rules_kotlin/2.0.0-codeql.1/patches/codeql_add_language_version_option.patch @@ -1,13 +1,13 @@ We need to build different extractor variants with different -language-version options, which is not allowed in current kotlin_rules diff --git a/src/main/starlark/core/options/opts.kotlinc.bzl b/src/main/starlark/core/options/opts.kotlinc.bzl -index 9b15fb8..c0ac2cd 100644 +index 5e1461b..b93e6aa 100644 --- a/src/main/starlark/core/options/opts.kotlinc.bzl +++ b/src/main/starlark/core/options/opts.kotlinc.bzl -@@ -28,6 +28,11 @@ def _map_jvm_target_to_flag(version): +@@ -33,6 +33,11 @@ def _map_jdk_release_to_flag(version): return None - return ["-jvm-target=%s" % version] - + return ["-Xjdk-release=%s" % version] + +def _map_language_version_to_flag(version): + if not version: + return None @@ -16,9 +16,9 @@ index 9b15fb8..c0ac2cd 100644 _KOPTS_ALL = { "warn": struct( args = dict( -@@ -349,6 +354,15 @@ _KOPTS_ALL = { +@@ -417,6 +422,15 @@ _KOPTS_ALL = { value_to_flag = None, - map_value_to_flag = _map_jvm_target_to_flag, + map_value_to_flag = _map_jdk_release_to_flag, ), + "language_version": struct( + args = dict( @@ -30,5 +30,5 @@ index 9b15fb8..c0ac2cd 100644 + map_value_to_flag = _map_language_version_to_flag, + ), } - - # Filters out options that are not available in current compiler release + + # Filters out options that are not available in current compiler release \ No newline at end of file diff --git a/misc/bazel/registry/modules/rules_kotlin/1.9.4-codeql.1/patches/codeql_do_not_emit_jdeps.patch b/misc/bazel/registry/modules/rules_kotlin/2.0.0-codeql.1/patches/codeql_do_not_emit_jdeps.patch similarity index 73% rename from misc/bazel/registry/modules/rules_kotlin/1.9.4-codeql.1/patches/codeql_do_not_emit_jdeps.patch rename to misc/bazel/registry/modules/rules_kotlin/2.0.0-codeql.1/patches/codeql_do_not_emit_jdeps.patch index 1a01bd2c91bc..380c837d06a4 100644 --- a/misc/bazel/registry/modules/rules_kotlin/1.9.4-codeql.1/patches/codeql_do_not_emit_jdeps.patch +++ b/misc/bazel/registry/modules/rules_kotlin/2.0.0-codeql.1/patches/codeql_do_not_emit_jdeps.patch @@ -1,9 +1,11 @@ Emitting jdeps is broken for the 2.0.0 kotlin extractor, and we don't need those files. Patching it here rather than passing `--@rules_kotlin//kotlin/settings:jvm_emit_jdeps=false` allows us to not have to specify that option (and therefore pull in `rules_kotlin`) in `semmle-code`. ---- a/kotlin/settings/BUILD.bazel 2000-01-01 01:00:00.000000000 +0100 -+++ b/kotlin/settings/BUILD.bazel 2024-04-10 14:51:16.060085986 +0200 -@@ -16,7 +16,7 @@ +diff --git a/kotlin/settings/BUILD.bazel b/kotlin/settings/BUILD.bazel +index 2c93c11..f352b80 100644 +--- a/kotlin/settings/BUILD.bazel ++++ b/kotlin/settings/BUILD.bazel +@@ -25,7 +25,7 @@ release_archive( # Flag that controls the emission of jdeps files during kotlin jvm compilation. bool_flag( name = "jvm_emit_jdeps", diff --git a/misc/bazel/registry/modules/rules_kotlin/2.0.0-codeql.1/source.json b/misc/bazel/registry/modules/rules_kotlin/2.0.0-codeql.1/source.json new file mode 100644 index 000000000000..96d828e3455a --- /dev/null +++ b/misc/bazel/registry/modules/rules_kotlin/2.0.0-codeql.1/source.json @@ -0,0 +1,9 @@ +{ + "integrity": "sha256-2JcjzJ67t72y66yhr30jg+B0YVZDz5ejZrdYp2t9xEM=", + "url": "https://github.com/bazelbuild/rules_kotlin/releases/download/v2.0.0/rules_kotlin-v2.0.0.tar.gz", + "patches": { + "codeql_do_not_emit_jdeps.patch": "sha256-1ir4Aio1SICxnj1wafQ0GefT/m7bwn2n+SQwq19V3A8=", + "codeql_add_language_version_option.patch": "sha256-t8Fm0bYZ4Q4vTqcoXZjyK4WPEoAafjE4whJLNnrnRbg=" + }, + "patch_strip": 1 +} diff --git a/misc/bazel/registry/modules/rules_kotlin/metadata.json b/misc/bazel/registry/modules/rules_kotlin/metadata.json index e399c3f5b0a2..ac259b2e729a 100644 --- a/misc/bazel/registry/modules/rules_kotlin/metadata.json +++ b/misc/bazel/registry/modules/rules_kotlin/metadata.json @@ -21,7 +21,7 @@ "github:bazelbuild/rules_kotlin" ], "versions": [ - "1.9.4-codeql.1" + "2.0.0-codeql.1" ], "yanked_versions": {} } From 6965cf724605c086dcb188319e25605969aea3f7 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 9 Oct 2024 15:05:13 +0100 Subject: [PATCH 027/217] C++: Make ql-for-ql happy. --- cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll index e7cb84753853..b191ee2a5bca 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll @@ -54,7 +54,7 @@ private class Fopen extends Function, AliasFunction, SideEffectFunction, TaintFu output.isReturnValueDeref() or // The out parameter is a pointer to a `FILE*`. - this.hasGlobalOrStdName(["fopen_s"]) and + this.hasGlobalOrStdName("fopen_s") and input.isParameterDeref(1) and output.isParameterDeref(0, 2) or From 6bd46148e75dc2a4a1c2a76c2f20542662135613 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 9 Oct 2024 16:27:52 +0200 Subject: [PATCH 028/217] Python: add change note --- python/ql/lib/change-notes/2024-10-09-finditer-match.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 python/ql/lib/change-notes/2024-10-09-finditer-match.md diff --git a/python/ql/lib/change-notes/2024-10-09-finditer-match.md b/python/ql/lib/change-notes/2024-10-09-finditer-match.md new file mode 100644 index 000000000000..ee2ccc1119a4 --- /dev/null +++ b/python/ql/lib/change-notes/2024-10-09-finditer-match.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Modelled that `re.finditer` returns an iterable of `re.Match` objects. This is now understood by the API graph in many cases. \ No newline at end of file From 0abc0d1a67fbdc9ac1a614fa7db82256076007d7 Mon Sep 17 00:00:00 2001 From: Edward Minnix III Date: Wed, 9 Oct 2024 11:35:07 -0400 Subject: [PATCH 029/217] Fix: ActiveThreatModelSource --- .../semmle/go/dataflow/flowsources/local/stdin/source.ql | 2 +- .../semmle/go/dataflow/flowsources/local/stdin/test.ql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.ql b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.ql index db6bbb1a2d16..eb7ba46508e7 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.ql +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.ql @@ -6,7 +6,7 @@ module SourceTest implements TestSig { string getARelevantTag() { result = "source" } predicate hasActualResult(Location location, string element, string tag, string value) { - exists(ThreatModelFlowSource s | + exists(ActiveThreatModelSource s | s.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and element = s.toString() and diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.ql b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.ql index 7c7f587de571..5cdebdbc6c93 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.ql +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.ql @@ -5,7 +5,7 @@ import experimental.frameworks.CleverGo import TestUtilities.InlineFlowTest module Config implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } + predicate isSource(DataFlow::Node source) { source instanceof ActiveThreatModelSource } predicate isSink(DataFlow::Node sink) { sink.asExpr() = any(CallExpr c | c.getTarget().getName() = "sink").getArgument(0) From acac3a06ad32554cd19c6c10fb5f0f1f0ae84502 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 9 Oct 2024 17:32:37 +0100 Subject: [PATCH 030/217] C++: Respond to review comments. --- cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll index b191ee2a5bca..fc6ceb321c1f 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll @@ -49,7 +49,10 @@ private class Fopen extends Function, AliasFunction, SideEffectFunction, TaintFu } override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) { - this.hasGlobalOrStdName(["fopen", "freopen", "_wfopen", "_fsopen", "_wfsopen"]) and + ( + this.hasGlobalOrStdName(["fopen", "freopen"]) or + this.hasGlobalName(["_wfopen", "_fsopen", "_wfsopen"]) + ) and input.isParameterDeref(0) and output.isReturnValueDeref() or From 3711a7e3e6b3dfa7e757356f2006c3c141a1a799 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 10 Oct 2024 09:30:20 +0200 Subject: [PATCH 031/217] Fix CWE coverage link in main index Kudos to @aikenka for spotting this. Closes https://github.com/github/codeql/issues/17723 --- docs/codeql/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/index.html b/docs/codeql/index.html index de47832a997c..2f9dcd451ef7 100644 --- a/docs/codeql/index.html +++ b/docs/codeql/index.html @@ -101,7 +101,7 @@

latest version of CodeQL...
- +
CodeQL coverage of CWEs
Detailed information on the coverage of Common Weakness Enumerations (CWEs) in the latest release...
From 0c9a2896d85fa832eb292d9cab23214158fc2c03 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 10 Oct 2024 11:47:58 +0200 Subject: [PATCH 032/217] Rust: Remove unused types --- .../codeql/rust/controlflow/internal/SuccessorType.qll | 8 -------- 1 file changed, 8 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/SuccessorType.qll b/rust/ql/lib/codeql/rust/controlflow/internal/SuccessorType.qll index ba76888bd303..0b88c9f05cb4 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/SuccessorType.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/SuccessorType.qll @@ -2,14 +2,6 @@ private import rust private import codeql.util.Boolean private import Completion -newtype TLoopJumpType = - TContinueJump() or - TBreakJump() - -newtype TLabelType = - TLabel(string s) { any(Label l).getLifetime().getText() = s } or - TNoLabel() - cached newtype TSuccessorType = TSuccessorSuccessor() or From b80b6aafddc6d4fec15b109ec126505420910693 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Thu, 10 Oct 2024 13:04:28 +0200 Subject: [PATCH 033/217] Rust: extract modifier tokens as predicates --- rust/ast-generator/src/main.rs | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/rust/ast-generator/src/main.rs b/rust/ast-generator/src/main.rs index 8d4114c8bde5..f721872df939 100644 --- a/rust/ast-generator/src/main.rs +++ b/rust/ast-generator/src/main.rs @@ -3,7 +3,7 @@ use std::{fs, path::PathBuf}; pub mod codegen; mod flags; -use codegen::grammar::ast_src::{AstNodeSrc, AstSrc}; +use codegen::grammar::ast_src::{AstNodeSrc, AstSrc, Field}; use std::collections::{BTreeMap, BTreeSet}; use std::env; use ungrammar::Grammar; @@ -94,7 +94,13 @@ fn write_schema( } empty = false; - if field.tp == "string" { + if field.tp == "predicate" { + writeln!( + buf, + " {}: predicate", + property_name(&node.name, &field.name), + )?; + } else if field.tp == "string" { writeln!( buf, " {}: optional[string]", @@ -131,6 +137,21 @@ struct FieldInfo { } fn get_fields(node: &AstNodeSrc) -> Vec { let mut result = Vec::new(); + let predicates = [ + "async", "auto", "const", "default", "gen", "move", "mut", "raw", "ref", "static", "try", + "unsafe", + ]; + for field in &node.fields { + if let Field::Token(name) = field { + if predicates.contains(&name.as_str()) { + result.push(FieldInfo { + name: format!("is_{name}"), + tp: "predicate".to_string(), + is_many: false, + }); + } + } + } match node.name.as_str() { "Name" | "NameRef" | "Lifetime" => { @@ -480,7 +501,14 @@ impl Translator {{ let type_name = &field.tp; let struct_field_name = &field.name; let class_field_name = property_name(&node.name, &field.name); - if field.tp == "string" { + if field.tp == "predicate" { + writeln!( + buf, + " let {} = node.{}_token().is_some();", + class_field_name, + &struct_field_name[3..], + )?; + } else if field.tp == "string" { writeln!( buf, " let {} = node.try_get_text();", From 30034b425484493cf53f79991883251317dea317 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Thu, 10 Oct 2024 13:05:49 +0200 Subject: [PATCH 034/217] Rust: run 'bazel //rust/codegen' --- rust/extractor/src/generated/.generated.list | 2 +- rust/extractor/src/generated/top.rs | 180 ++++++++++++++ rust/extractor/src/translate/generated.rs | 90 +++++++ rust/ql/.generated.list | 84 +++---- .../elements/internal/generated/BlockExpr.qll | 30 +++ .../internal/generated/ClosureExpr.qll | 25 ++ .../elements/internal/generated/Const.qll | 10 + .../internal/generated/ConstBlockPat.qll | 5 + .../internal/generated/ConstParam.qll | 5 + .../internal/generated/ExternBlock.qll | 5 + .../elements/internal/generated/FnPtrType.qll | 15 ++ .../elements/internal/generated/Function.qll | 25 ++ .../elements/internal/generated/IdentPat.qll | 10 + .../rust/elements/internal/generated/Impl.qll | 15 ++ .../rust/elements/internal/generated/Meta.qll | 5 + .../elements/internal/generated/PtrType.qll | 10 + .../rust/elements/internal/generated/Raw.qll | 225 ++++++++++++++++++ .../elements/internal/generated/RefExpr.qll | 15 ++ .../elements/internal/generated/RefPat.qll | 5 + .../elements/internal/generated/RefType.qll | 5 + .../elements/internal/generated/SelfParam.qll | 5 + .../elements/internal/generated/Static.qll | 10 + .../elements/internal/generated/Trait.qll | 10 + .../elements/internal/generated/TypeAlias.qll | 5 + .../elements/internal/generated/TypeBound.qll | 10 + rust/ql/lib/rust.dbscheme | 225 ++++++++++++++++++ .../generated/BlockExpr/BlockExpr.ql | 14 +- .../generated/ClosureExpr/ClosureExpr.ql | 11 +- .../extractor-tests/generated/Const/Const.ql | 9 +- .../generated/ConstBlockPat/ConstBlockPat.ql | 7 +- .../generated/ConstParam/ConstParam.ql | 9 +- .../generated/ExternBlock/ExternBlock.ql | 7 +- .../generated/FnPtrType/FnPtrType.ql | 10 +- .../generated/Function/Function.ql | 15 +- .../generated/IdentPat/IdentPat.ql | 7 +- .../extractor-tests/generated/Impl/Impl.ql | 13 +- .../extractor-tests/generated/Meta/Meta.ql | 6 +- .../generated/PtrType/PtrType.ql | 6 +- .../generated/RefExpr/RefExpr.ql | 10 +- .../generated/RefPat/RefPat.ql | 5 +- .../generated/RefType/RefType.ql | 5 +- .../generated/SelfParam/SelfParam.ql | 8 +- .../generated/Static/Static.ql | 9 +- .../extractor-tests/generated/Trait/Trait.ql | 12 +- .../generated/TypeAlias/TypeAlias.ql | 9 +- .../generated/TypeBound/TypeBound.ql | 9 +- rust/schema/ast.py | 45 ++++ 47 files changed, 1159 insertions(+), 98 deletions(-) diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index 43459827a075..1e9f2055823c 100644 --- a/rust/extractor/src/generated/.generated.list +++ b/rust/extractor/src/generated/.generated.list @@ -1,2 +1,2 @@ mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 -top.rs 855f5f0639dfafd8603c9b842f6470ca6d1214bb72391890a1de64db2adebba1 855f5f0639dfafd8603c9b842f6470ca6d1214bb72391890a1de64db2adebba1 +top.rs f8cc230aca9a7696686bee1efe499c679fb4760e09187075c803016e7b83433c f8cc230aca9a7696686bee1efe499c679fb4760e09187075c803016e7b83433c diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index 5c234ae22aef..fd008b106c72 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -1202,6 +1202,7 @@ impl From> for trap::Label { pub struct Meta { pub id: trap::TrapId, pub expr: Option>, + pub is_unsafe: bool, pub path: Option>, pub token_tree: Option>, } @@ -1216,6 +1217,9 @@ impl trap::TrapEntry for Meta { if let Some(v) = self.expr { out.add_tuple("meta_exprs", vec![id.into(), v.into()]); } + if self.is_unsafe { + out.add_tuple("meta_is_unsafe", vec![id.into()]); + } if let Some(v) = self.path { out.add_tuple("meta_paths", vec![id.into(), v.into()]); } @@ -2072,6 +2076,7 @@ impl From> for trap::Label { pub struct SelfParam { pub id: trap::TrapId, pub attrs: Vec>, + pub is_mut: bool, pub lifetime: Option>, pub name: Option>, pub ty: Option>, @@ -2087,6 +2092,9 @@ impl trap::TrapEntry for SelfParam { for (i, v) in self.attrs.into_iter().enumerate() { out.add_tuple("self_param_attrs", vec![id.into(), i.into(), v.into()]); } + if self.is_mut { + out.add_tuple("self_param_is_mut", vec![id.into()]); + } if let Some(v) = self.lifetime { out.add_tuple("self_param_lifetimes", vec![id.into(), v.into()]); } @@ -2422,6 +2430,8 @@ impl From> for trap::Label { pub struct TypeBound { pub id: trap::TrapId, pub generic_param_list: Option>, + pub is_async: bool, + pub is_const: bool, pub lifetime: Option>, pub ty: Option>, } @@ -2436,6 +2446,12 @@ impl trap::TrapEntry for TypeBound { if let Some(v) = self.generic_param_list { out.add_tuple("type_bound_generic_param_lists", vec![id.into(), v.into()]); } + if self.is_async { + out.add_tuple("type_bound_is_async", vec![id.into()]); + } + if self.is_const { + out.add_tuple("type_bound_is_const", vec![id.into()]); + } if let Some(v) = self.lifetime { out.add_tuple("type_bound_lifetimes", vec![id.into(), v.into()]); } @@ -3425,6 +3441,12 @@ impl From> for trap::Label { pub struct BlockExpr { pub id: trap::TrapId, pub attrs: Vec>, + pub is_async: bool, + pub is_const: bool, + pub is_gen: bool, + pub is_move: bool, + pub is_try: bool, + pub is_unsafe: bool, pub label: Option>, pub stmt_list: Option>, } @@ -3439,6 +3461,24 @@ impl trap::TrapEntry for BlockExpr { for (i, v) in self.attrs.into_iter().enumerate() { out.add_tuple("block_expr_attrs", vec![id.into(), i.into(), v.into()]); } + if self.is_async { + out.add_tuple("block_expr_is_async", vec![id.into()]); + } + if self.is_const { + out.add_tuple("block_expr_is_const", vec![id.into()]); + } + if self.is_gen { + out.add_tuple("block_expr_is_gen", vec![id.into()]); + } + if self.is_move { + out.add_tuple("block_expr_is_move", vec![id.into()]); + } + if self.is_try { + out.add_tuple("block_expr_is_try", vec![id.into()]); + } + if self.is_unsafe { + out.add_tuple("block_expr_is_unsafe", vec![id.into()]); + } if let Some(v) = self.label { out.add_tuple("block_expr_labels", vec![id.into(), v.into()]); } @@ -3754,6 +3794,11 @@ pub struct ClosureExpr { pub attrs: Vec>, pub body: Option>, pub closure_binder: Option>, + pub is_async: bool, + pub is_const: bool, + pub is_gen: bool, + pub is_move: bool, + pub is_static: bool, pub param_list: Option>, pub ret_type: Option>, } @@ -3774,6 +3819,21 @@ impl trap::TrapEntry for ClosureExpr { if let Some(v) = self.closure_binder { out.add_tuple("closure_expr_closure_binders", vec![id.into(), v.into()]); } + if self.is_async { + out.add_tuple("closure_expr_is_async", vec![id.into()]); + } + if self.is_const { + out.add_tuple("closure_expr_is_const", vec![id.into()]); + } + if self.is_gen { + out.add_tuple("closure_expr_is_gen", vec![id.into()]); + } + if self.is_move { + out.add_tuple("closure_expr_is_move", vec![id.into()]); + } + if self.is_static { + out.add_tuple("closure_expr_is_static", vec![id.into()]); + } if let Some(v) = self.param_list { out.add_tuple("closure_expr_param_lists", vec![id.into(), v.into()]); } @@ -3943,6 +4003,7 @@ impl From> for trap::Label { pub struct ConstBlockPat { pub id: trap::TrapId, pub block_expr: Option>, + pub is_const: bool, } impl trap::TrapEntry for ConstBlockPat { @@ -3955,6 +4016,9 @@ impl trap::TrapEntry for ConstBlockPat { if let Some(v) = self.block_expr { out.add_tuple("const_block_pat_block_exprs", vec![id.into(), v.into()]); } + if self.is_const { + out.add_tuple("const_block_pat_is_const", vec![id.into()]); + } } } @@ -4003,6 +4067,7 @@ pub struct ConstParam { pub id: trap::TrapId, pub attrs: Vec>, pub default_val: Option>, + pub is_const: bool, pub name: Option>, pub ty: Option>, } @@ -4020,6 +4085,9 @@ impl trap::TrapEntry for ConstParam { if let Some(v) = self.default_val { out.add_tuple("const_param_default_vals", vec![id.into(), v.into()]); } + if self.is_const { + out.add_tuple("const_param_is_const", vec![id.into()]); + } if let Some(v) = self.name { out.add_tuple("const_param_names", vec![id.into(), v.into()]); } @@ -4321,6 +4389,9 @@ impl From> for trap::Label { pub struct FnPtrType { pub id: trap::TrapId, pub abi: Option>, + pub is_async: bool, + pub is_const: bool, + pub is_unsafe: bool, pub param_list: Option>, pub ret_type: Option>, } @@ -4335,6 +4406,15 @@ impl trap::TrapEntry for FnPtrType { if let Some(v) = self.abi { out.add_tuple("fn_ptr_type_abis", vec![id.into(), v.into()]); } + if self.is_async { + out.add_tuple("fn_ptr_type_is_async", vec![id.into()]); + } + if self.is_const { + out.add_tuple("fn_ptr_type_is_const", vec![id.into()]); + } + if self.is_unsafe { + out.add_tuple("fn_ptr_type_is_unsafe", vec![id.into()]); + } if let Some(v) = self.param_list { out.add_tuple("fn_ptr_type_param_lists", vec![id.into(), v.into()]); } @@ -4593,6 +4673,8 @@ impl From> for trap::Label { pub struct IdentPat { pub id: trap::TrapId, pub attrs: Vec>, + pub is_mut: bool, + pub is_ref: bool, pub name: Option>, pub pat: Option>, } @@ -4607,6 +4689,12 @@ impl trap::TrapEntry for IdentPat { for (i, v) in self.attrs.into_iter().enumerate() { out.add_tuple("ident_pat_attrs", vec![id.into(), i.into(), v.into()]); } + if self.is_mut { + out.add_tuple("ident_pat_is_mut", vec![id.into()]); + } + if self.is_ref { + out.add_tuple("ident_pat_is_ref", vec![id.into()]); + } if let Some(v) = self.name { out.add_tuple("ident_pat_names", vec![id.into(), v.into()]); } @@ -6342,6 +6430,8 @@ impl From> for trap::Label { #[derive(Debug)] pub struct PtrType { pub id: trap::TrapId, + pub is_const: bool, + pub is_mut: bool, pub ty: Option>, } @@ -6352,6 +6442,12 @@ impl trap::TrapEntry for PtrType { fn emit(self, id: trap::Label, out: &mut trap::Writer) { out.add_tuple("ptr_types", vec![id.into()]); + if self.is_const { + out.add_tuple("ptr_type_is_const", vec![id.into()]); + } + if self.is_mut { + out.add_tuple("ptr_type_is_mut", vec![id.into()]); + } if let Some(v) = self.ty { out.add_tuple("ptr_type_ties", vec![id.into(), v.into()]); } @@ -6726,6 +6822,9 @@ pub struct RefExpr { pub id: trap::TrapId, pub attrs: Vec>, pub expr: Option>, + pub is_const: bool, + pub is_mut: bool, + pub is_raw: bool, } impl trap::TrapEntry for RefExpr { @@ -6741,6 +6840,15 @@ impl trap::TrapEntry for RefExpr { if let Some(v) = self.expr { out.add_tuple("ref_expr_exprs", vec![id.into(), v.into()]); } + if self.is_const { + out.add_tuple("ref_expr_is_const", vec![id.into()]); + } + if self.is_mut { + out.add_tuple("ref_expr_is_mut", vec![id.into()]); + } + if self.is_raw { + out.add_tuple("ref_expr_is_raw", vec![id.into()]); + } } } @@ -6787,6 +6895,7 @@ impl From> for trap::Label { #[derive(Debug)] pub struct RefPat { pub id: trap::TrapId, + pub is_mut: bool, pub pat: Option>, } @@ -6797,6 +6906,9 @@ impl trap::TrapEntry for RefPat { fn emit(self, id: trap::Label, out: &mut trap::Writer) { out.add_tuple("ref_pats", vec![id.into()]); + if self.is_mut { + out.add_tuple("ref_pat_is_mut", vec![id.into()]); + } if let Some(v) = self.pat { out.add_tuple("ref_pat_pats", vec![id.into(), v.into()]); } @@ -6846,6 +6958,7 @@ impl From> for trap::Label { #[derive(Debug)] pub struct RefType { pub id: trap::TrapId, + pub is_mut: bool, pub lifetime: Option>, pub ty: Option>, } @@ -6857,6 +6970,9 @@ impl trap::TrapEntry for RefType { fn emit(self, id: trap::Label, out: &mut trap::Writer) { out.add_tuple("ref_types", vec![id.into()]); + if self.is_mut { + out.add_tuple("ref_type_is_mut", vec![id.into()]); + } if let Some(v) = self.lifetime { out.add_tuple("ref_type_lifetimes", vec![id.into(), v.into()]); } @@ -7958,6 +8074,8 @@ pub struct Const { pub id: trap::TrapId, pub attrs: Vec>, pub body: Option>, + pub is_const: bool, + pub is_default: bool, pub name: Option>, pub ty: Option>, pub visibility: Option>, @@ -7976,6 +8094,12 @@ impl trap::TrapEntry for Const { if let Some(v) = self.body { out.add_tuple("const_bodies", vec![id.into(), v.into()]); } + if self.is_const { + out.add_tuple("const_is_const", vec![id.into()]); + } + if self.is_default { + out.add_tuple("const_is_default", vec![id.into()]); + } if let Some(v) = self.name { out.add_tuple("const_names", vec![id.into(), v.into()]); } @@ -8140,6 +8264,7 @@ pub struct ExternBlock { pub abi: Option>, pub attrs: Vec>, pub extern_item_list: Option>, + pub is_unsafe: bool, } impl trap::TrapEntry for ExternBlock { @@ -8158,6 +8283,9 @@ impl trap::TrapEntry for ExternBlock { if let Some(v) = self.extern_item_list { out.add_tuple("extern_block_extern_item_lists", vec![id.into(), v.into()]); } + if self.is_unsafe { + out.add_tuple("extern_block_is_unsafe", vec![id.into()]); + } } } @@ -8297,6 +8425,11 @@ pub struct Function { pub attrs: Vec>, pub body: Option>, pub generic_param_list: Option>, + pub is_async: bool, + pub is_const: bool, + pub is_default: bool, + pub is_gen: bool, + pub is_unsafe: bool, pub name: Option>, pub param_list: Option>, pub ret_type: Option>, @@ -8323,6 +8456,21 @@ impl trap::TrapEntry for Function { if let Some(v) = self.generic_param_list { out.add_tuple("function_generic_param_lists", vec![id.into(), v.into()]); } + if self.is_async { + out.add_tuple("function_is_async", vec![id.into()]); + } + if self.is_const { + out.add_tuple("function_is_const", vec![id.into()]); + } + if self.is_default { + out.add_tuple("function_is_default", vec![id.into()]); + } + if self.is_gen { + out.add_tuple("function_is_gen", vec![id.into()]); + } + if self.is_unsafe { + out.add_tuple("function_is_unsafe", vec![id.into()]); + } if let Some(v) = self.name { out.add_tuple("function_names", vec![id.into(), v.into()]); } @@ -8414,6 +8562,9 @@ pub struct Impl { pub assoc_item_list: Option>, pub attrs: Vec>, pub generic_param_list: Option>, + pub is_const: bool, + pub is_default: bool, + pub is_unsafe: bool, pub self_ty: Option>, pub trait_: Option>, pub visibility: Option>, @@ -8436,6 +8587,15 @@ impl trap::TrapEntry for Impl { if let Some(v) = self.generic_param_list { out.add_tuple("impl_generic_param_lists", vec![id.into(), v.into()]); } + if self.is_const { + out.add_tuple("impl_is_const", vec![id.into()]); + } + if self.is_default { + out.add_tuple("impl_is_default", vec![id.into()]); + } + if self.is_unsafe { + out.add_tuple("impl_is_unsafe", vec![id.into()]); + } if let Some(v) = self.self_ty { out.add_tuple("impl_self_ties", vec![id.into(), v.into()]); } @@ -8843,6 +9003,8 @@ pub struct Static { pub id: trap::TrapId, pub attrs: Vec>, pub body: Option>, + pub is_mut: bool, + pub is_static: bool, pub name: Option>, pub ty: Option>, pub visibility: Option>, @@ -8861,6 +9023,12 @@ impl trap::TrapEntry for Static { if let Some(v) = self.body { out.add_tuple("static_bodies", vec![id.into(), v.into()]); } + if self.is_mut { + out.add_tuple("static_is_mut", vec![id.into()]); + } + if self.is_static { + out.add_tuple("static_is_static", vec![id.into()]); + } if let Some(v) = self.name { out.add_tuple("static_names", vec![id.into(), v.into()]); } @@ -9025,6 +9193,8 @@ pub struct Trait { pub assoc_item_list: Option>, pub attrs: Vec>, pub generic_param_list: Option>, + pub is_auto: bool, + pub is_unsafe: bool, pub name: Option>, pub type_bound_list: Option>, pub visibility: Option>, @@ -9047,6 +9217,12 @@ impl trap::TrapEntry for Trait { if let Some(v) = self.generic_param_list { out.add_tuple("trait_generic_param_lists", vec![id.into(), v.into()]); } + if self.is_auto { + out.add_tuple("trait_is_auto", vec![id.into()]); + } + if self.is_unsafe { + out.add_tuple("trait_is_unsafe", vec![id.into()]); + } if let Some(v) = self.name { out.add_tuple("trait_names", vec![id.into(), v.into()]); } @@ -9204,6 +9380,7 @@ pub struct TypeAlias { pub id: trap::TrapId, pub attrs: Vec>, pub generic_param_list: Option>, + pub is_default: bool, pub name: Option>, pub ty: Option>, pub type_bound_list: Option>, @@ -9224,6 +9401,9 @@ impl trap::TrapEntry for TypeAlias { if let Some(v) = self.generic_param_list { out.add_tuple("type_alias_generic_param_lists", vec![id.into(), v.into()]); } + if self.is_default { + out.add_tuple("type_alias_is_default", vec![id.into()]); + } if let Some(v) = self.name { out.add_tuple("type_alias_names", vec![id.into(), v.into()]); } diff --git a/rust/extractor/src/translate/generated.rs b/rust/extractor/src/translate/generated.rs index 57d3cbc186b9..55b2dc3e7897 100644 --- a/rust/extractor/src/translate/generated.rs +++ b/rust/extractor/src/translate/generated.rs @@ -327,11 +327,23 @@ impl Translator { pub(crate) fn emit_block_expr(&mut self, node: ast::BlockExpr) -> Label { let attrs = node.attrs().map(|x| self.emit_attr(x)).collect(); + let is_async = node.async_token().is_some(); + let is_const = node.const_token().is_some(); + let is_gen = node.gen_token().is_some(); + let is_move = node.move_token().is_some(); + let is_try = node.try_token().is_some(); + let is_unsafe = node.unsafe_token().is_some(); let label = node.label().map(|x| self.emit_label(x)); let stmt_list = node.stmt_list().map(|x| self.emit_stmt_list(x)); let label = self.trap.emit(generated::BlockExpr { id: TrapId::Star, attrs, + is_async, + is_const, + is_gen, + is_move, + is_try, + is_unsafe, label, stmt_list, }); @@ -411,6 +423,11 @@ impl Translator { let attrs = node.attrs().map(|x| self.emit_attr(x)).collect(); let body = node.body().map(|x| self.emit_expr(x)); let closure_binder = node.closure_binder().map(|x| self.emit_closure_binder(x)); + let is_async = node.async_token().is_some(); + let is_const = node.const_token().is_some(); + let is_gen = node.gen_token().is_some(); + let is_move = node.move_token().is_some(); + let is_static = node.static_token().is_some(); let param_list = node.param_list().map(|x| self.emit_param_list(x)); let ret_type = node.ret_type().map(|x| self.emit_ret_type(x)); let label = self.trap.emit(generated::ClosureExpr { @@ -418,6 +435,11 @@ impl Translator { attrs, body, closure_binder, + is_async, + is_const, + is_gen, + is_move, + is_static, param_list, ret_type, }); @@ -429,6 +451,8 @@ impl Translator { pub(crate) fn emit_const(&mut self, node: ast::Const) -> Label { let attrs = node.attrs().map(|x| self.emit_attr(x)).collect(); let body = node.body().map(|x| self.emit_expr(x)); + let is_const = node.const_token().is_some(); + let is_default = node.default_token().is_some(); let name = node.name().map(|x| self.emit_name(x)); let ty = node.ty().map(|x| self.emit_type(x)); let visibility = node.visibility().map(|x| self.emit_visibility(x)); @@ -436,6 +460,8 @@ impl Translator { id: TrapId::Star, attrs, body, + is_const, + is_default, name, ty, visibility, @@ -458,9 +484,11 @@ impl Translator { pub(crate) fn emit_const_block_pat(&mut self, node: ast::ConstBlockPat) -> Label { let block_expr = node.block_expr().map(|x| self.emit_block_expr(x)); + let is_const = node.const_token().is_some(); let label = self.trap.emit(generated::ConstBlockPat { id: TrapId::Star, block_expr, + is_const, }); self.emit_location(label, &node); self.emit_tokens(label.into(), node.syntax().children_with_tokens()); @@ -470,12 +498,14 @@ impl Translator { pub(crate) fn emit_const_param(&mut self, node: ast::ConstParam) -> Label { let attrs = node.attrs().map(|x| self.emit_attr(x)).collect(); let default_val = node.default_val().map(|x| self.emit_const_arg(x)); + let is_const = node.const_token().is_some(); let name = node.name().map(|x| self.emit_name(x)); let ty = node.ty().map(|x| self.emit_type(x)); let label = self.trap.emit(generated::ConstParam { id: TrapId::Star, attrs, default_val, + is_const, name, ty, }); @@ -544,11 +574,13 @@ impl Translator { let abi = node.abi().map(|x| self.emit_abi(x)); let attrs = node.attrs().map(|x| self.emit_attr(x)).collect(); let extern_item_list = node.extern_item_list().map(|x| self.emit_extern_item_list(x)); + let is_unsafe = node.unsafe_token().is_some(); let label = self.trap.emit(generated::ExternBlock { id: TrapId::Star, abi, attrs, extern_item_list, + is_unsafe, }); self.emit_location(label, &node); self.emit_tokens(label.into(), node.syntax().children_with_tokens()); @@ -605,6 +637,11 @@ impl Translator { let attrs = node.attrs().map(|x| self.emit_attr(x)).collect(); let body = node.body().map(|x| self.emit_block_expr(x)); let generic_param_list = node.generic_param_list().map(|x| self.emit_generic_param_list(x)); + let is_async = node.async_token().is_some(); + let is_const = node.const_token().is_some(); + let is_default = node.default_token().is_some(); + let is_gen = node.gen_token().is_some(); + let is_unsafe = node.unsafe_token().is_some(); let name = node.name().map(|x| self.emit_name(x)); let param_list = node.param_list().map(|x| self.emit_param_list(x)); let ret_type = node.ret_type().map(|x| self.emit_ret_type(x)); @@ -616,6 +653,11 @@ impl Translator { attrs, body, generic_param_list, + is_async, + is_const, + is_default, + is_gen, + is_unsafe, name, param_list, ret_type, @@ -629,11 +671,17 @@ impl Translator { pub(crate) fn emit_fn_ptr_type(&mut self, node: ast::FnPtrType) -> Label { let abi = node.abi().map(|x| self.emit_abi(x)); + let is_async = node.async_token().is_some(); + let is_const = node.const_token().is_some(); + let is_unsafe = node.unsafe_token().is_some(); let param_list = node.param_list().map(|x| self.emit_param_list(x)); let ret_type = node.ret_type().map(|x| self.emit_ret_type(x)); let label = self.trap.emit(generated::FnPtrType { id: TrapId::Star, abi, + is_async, + is_const, + is_unsafe, param_list, ret_type, }); @@ -726,11 +774,15 @@ impl Translator { pub(crate) fn emit_ident_pat(&mut self, node: ast::IdentPat) -> Label { let attrs = node.attrs().map(|x| self.emit_attr(x)).collect(); + let is_mut = node.mut_token().is_some(); + let is_ref = node.ref_token().is_some(); let name = node.name().map(|x| self.emit_name(x)); let pat = node.pat().map(|x| self.emit_pat(x)); let label = self.trap.emit(generated::IdentPat { id: TrapId::Star, attrs, + is_mut, + is_ref, name, pat, }); @@ -760,6 +812,9 @@ impl Translator { let assoc_item_list = node.assoc_item_list().map(|x| self.emit_assoc_item_list(x)); let attrs = node.attrs().map(|x| self.emit_attr(x)).collect(); let generic_param_list = node.generic_param_list().map(|x| self.emit_generic_param_list(x)); + let is_const = node.const_token().is_some(); + let is_default = node.default_token().is_some(); + let is_unsafe = node.unsafe_token().is_some(); let self_ty = node.self_ty().map(|x| self.emit_type(x)); let trait_ = node.trait_().map(|x| self.emit_type(x)); let visibility = node.visibility().map(|x| self.emit_visibility(x)); @@ -769,6 +824,9 @@ impl Translator { assoc_item_list, attrs, generic_param_list, + is_const, + is_default, + is_unsafe, self_ty, trait_, visibility, @@ -1101,11 +1159,13 @@ impl Translator { pub(crate) fn emit_meta(&mut self, node: ast::Meta) -> Label { let expr = node.expr().map(|x| self.emit_expr(x)); + let is_unsafe = node.unsafe_token().is_some(); let path = node.path().map(|x| self.emit_path(x)); let token_tree = node.token_tree().map(|x| self.emit_token_tree(x)); let label = self.trap.emit(generated::Meta { id: TrapId::Star, expr, + is_unsafe, path, token_tree, }); @@ -1357,9 +1417,13 @@ impl Translator { } pub(crate) fn emit_ptr_type(&mut self, node: ast::PtrType) -> Label { + let is_const = node.const_token().is_some(); + let is_mut = node.mut_token().is_some(); let ty = node.ty().map(|x| self.emit_type(x)); let label = self.trap.emit(generated::PtrType { id: TrapId::Star, + is_const, + is_mut, ty, }); self.emit_location(label, &node); @@ -1514,10 +1578,16 @@ impl Translator { pub(crate) fn emit_ref_expr(&mut self, node: ast::RefExpr) -> Label { let attrs = node.attrs().map(|x| self.emit_attr(x)).collect(); let expr = node.expr().map(|x| self.emit_expr(x)); + let is_const = node.const_token().is_some(); + let is_mut = node.mut_token().is_some(); + let is_raw = node.raw_token().is_some(); let label = self.trap.emit(generated::RefExpr { id: TrapId::Star, attrs, expr, + is_const, + is_mut, + is_raw, }); self.emit_location(label, &node); self.emit_tokens(label.into(), node.syntax().children_with_tokens()); @@ -1525,9 +1595,11 @@ impl Translator { } pub(crate) fn emit_ref_pat(&mut self, node: ast::RefPat) -> Label { + let is_mut = node.mut_token().is_some(); let pat = node.pat().map(|x| self.emit_pat(x)); let label = self.trap.emit(generated::RefPat { id: TrapId::Star, + is_mut, pat, }); self.emit_location(label, &node); @@ -1536,10 +1608,12 @@ impl Translator { } pub(crate) fn emit_ref_type(&mut self, node: ast::RefType) -> Label { + let is_mut = node.mut_token().is_some(); let lifetime = node.lifetime().map(|x| self.emit_lifetime(x)); let ty = node.ty().map(|x| self.emit_type(x)); let label = self.trap.emit(generated::RefType { id: TrapId::Star, + is_mut, lifetime, ty, }); @@ -1605,12 +1679,14 @@ impl Translator { pub(crate) fn emit_self_param(&mut self, node: ast::SelfParam) -> Label { let attrs = node.attrs().map(|x| self.emit_attr(x)).collect(); + let is_mut = node.mut_token().is_some(); let lifetime = node.lifetime().map(|x| self.emit_lifetime(x)); let name = node.name().map(|x| self.emit_name(x)); let ty = node.ty().map(|x| self.emit_type(x)); let label = self.trap.emit(generated::SelfParam { id: TrapId::Star, attrs, + is_mut, lifetime, name, ty, @@ -1658,6 +1734,8 @@ impl Translator { pub(crate) fn emit_static(&mut self, node: ast::Static) -> Label { let attrs = node.attrs().map(|x| self.emit_attr(x)).collect(); let body = node.body().map(|x| self.emit_expr(x)); + let is_mut = node.mut_token().is_some(); + let is_static = node.static_token().is_some(); let name = node.name().map(|x| self.emit_name(x)); let ty = node.ty().map(|x| self.emit_type(x)); let visibility = node.visibility().map(|x| self.emit_visibility(x)); @@ -1665,6 +1743,8 @@ impl Translator { id: TrapId::Star, attrs, body, + is_mut, + is_static, name, ty, visibility, @@ -1723,6 +1803,8 @@ impl Translator { let assoc_item_list = node.assoc_item_list().map(|x| self.emit_assoc_item_list(x)); let attrs = node.attrs().map(|x| self.emit_attr(x)).collect(); let generic_param_list = node.generic_param_list().map(|x| self.emit_generic_param_list(x)); + let is_auto = node.auto_token().is_some(); + let is_unsafe = node.unsafe_token().is_some(); let name = node.name().map(|x| self.emit_name(x)); let type_bound_list = node.type_bound_list().map(|x| self.emit_type_bound_list(x)); let visibility = node.visibility().map(|x| self.emit_visibility(x)); @@ -1732,6 +1814,8 @@ impl Translator { assoc_item_list, attrs, generic_param_list, + is_auto, + is_unsafe, name, type_bound_list, visibility, @@ -1853,6 +1937,7 @@ impl Translator { pub(crate) fn emit_type_alias(&mut self, node: ast::TypeAlias) -> Label { let attrs = node.attrs().map(|x| self.emit_attr(x)).collect(); let generic_param_list = node.generic_param_list().map(|x| self.emit_generic_param_list(x)); + let is_default = node.default_token().is_some(); let name = node.name().map(|x| self.emit_name(x)); let ty = node.ty().map(|x| self.emit_type(x)); let type_bound_list = node.type_bound_list().map(|x| self.emit_type_bound_list(x)); @@ -1862,6 +1947,7 @@ impl Translator { id: TrapId::Star, attrs, generic_param_list, + is_default, name, ty, type_bound_list, @@ -1886,11 +1972,15 @@ impl Translator { pub(crate) fn emit_type_bound(&mut self, node: ast::TypeBound) -> Label { let generic_param_list = node.generic_param_list().map(|x| self.emit_generic_param_list(x)); + let is_async = node.async_token().is_some(); + let is_const = node.const_token().is_some(); let lifetime = node.lifetime().map(|x| self.emit_lifetime(x)); let ty = node.ty().map(|x| self.emit_type(x)); let label = self.trap.emit(generated::TypeBound { id: TrapId::Star, generic_param_list, + is_async, + is_const, lifetime, ty, }); diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index e37f6947148d..9e49fc3893e4 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -456,43 +456,43 @@ lib/codeql/rust/elements/internal/generated/Attr.qll 2e7983b2c462750065ed58cc10c lib/codeql/rust/elements/internal/generated/AwaitExpr.qll 1d71af702a1f397fb231fae3e0642b3deeba0cd5a43c1d8fabdff29cac979340 e0bfa007bdecc5a09a266d449d723ae35f5a24fbdfc11e4e48aeea3ec0c5147c lib/codeql/rust/elements/internal/generated/BecomeExpr.qll 7a211b785a4a2f961242d1d73fd031d381aad809f7b600ce7f7f864518bb7242 17a0388680007871748cfdc6621f700a7c2817b9601e1bd817fb48561e7c63ad lib/codeql/rust/elements/internal/generated/BinaryExpr.qll 64e9bd9c571edd6e5f3e7662b956b1d87fa0354ce6fe95da9caf25ac16b66c68 3fca09fdbe879db2ca3293618896a462e96376a2963d15cce3d5b1baac552fcb -lib/codeql/rust/elements/internal/generated/BlockExpr.qll 6fc90a80e60f017bf3418e45bcc35b5ddac59b51037c21aed3955d47c147ce4a 1f3f8e5107b0c6de381b7c94aab93dc5fd758a845c6ff9554888df453f1315d0 +lib/codeql/rust/elements/internal/generated/BlockExpr.qll ccfbdc7bd268735a0424ff08dcf37d0e1fed61d5fe0520593c23f2490d400438 0facad59f6aba13ee0c069b691c99f52c04b723a2bfad4da226190c3c42dcabf lib/codeql/rust/elements/internal/generated/BoxPat.qll ec946a3e671ab7417e04b0207967adad004df512c570c4f0780ca5816d12d75f b0e64860855c4e85914042b1a51034899ff7cd1b2c6857188de89310a2726ea3 lib/codeql/rust/elements/internal/generated/BreakExpr.qll 0f428a8b2f4209b134c2ffc3e1c93c30bc6b0e9c9172f140cefa88c1f77d8690 957b39f38ff6befe9061f55bc0b403c2f1c366dd0cf63b874bae6f8216576d76 lib/codeql/rust/elements/internal/generated/CallExpr.qll c2700dbd9c33dcc14de10dc72ff49abafdf0952257864d4435cf8ac46849a2ee 7932f725f97ffbe1b050c2622a61a0d56f18c9264a3293466cba9915313495b5 lib/codeql/rust/elements/internal/generated/CastExpr.qll d6fbf02e9e202254666082a9116634d0eb933177866ac4c0a57b5e9c4bb4b383 477f67773492e3b82695461d56327c9db05a7d1a67e8d192406265f2ce369670 lib/codeql/rust/elements/internal/generated/ClosureBinder.qll 94c0dcdd4cd87d115659d496c88a98354bc7d4ddc0fa27028003bf7688b99987 d59d713b426dbbdb775df9092d176eea031dac1f14e468810f2fc8591399cd19 -lib/codeql/rust/elements/internal/generated/ClosureExpr.qll f9047451cb8b53f8b77e1c01f7ef485d5b5a92999e0591c6702062050052fa2f 2252be8b3022c587a8c6ad93b64d856263be7bfe2938c1d063e7cad845dd38e2 +lib/codeql/rust/elements/internal/generated/ClosureExpr.qll a10596deeb7b9799f0c0d9e9dfe43f5ff58ba03a9a444d581a240a99ca06a949 e94c2f6cd0190d108d0b91340227d45fb6b8c8c2c6a0476358fe75ea7f7a7760 lib/codeql/rust/elements/internal/generated/Comment.qll cd1ef861e3803618f9f78a4ac00516d50ecfecdca1c1d14304dc5327cbe07a3b 8b67345aeb15beb5895212228761ea3496297846c93fd2127b417406ae87c201 -lib/codeql/rust/elements/internal/generated/Const.qll 0dbea9732880a4583166714d077276ec2b5665fa9772ea4284ee7b3f3d567923 38efc474b76f0b13695e9d9b39d016200c251fd9db48d4a1ab27dcb38946ca72 +lib/codeql/rust/elements/internal/generated/Const.qll 40464df9d8baacbc85bd137c7d1661684c957c407b2363ea60d90946be93de4c a3316beae55f570a5ca4b1172ef8267d7acb1104cc7a5e9efc58d9fc8224500f lib/codeql/rust/elements/internal/generated/ConstArg.qll e2451cac6ee464f5b64883d60d534996fcff061a520517ac792116238a11e185 1dd6d4b073b0970448a52bbe2468cd160dfe108971dbf9ae9305900bd22ef146 -lib/codeql/rust/elements/internal/generated/ConstBlockPat.qll e90cf24d7f995595111f2b48bd3775d064bc968c24074c122141aa0f058dcb83 a44f6e14da8cc760a0aae947c20ec47fff488da1e9a8dfab58b7dbc42c296fec -lib/codeql/rust/elements/internal/generated/ConstParam.qll cc34626ea28b8bf4dbf2c2dd312b778e43a9725722039a8ba393ddd7267a951a e3c2983a794b4d623191db97616c3167b80aa847317685960919e03aac0d044b +lib/codeql/rust/elements/internal/generated/ConstBlockPat.qll a425a7fd216d35f17a7ff239d431b349721f71f2e52722325755f43df2bb9886 a9aa37ee4f8c9d44ae49c807ac48d5a8a22f7d7d0ae2968ab50371a418ccc48a +lib/codeql/rust/elements/internal/generated/ConstParam.qll 26f838dbbd7659cdbf464c2107304b66ad0fbd43370d6b649373c3b9fa4f6576 c658951ba92b919278fa445cd66c3b694f42d76bde49daa50a3128e5d44f647a lib/codeql/rust/elements/internal/generated/ContinueExpr.qll e2010feb14fb6edeb83a991d9357e50edb770172ddfde2e8670b0d3e68169f28 48d09d661e1443002f6d22b8710e22c9c36d9daa9cde09c6366a61e960d717cb lib/codeql/rust/elements/internal/generated/DynTraitType.qll da9dce6347ce385d7468986cf6960b4a6787f017ff5632612a7216ed62bdc9c9 9d0b37221674b597a21bfacbdfc7e08b54381a6adacfe544df154481cd562ed8 lib/codeql/rust/elements/internal/generated/Element.qll fb483b636180c699181c8aff83bc471b2c416206694f7028c671015918547663 542d1b9ae80c997974c94db3655887186df3921a8fa3f565eaf292dcfdac3c4c lib/codeql/rust/elements/internal/generated/Enum.qll 4f4cbc9cd758c20d476bc767b916c62ba434d1750067d0ffb63e0821bb95ec86 3da735d54022add50cec0217bbf8ec4cf29b47f4851ee327628bcdd6454989d0 lib/codeql/rust/elements/internal/generated/Expr.qll 5fa34f2ed21829a1509417440dae42d416234ff43433002974328e7aabb8f30f 46f3972c7413b7db28a3ea8acb5a50a74b6dd9b658e8725f6953a8829ac912f8 lib/codeql/rust/elements/internal/generated/ExprStmt.qll d1112230015fbeb216b43407a268dc2ccd0f9e0836ab2dca4800c51b38fa1d7d 4a80562dcc55efa5e72c6c3b1d6747ab44fe494e76faff2b8f6e9f10a4b08b5b -lib/codeql/rust/elements/internal/generated/ExternBlock.qll a8ba7dec266603ef1e3908f923a497bd1e206ec729cfd4ad397ef4502fddc745 cc20b5a47466dab52a8d57c1b3c99b09c01420967670c2e75d3f90302ced2dbb +lib/codeql/rust/elements/internal/generated/ExternBlock.qll c292d804a1f8d2cf6a443be701640c4e87410662921e026d3553bc624fd18abd ba6fae821d2502a97dec636e2d70476ad0693bc6185ae50e8391699529bd0ee0 lib/codeql/rust/elements/internal/generated/ExternCrate.qll 35fea4e810a896c1656adb4682c4c3bc20283768073e26ae064189ce310433c8 fc504dff79ba758d89b10cd5049539fbc766ee9862ff495066cea26abf0b5e0b lib/codeql/rust/elements/internal/generated/ExternItem.qll 749b064ad60f32197d5b85e25929afe18e56e12f567b73e21e43e2fdf4c447e3 e2c2d423876675cf2dae399ca442aef7b2860319da9bfadeff29f2c6946f8de7 lib/codeql/rust/elements/internal/generated/ExternItemList.qll 6bc97fdae6c411cab5c501129c1d6c2321c1011cccb119515d75d07dc55c253b 6b5aa808025c0a4270cac540c07ba6faede1b3c70b8db5fd89ec5d46df9041b2 lib/codeql/rust/elements/internal/generated/FieldExpr.qll 3e506b5cb93793ec30f56bb637a600db869fcba6181b068516a671d55c362739 7bbf953696d763ad6b210f378f487ba85b875fa115b22c0c0508599a63633502 lib/codeql/rust/elements/internal/generated/FieldList.qll 43c13c6e3c9ba75a7a4cb870fc4f18752001584d48b9df0734055a6ebb789331 7c51b0b13eb02f1286d3365e53a976ba2655c4dbd8e735bc11c8b205c829e1ee -lib/codeql/rust/elements/internal/generated/FnPtrType.qll e8e2f159983fb0d9ccc30d62d0e8b679a06c066076eb8f4ca36f3bf12be406fe bc8f2efdf4645a63b9eafbec2f8e5d1008e1decb67f29bdf1eed4c3e2a89c64a +lib/codeql/rust/elements/internal/generated/FnPtrType.qll 748d766dbefd19a7d644734c57885eeede66897029bbfe1b87919517f43bfde2 5a7d80acc00e56594ed85026a8ea4923104d2e98c2e42db8c5bcd32ddd164e48 lib/codeql/rust/elements/internal/generated/ForExpr.qll 541b62b48911d4999f9ed64ab6c8b9910073ac4add0225761f319677328cf120 976c3a91c9eedfb1e2d9ea76ac501348643b3d23c723d7a777042258d416d091 lib/codeql/rust/elements/internal/generated/ForType.qll 3d43d044a1189281f09c55caafb6c8020a836f49e2866077086101925a573cf2 646b59bfd1b428aaf7211f574c49f79cb4c6a79ca151aa0663b2b31480298721 lib/codeql/rust/elements/internal/generated/FormatArgsArg.qll e07a1ae310f590003f1b88fada7dcf4847c99adb9d4c838d1c88e66e1da85c5f 0ef7342451fe2cb06e765fb4b33bb8c4a9b927f5edbc8feb5c6ba3655697f447 lib/codeql/rust/elements/internal/generated/FormatArgsExpr.qll 40d6daa7d2bafb33798a21d79774dc802cfbd7a31618ac3bd0149399ea2bf893 d1172e2151791228559004792e125fc4625f6a26ffad25f29efb0ad263bf8795 -lib/codeql/rust/elements/internal/generated/Function.qll b239af1a8874802b8a311706c53d56e3ceaad7ed23a7f97d1694bf961b63768b 4bc3c23685fa05820222e472ab1cdb40a271f862727d3bd878d47de9c2e3f485 +lib/codeql/rust/elements/internal/generated/Function.qll c8826307fcb18daf8c59552a5c629a0e59e83e7f676b4a30408a042ecc216a46 ae27a8a709c187ffd6fa7e25e7850555d1be6633d6ee304457a4481135402dcb lib/codeql/rust/elements/internal/generated/GenericArg.qll 464da0ba1c5ddcd1be68617167f177773d99b5ac4775ec8ea24d503e789a9099 6faa1033d59baf7c210ac4837a55781cfc054b7acbad8027faf4630dbfa6e101 lib/codeql/rust/elements/internal/generated/GenericArgList.qll b8cd936bba6f28344e28c98acf38acb8ef43af6ecf8367d79ed487e5b9da17cb 8b14331261e49d004807285b02fca190aafd62bfb9378b05c7d9c1e95525fe7b lib/codeql/rust/elements/internal/generated/GenericParam.qll a0285123f974f287154b706bf6688b86edf72a4adcec57346c654d962435651b b42c3915e9564b5b5c5282229bf882aa3309de26a77721b2255d6f4235c0cc38 lib/codeql/rust/elements/internal/generated/GenericParamList.qll f2d8945bc70cda6929bb6b652f9e3c7707e73fb5e778b21e99dbac594e71285f 7b97da5b6a6504377456bedebddc293d714f90e8fc2ce64199656666d5f749af -lib/codeql/rust/elements/internal/generated/IdentPat.qll 557b2b1fe9e719ac6658c06c162f03d5925d848d7fdc4364da850e588a3ca9df 5517fde679c47c0604a0d177c53bed64f83e33e14d1b64f45e3467e3a8be77fb +lib/codeql/rust/elements/internal/generated/IdentPat.qll a1269182132b2f52c5d842e58cbfa1cee49b143fa3766ed9fcf65389bf5137eb 46009fa66065222d865fa4714dd16c0373ffb16d576da45e7bf3a06432bd3a23 lib/codeql/rust/elements/internal/generated/IfExpr.qll 413dd7a20c6b98c0d2ad2e5b50981c14bf96c1a719ace3e341d78926219a5af7 c9a2d44e3baa6a265a29a683ca3c1683352457987c92f599c5771b4f3b4bafff -lib/codeql/rust/elements/internal/generated/Impl.qll 31fdd707dd8dcec845758b19eddcd4eb5bbd44ddccac83191cebe0c402834a66 ef06985099dee900a9403898f45349619ed138d23fee185137ed0baf679fe7cc +lib/codeql/rust/elements/internal/generated/Impl.qll e33ef5d3e49e64beca0ca9d5c0ba972d99007e5011eeedc11e67d3fbb569ab4a 5c5d88110864f4fd3d966b1ad973eaabd7a9c5a07adc18bff01dc09395214825 lib/codeql/rust/elements/internal/generated/ImplTraitType.qll 3c29684f5ef386b883b79dc9758441d97f090e065be177ffc8240aaf0f3d1e7b 03ea42c2a95cf917ec73d88b7b4ca5e53e10d7b046074f59100c0ec6c2c1ed6d lib/codeql/rust/elements/internal/generated/IndexExpr.qll cf951fc40f6690e966b4dc78fa9a6221aa5c6cade44759dcb52254f799292d11 1572e71918cc4e0b7e028331b6d98c9db23100a3646cd3874d1915e06ab6211d lib/codeql/rust/elements/internal/generated/InferType.qll 23ee25135c59ea5578cdf7c34a41f606e217e7260c3c8f404d12836585d5cad4 400da322fa1be62c4e300ebdf481eb92d4226eb6c316c668da8cc5168065774f @@ -519,7 +519,7 @@ lib/codeql/rust/elements/internal/generated/MatchArm.qll 8fb740a0f2e308782d9cf39 lib/codeql/rust/elements/internal/generated/MatchArmList.qll 13362680c037fe83fef4653562cc10a4429078316b5ec7c47b076336cf4aca2e 41c674293c13eceaca62134ae0c6778541f6a5201cbc5c146f0ba01b898dc267 lib/codeql/rust/elements/internal/generated/MatchExpr.qll 689d65f690fe05bc262d0a5bfe69bb4f8a142db387c5765fcc4958a9b49989f8 2979cd2017d0538870d17b2b7592c75cc05b706bd36c9de3e5dc38fa3a957e5b lib/codeql/rust/elements/internal/generated/MatchGuard.qll 521a507883963106780f1782084c581fbcf1179863c7c15438c4db79e30e78dd 6226feffaaa8d828a42ece0c693e616cd375672eb987c3b7ff1ca15fa23c116a -lib/codeql/rust/elements/internal/generated/Meta.qll f1ce7cdaf2a6fa3b86f0465e33a9521d254c032468427b276d93276ffd5142be 046d72c868ee2664b8a291de16320238ece9d0612c93c96a0d601e0b6079bf90 +lib/codeql/rust/elements/internal/generated/Meta.qll 38fca2c9958b4179de311546fe0850319010aca9cd17c97d57e12b521c5d0947 740f99c9d41044ceebfcc9d29baaa22f59c11a40f45502a34aa587d423c018f8 lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll c2d6faf1f840628dbc5aa59c90dbd8b244f6bd4a7dba25e410047fcde11ff378 2d0251b095bf15b0275d493efdd1f9ce0926a3cff6671bb550a7a672aaf62a30 lib/codeql/rust/elements/internal/generated/Missing.qll 16735d91df04a4e1ae52fae25db5f59a044e540755734bbab46b5fbb0fe6b0bd 28ca4e49fb7e6b4734be2f2f69e7c224c570344cc160ef80c5a5cd413e750dad lib/codeql/rust/elements/internal/generated/Module.qll ebae5d8963c9fd569c0fbad1d7770abd3fd2479437f236cbce0505ba9f9af52c fa3c382115fed18a26f1a755d8749a201b9489f82c09448a88fb8e9e1435fe5f @@ -533,7 +533,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll c808c9d84dd7800573832b lib/codeql/rust/elements/internal/generated/ParenExpr.qll bc0731505bfe88516205ec360582a4222d2681d11342c93e15258590ddee82f2 d4bd6e0c80cf1d63746c88d4bcb3a01d4c75732e5da09e3ebd9437ced227fb60 lib/codeql/rust/elements/internal/generated/ParenPat.qll ce24b8f8ecbf0f204af200317405724063887257460c80cf250c39b2fdf37185 e7c87d37e1a0ca7ea03840017e1aa9ddb7f927f1f3b6396c0305b46aeee33db6 lib/codeql/rust/elements/internal/generated/ParenType.qll 9cc954d73f8330dcac7b475f97748b63af5c8766dee9d2f2872c0a7e4c903537 c07534c8a9c683c4a9b11d490095647e420de0a0bfc23273eaf6f31b00244273 -lib/codeql/rust/elements/internal/generated/ParentChild.qll ad728d69b3ef9555d71db2274b04a5ba99b4f815120c55032c57d077e0c954ca 64c6406626a14ed3052d3996cc47fc91e435175bd982440d948416cf878400fd +lib/codeql/rust/elements/internal/generated/ParentChild.qll 665db548af6857d2cd5c859237b9ec08fc611bccafa1fd6dad703e247b43bf7f 64c6406626a14ed3052d3996cc47fc91e435175bd982440d948416cf878400fd lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll 299abce24762a5ab023f3cf1ab9718b83047e171aed42a8092e7a155914b1657 db1a23d18640c548f08c9f94823838b5e019ac85877c7b15df2d1493d1846572 lib/codeql/rust/elements/internal/generated/PathExpr.qll 17cdb0a7393258a207450f08e37178fc9d35d167f064ba6015be94246f3dc933 a75fdd280aff6d87e083a92030e041c2eb52b57cf7151d4a6989fcd31d6a64bf @@ -541,11 +541,11 @@ lib/codeql/rust/elements/internal/generated/PathPat.qll 98c9938d6a359fd717829b19 lib/codeql/rust/elements/internal/generated/PathSegment.qll 4621597fd86246f788b8f9ca73f6b0f27929fc04261ce3ccf85da1183071431d aadda8bce386a3b7a9c53b98465eedcc4f724e37b8a904c1775af5b7ffb041ee lib/codeql/rust/elements/internal/generated/PathType.qll 45de78e5374d6eb0446e2112ec72d3692c2811df9fa2ad03d0127e426940abe3 622cf70408413a565a0dac58f451035ac1339c8d0ee5b24f630680201cb0aa48 lib/codeql/rust/elements/internal/generated/PrefixExpr.qll c9ede5f2deb7b41bc8240969e8554f645057018fe96e7e9ad9c2924c8b14722b 5ae2e3c3dc8fa73e7026ef6534185afa6b0b5051804435d8b741dd3640c864e1 -lib/codeql/rust/elements/internal/generated/PtrType.qll 5f12b6ad29b4e5ce51c205e2199594ce190e1aa24fbe3ddcfd82317a0b472222 8940e8dcccdf5cfc863aa2f2bc52bbddfa4d9ac8e8b38973cc1ecc1fbe32b3d4 +lib/codeql/rust/elements/internal/generated/PtrType.qll 40099c5a4041314b66932dfd777c9e2bef90a0711fb8d7c2c2cec764c003ac4a cf8297d93557356a572223d3e8acca701837c4b1f54e8d4351ba195fb7ed27f8 lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll dc03515d678ba052c2ff2dd9f0883e0bce54cac740ba9a15e5173f292c1b6971 dc03515d678ba052c2ff2dd9f0883e0bce54cac740ba9a15e5173f292c1b6971 lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll efd93730de217cf50dcba5875595263a5eadf9f7e4e1272401342a094d158614 229b251b3d118932e31e78ac4dfb75f48b766f240f20d436062785606d44467b -lib/codeql/rust/elements/internal/generated/Raw.qll 783c3d04b798c0a5281baf88aa3ada406492e6e6b8ff41dac658d52c88f95c46 e69891409fc89f0a3a199feb6f1a734bfdd862239a5f6794de0ee811e69fab04 +lib/codeql/rust/elements/internal/generated/Raw.qll 1936bd8e75e09639d148321d88a6ba930ccc3e7c8458f052699cbddee43ff448 03c591c9f8333e9490224672df26d4cbbc2b9ff5916e36d2a7ee3d5fd9b8c3ed lib/codeql/rust/elements/internal/generated/RecordExpr.qll eb6cb662e463f9260efae1a6ce874fa781172063b916ef1963f861e9942d308d 1a21cbccc8f3799ff13281e822818ebfb21d81591720a427cac3625512cb9d40 lib/codeql/rust/elements/internal/generated/RecordExprField.qll 7e9f8663d3b74ebbc9603b10c9912f082febba6bd73d344b100bbd3edf837802 fbe6b578e7fd5d5a6f21bbb8c388957ab7210a6a249ec71510a50fb35b319ea1 lib/codeql/rust/elements/internal/generated/RecordExprFieldList.qll 179a97211fe7aa6265085d4d54115cdbc0e1cd7c9b2135591e8f36d6432f13d3 dd44bbbc1e83a1ed3a587afb729d7debf7aeb7b63245de181726af13090e50c0 @@ -554,19 +554,19 @@ lib/codeql/rust/elements/internal/generated/RecordFieldList.qll d7bb2677338cf420 lib/codeql/rust/elements/internal/generated/RecordPat.qll f5f9904fcd8b8fa5fe65b46a68f830021a5e4a68f95ff403151565c3ec770477 56294ed2ff753d8be7742a501b15b5f3f5f20afe0f8171ee6771d049f26489e4 lib/codeql/rust/elements/internal/generated/RecordPatField.qll f17b1aa265091fd8309fd90d5c3822d170870e304f160225327de5a844a9aed4 0458e39dbe88060b4b664692cf0b41ebf4364de268d9417658c14c883c9c1b33 lib/codeql/rust/elements/internal/generated/RecordPatFieldList.qll 08d4740bbb519f15ab20b694b3c45e396a2a59cce0f68fa4b9698348784cae43 99919809607ae61c707f591ee609c50bcfb90d5b4f9c263f6b8e78658d21b605 -lib/codeql/rust/elements/internal/generated/RefExpr.qll f75a9550456e8b53044d0aa94b69148cb04950273000ac19eda57a836091670e 24ea42dc26b6b84f5807959e787a0487b7a33ed1f20c24d34af2799110a1902b -lib/codeql/rust/elements/internal/generated/RefPat.qll 7483fcf9bf555a0ca60bfdbb91fd1c7344c98cb60506469cab24fddd90450005 b233f86eec76a3916ca5daac4812083f452f26089cabc13811a5600862ac1832 -lib/codeql/rust/elements/internal/generated/RefType.qll 90b03447b77c9a8ae5317a7f605beac4a3c9251f2e5409681fe8badad41d1dd7 bd96341b52450eb0ab262aa8ffd810ff7b091d4c1ed8576d794d7705af565296 +lib/codeql/rust/elements/internal/generated/RefExpr.qll 7d995884e3dc1c25fc719f5d7253179344d63650e217e9ff6530285fe7a57f64 f2c3c12551deea4964b66553fb9b6423ee16fec53bd63db4796191aa60dc6c66 +lib/codeql/rust/elements/internal/generated/RefPat.qll 5c4d908f851d89f42cf765007c46ac4199200f9b997f368d5b0e2a435efa82cd 42fd637bc98b5a9275386f1c5fb3ae8c4681987289a89b060991416a25131306 +lib/codeql/rust/elements/internal/generated/RefType.qll 3603a3e000acc25c5e675bd4bc4a5551b8f63851591e1e9247709e48d1769dc5 91bea4a1d5ef0779d575567253cd007157d3982524e63a7c49c5cae85cb42e5f lib/codeql/rust/elements/internal/generated/Rename.qll d23f999dab4863f9412e142756f956d79867a3579bd077c56993bdde0a5ac2f1 9256c487d3614bf3d22faa294314f490cf312ab526b8de0882e3a4a371434931 lib/codeql/rust/elements/internal/generated/RestPat.qll b3a4206e68cf67a0310a466721e7c4b3ab855e65490d589d3d856ad333b3d5e8 30b471bec377784f61d73ef93e74fc0dcec7f512ac4b8791d1ca65f2bcea14b8 lib/codeql/rust/elements/internal/generated/RetType.qll a26860cd526b339b9527c089d126c5486e678dd080e88c60ea2fe641e7d661fd a83c1ce32fd043945ad455b892a60c2a9b6a62d7a5aadf121c4b4056d1dfb094 lib/codeql/rust/elements/internal/generated/ReturnExpr.qll c9c05400d326cd8e0da11c3bfa524daa08b2579ecaee80e468076e5dd7911d56 e7694926727220f46a7617b6ca336767450e359c6fa3782e82b1e21d85d37268 lib/codeql/rust/elements/internal/generated/ReturnTypeSyntax.qll 34e32623d2c0e848c57ce1892c16f4bc81ccca7df22dc21dad5eb48969224465 ccb07c205468bce06392ff4a150136c0d8ebacfb15d1d96dd599ab020b353f47 -lib/codeql/rust/elements/internal/generated/SelfParam.qll cc9693cd6efd7528584f00696b86e41027e05066f8e8aba1ca25bd7567b971ed 689b4746ab4e82de0b7b6e11350959c5194a1562497a21a831c75c6e325ff468 +lib/codeql/rust/elements/internal/generated/SelfParam.qll cf6837c2731b45632f04092079d295eee3e02d19f73c73b3ccbce1abe12203bf 87eaa9d982506904c42030f7173dd01fd52f3edd9d2c8d19b572f6d5454f769b lib/codeql/rust/elements/internal/generated/SlicePat.qll 8b1463758d7b15a0303384c8136a48a8e71ce27da4ba6e421272b9751a988e64 7562d47308f197bc63ade0f114cd23a17e7f60fa696716f6a30fc7b7411642fe lib/codeql/rust/elements/internal/generated/SliceType.qll 98ee8b566be28f392ab9c9507600e8461ad0b48cbbbd422d22548aca691f8330 528d6eabddf49b9dc474971a2f3a6ddb6f2d77dc7f8449140ef54646c1ceb822 lib/codeql/rust/elements/internal/generated/SourceFile.qll 55d44c9f09c5ff28c4f715f779a0db74083e1180acaf0d410e63ca07b90d1cb5 78c0af48b0b64aa377413ea4799dfe977602a111208e1d25e4bdfa920dbd7238 -lib/codeql/rust/elements/internal/generated/Static.qll cae5313e08e4af44c46b2580226993eff639a5257863276e720de2309afff3c3 93fdbd117ecb69fbef5c84632e08483c0faf051f882f1a266215044a0d5bfd94 +lib/codeql/rust/elements/internal/generated/Static.qll 5fbd6879858cf356d4bdaa6da475de729c12d44ee99aef12bdefe657fdb885e0 0c8e9ef7a93c59b9346265338e38ae3f2e1265981f2d81aab49bc36cf0589382 lib/codeql/rust/elements/internal/generated/Stmt.qll 8473ff532dd5cc9d7decaddcd174b94d610f6ca0aec8e473cc051dad9f3db917 6ef7d2b5237c2dbdcacbf7d8b39109d4dc100229f2b28b5c9e3e4fbf673ba72b lib/codeql/rust/elements/internal/generated/StmtList.qll a667193e32341e17400867c6e359878c4e645ef9f5f4d97676afc0283a33a026 a320ed678ee359302e2fc1b70a9476705cd616fcfa44a499d32f0c7715627f73 lib/codeql/rust/elements/internal/generated/Struct.qll 4d57f0db12dc7ad3e31e750a24172ef1505406b4dab16386af0674bd18bf8f4b 1a73c83df926b996f629316f74c61ea775be04532ab61b56af904223354f033e @@ -574,7 +574,7 @@ lib/codeql/rust/elements/internal/generated/Synth.qll 99fa143232f2cfb1ef3f6ed6a5 lib/codeql/rust/elements/internal/generated/SynthConstructors.qll 518b68ccf6d0791bc0c141486261108bb1723e37743fc7f8e4167a1d61660531 518b68ccf6d0791bc0c141486261108bb1723e37743fc7f8e4167a1d61660531 lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b lib/codeql/rust/elements/internal/generated/TokenTree.qll 8577c2b097c1be2f0f7daa5acfcf146f78674a424d99563e08a84dd3e6d91b46 d2f30764e84dbfc0a6a5d3d8a5f935cd432413688cb32da9c94e420fbc10665c -lib/codeql/rust/elements/internal/generated/Trait.qll 32bdbb4dc9f03488195a90320a947013135cd2fae1b9d62b4f71ed9a4e39a967 5dab0fbec64698bf3cdae04879d3d1665cf82386b7b030ed69e6b20776ffa9fc +lib/codeql/rust/elements/internal/generated/Trait.qll a570fa93d0b78a35766b00d5ca256c102f824564248b9d8b678a981d6eea3e2e d9c7475e5102e21cfdee3b1791f89a4f9cdba5a4200349ff706532b704c02664 lib/codeql/rust/elements/internal/generated/TraitAlias.qll 0a3b568100baaca129a12140b0742a1c8e507ef5b2f2c191ff7452c882ba4064 c32e74569f885c683f8d3977682fcbc8b7699b00d5e538cc6b08acdfffa56bc8 lib/codeql/rust/elements/internal/generated/TryExpr.qll 75bf9fdda5238155d2268806d415e341fa57f293dcadef003b4a11562c4cd877 935c746f822cf183cdf36bef2332f01e7ce38aa09aa8476d64c1062c5e8f13dd lib/codeql/rust/elements/internal/generated/TupleExpr.qll 75186da7c077287b9a86fc9194221ab565d458c08a5f80b763e73be5b646b29f 0250d75c43e2e6f56cdc8a0c00cc42b3d459ea8d48172d236c8cdf0fe96dfed2 @@ -583,9 +583,9 @@ lib/codeql/rust/elements/internal/generated/TupleFieldList.qll 9d4981d04c2ee005e lib/codeql/rust/elements/internal/generated/TuplePat.qll d61163a380f3f2c1709080e2df69a90764509af060e607e27e832862e4dae18c 108b7db493a21fe1fa0db99fceee952aabb0a128eac41e050877ab9136407403 lib/codeql/rust/elements/internal/generated/TupleStructPat.qll 87e0acfeb51d48c55648d5af783f5ea006aaeccce990ba26458c6935fbdf7c11 7c761e66ddacb51307e653c6ad45bec3fba8315049fbe6c4503ed19241204d41 lib/codeql/rust/elements/internal/generated/TupleType.qll 7fae8e881157a24c4ce4f960269ba8010e227a81d3055b571f861f7196f868e2 18085a19a102df8e2cded938b49709225e89f0ce68b4a003310647bb259a6bd3 -lib/codeql/rust/elements/internal/generated/TypeAlias.qll c584cd4c6fedc50818e7bd6a3ac8d14ba916e7ae6be179bd2f51f3aff95673ab f4be9e83c9814fec205c606de5afeec836a7ec8d58d8b64fec9126472f2a8c68 +lib/codeql/rust/elements/internal/generated/TypeAlias.qll af02bb172b6f2d7f5eab8645a5a219eee8a4bbc445838f5739f18ba217c7e608 6d871471d673adae99c8b146f6f7ab204f24d52b5013b4582037a42b279c9f05 lib/codeql/rust/elements/internal/generated/TypeArg.qll fe4441b3faa44e542c43a85353347df23d3f74da0c4b17cb0fdc60f5aca9dee7 1473d044e979e7cb6628525ffd454549cd8a37560488c695f534243946cf83bc -lib/codeql/rust/elements/internal/generated/TypeBound.qll c6f75fd8e99e575c33d424c2c9c85918554bdb87b5f78848c66538df6ad08559 f107ae5edadc3bd1b2e76f0c5ab15d043946ac9d2db62c10132690de7282003c +lib/codeql/rust/elements/internal/generated/TypeBound.qll c4e5a5a919a30f4b334e8218b69fae887bf43e3b87bc63863b2c891beba14ba0 c9d394f31a7cbcfae95d511ad030ed515f51e87697233643b9ac12d6ac61ab18 lib/codeql/rust/elements/internal/generated/TypeBoundList.qll 31881cae2f71df5adf7a427357565bc0e7ba58c6a774a9d5835560a34c4db30f 1ff36ba34dd966d945d743781e3a1cccad4bb9fd5d32902dfd0bcad537501a85 lib/codeql/rust/elements/internal/generated/TypeParam.qll dd57c5c370b4e3ed87c42c4fccf71b554cf1c588de1a1d1ac4ed5edbc1fb4664 09cd09537c1196f0a84850f654d324c6ad8aeaf9debcc3d9879e23a313ed93d9 lib/codeql/rust/elements/internal/generated/TypeRef.qll c4c3bdafe3deb05338f5031c798fa6e72b58301ee7737a785314e72c9c4f091c e6ec0c680bcfe61ff79468de485241a75fbd795b2d501004324b66b003fddbce @@ -644,7 +644,7 @@ test/extractor-tests/generated/BinaryExpr/BinaryExpr_getAttr.ql 26d985ac4b668d78 test/extractor-tests/generated/BinaryExpr/BinaryExpr_getLhs.ql c3f19d8a60066ad6b1810291a669473c75b659cd2f6ac3ab9ed3db2203d4145c c05c5e0226e30f923155669ffc79cfe63af1ca464e8dfc85888dda5f7049711b test/extractor-tests/generated/BinaryExpr/BinaryExpr_getOperatorName.ql 33612159be1c111e3306009d0b04579450fc962a81119b6ea4e255d3c409b401 1a0995b298f50242217cfef81dca8ac978e19e06f90a5f4caadcb6f84460fec2 test/extractor-tests/generated/BinaryExpr/BinaryExpr_getRhs.ql 3bcd36b678e87d5c29a43b69c54c80468a89aefa7e69481b48158ae794a53160 a629dc1472b3f6fd7c608ff760e83d8e1363db81dfe9a4b2968690c2ba4925ca -test/extractor-tests/generated/BlockExpr/BlockExpr.ql 45aba7a94638c343b05560309ecf11e436b1265565072f1cba138bac804e57f2 6d556c1d1f6ac58dc93e542930940f127a7f69181e39275afdc6852d90f12a23 +test/extractor-tests/generated/BlockExpr/BlockExpr.ql 0ab66b190d4e2aa784e61088c4779ef4d08cb4453677ea087c4f9aa369494bc2 1c3b5794008114d1297695d82590220929e3974e27836b2c6062d14b73379a40 test/extractor-tests/generated/BlockExpr/BlockExpr_getAttr.ql 15d4d9853d3262ce6ec629c075c60a76eb112dcafe34b71df0e09b39282223cf 792c498bc7079bb5b93034b8a87db3b275a591d78954e844821aeacffe4258ea test/extractor-tests/generated/BlockExpr/BlockExpr_getLabel.ql de3c28a2677ed71ebd95207aa43ce270765f7f556283f095f1f6296622b80cbc 414ebbb2bfbe4350f933fc3d3636b49a6bb8242e200180780caf95ab8523adb0 test/extractor-tests/generated/BlockExpr/BlockExpr_getStmtList.ql 8c391dfeb69bd92c547a2417bf231cc960a8f34845802722214294728772316a f3e847fa594e9d9cf25d09a0396a10176aad1100c1977a24756ff6287a79e69e @@ -664,14 +664,14 @@ test/extractor-tests/generated/CastExpr/CastExpr_getExpr.ql c37186b8f3e3dab8ae28 test/extractor-tests/generated/CastExpr/CastExpr_getTy.ql ad5d6e260e1495ba360bd2ade3b60f09705a86a08d618acf8c4aff342c8ee200 c02c1dc65ba9160bc28827e40473915de5403bdc91c16d9d8b6778aa97314a1b test/extractor-tests/generated/ClosureBinder/ClosureBinder.ql 42516df87ac28c814d65f6739b2ede6eaa41c505d64756a3b8c7e0ca79895230 8b840f92ec033a4ef5edbe52bed909d8be0fffddf6d3e4bfaf9a8bc174fa2f2c test/extractor-tests/generated/ClosureBinder/ClosureBinder_getGenericParamList.ql 71010c43a78a7abe8e63c94353f4b7eb97aca011755d200e7087467c1e3b7a68 2c834328f783ec5032544a692f7e23975bac0228b52b9f8fde46ef46a5f22a5f -test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql d79b1a60e9cd4266f756872f44363d062e8030baae9eb4b1dbaf9465ae88f0ec 46414e0aa4330a42f67083bf866a360fb5e2b234b7df5564559285046311e8e1 +test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql 430d566d8176d7b98d6cde6c35f9420249236eddb084f9c7cbb091cc683ff063 6b8127425cad540a1e407ff7b387f3924253da980f46e5a678aeb2870ba6ec7b test/extractor-tests/generated/ClosureExpr/ClosureExpr_getAttr.ql f7f803afa4e2a5976c911fdf8a91ec607c2f998e22531b9c69a63d85579e34c3 1296acd0fb97e1484aa3f1d5ba09d18088001186f3ba5821eb3218a931ca0d54 test/extractor-tests/generated/ClosureExpr/ClosureExpr_getBody.ql 22a973a61274e87620e38338b29beef395818b95a88e2261fff197f7a78a8f76 bd28ed426e4d07823044db869aa8022dc81e8599d156e3e0e7cd49be914a1f36 test/extractor-tests/generated/ClosureExpr/ClosureExpr_getClosureBinder.ql cbfcf89b8efb5cb9b7bfbea26b5a78b3d4c7994cbf03d5ca60b61ee1b5cb4be5 621431277732ef79c585cb0b7199c49b14c597ee6b594a70d9e6966a09d40a9f test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParamList.ql 68ce501516094512dd5bfed42a785474583a91312f704087cba801b02ba7b834 eacbf89d63159e7decfd84c2a1dc5c067dfce56a8157fbb52bc133e9702d266d test/extractor-tests/generated/ClosureExpr/ClosureExpr_getRetType.ql c95bc7306b2d77aa05a6501b6321e6f1e7a48b7ad422ba082635ab20014288ae fe72d44c9819b42fff49b9092a9fb2bfafde6d3b9e4967547fb5298822f30bc3 test/extractor-tests/generated/Comment/Comment.ql 5428b8417a737f88f0d55d87de45c4693d81f03686f03da11dc5369e163d977b 8948c1860cde198d49cff7c74741f554a9e89f8af97bb94de80f3c62e1e29244 -test/extractor-tests/generated/Const/Const.ql db81591df5a8822a578f9445b8444f6ac391efc43c61aab429edb76ab9c0303d 5f7ae3622c03eb151fa5326db785f0ff3fe6f52033fc071d758eac18ea1b5722 +test/extractor-tests/generated/Const/Const.ql d02d4010c54f2cfcb9251f362c3768740399807eb4fe995373d9a316f14e7a8b 8d277779d3d3ded5cf0829dc9bfd8936f2334d89de4a84e110f0a017224729a5 test/extractor-tests/generated/Const/Const_getAttr.ql bd6296dab00065db39663db8d09fe62146838875206ff9d8595d06d6439f5043 34cb55ca6d1f44e27d82a8b624f16f9408bae2485c85da94cc76327eed168577 test/extractor-tests/generated/Const/Const_getBody.ql f50f79b7f42bb1043b79ec96f999fa4740c8014e6969a25812d5d023d7a5a5d8 90e5060ba9757f1021429ed4ec4913bc78747f3fc415456ef7e7fc284b8a0026 test/extractor-tests/generated/Const/Const_getName.ql b876a1964bbb857fbe8852fb05f589fba947a494f343e8c96a1171e791aa2b5e 83655b1fbc67a4a1704439726c1138bb6784553e35b6ac16250b807e6cd0f40c @@ -679,9 +679,9 @@ test/extractor-tests/generated/Const/Const_getTy.ql bf9abfd2be9d22193bc6be9916c7 test/extractor-tests/generated/Const/Const_getVisibility.ql de6b2e9d887316e279b45fab7887980ca7d93fd32c2259f3a06de2b6e2957c12 2f135cdbbb84b43d282131edb7eb4df6caba61bf7421881a49d4679f0f44f661 test/extractor-tests/generated/ConstArg/ConstArg.ql f1422b216eb45819ff41f0c19e0f88aa184ddd3fa2984ba22ec46df398147fc3 d2e4f367848c2bc4f6aef51c1dd8180035c39919430082c83f18a3f324228df3 test/extractor-tests/generated/ConstArg/ConstArg_getExpr.ql 317fd83ad51acc3ff3dfab71ebb1385b67d49404c1d7b3804a8ca3c099b84e99 91ecf5ebbfc1aab286dce708680f0be97417f9755676db7479fa6836e50be845 -test/extractor-tests/generated/ConstBlockPat/ConstBlockPat.ql b3e1f8c54af03af3cfe16dcf1831777404e360058f67acc4453c0d4211897d12 6f842cf96153219c7ab0d7d04db9a52b8fec71996d527bce69acb6678e437861 +test/extractor-tests/generated/ConstBlockPat/ConstBlockPat.ql ee17b4deba9c503130e3ce565102bc8e181770efcb1309be9c822f0a7ba6fc17 638ed17b5c009e71b31f580c4060ba763bd4208c3984b6c032183ab46a4dd43d test/extractor-tests/generated/ConstBlockPat/ConstBlockPat_getBlockExpr.ql cc06e762e1652e467c7cf02c34f17c621fb3a938f294ee527fa04ed78c8701ec f863f8f6bfc9d169b585ae56b4e4ac0fc1603fd14775450e950cca4d5ea28e8a -test/extractor-tests/generated/ConstParam/ConstParam.ql f883b198f9c373e2d4c630706af5ba1d8a2f8f4e9847e9a54ca56cc892dbdc34 ad59caac567e80940c7e0f06239a91e7793a57e9e6ab0452535daa1aae3f2a1e +test/extractor-tests/generated/ConstParam/ConstParam.ql 1c2ec1a00ffc754ade227536f3efe789cdbee714fa003abff5e0221b9b53d08a 6f24ef0b280b18603a6efd217c691c4249898be95dafd5ff5a586cb2f2ecdf40 test/extractor-tests/generated/ConstParam/ConstParam_getAttr.ql af8949f1ea039a562a3b3561185a85f7f8a871bf27dba0580782f81c62b6508c 2874783b84fdce47b809f953e02c36473cad6a2d3dd1c0f1a9cb14a3e28b9c30 test/extractor-tests/generated/ConstParam/ConstParam_getDefaultVal.ql 021630468422c30e7aa623bdf4e97f3076e68087991723c624922b1ee608d173 9fd78738cfd0455be2c655852f6c618e901af80c6b6791396d9683c118a44e91 test/extractor-tests/generated/ConstParam/ConstParam_getName.ql e2e9b75dd7ce501793efce75079aabd3851b91aa4d437972693bacd7b04859d8 4d2326b39af870a2ef8b37448f78395cdb5c1e94df88f137ef71f8fd3548cd8e @@ -700,7 +700,7 @@ test/extractor-tests/generated/Enum/Enum_getVisibility.ql 7fdae1b147d3d2ed41e055 test/extractor-tests/generated/Enum/Enum_getWhereClause.ql 00be944242a2056cd760a59a04d7a4f95910c122fe8ea6eca3efe44be1386b0c 70107b11fb72ed722afa9464acc4a90916822410d6b8bf3b670f6388a193d27d test/extractor-tests/generated/ExprStmt/ExprStmt.ql 811d3c75a93d081002ecf03f4e299c248f708e3c2708fca9e17b36708da620e5 a4477e67931ba90fd948a7ef778b18b50c8492bae32689356899e7104a6d6794 test/extractor-tests/generated/ExprStmt/ExprStmt_getExpr.ql e269bb222317afe1470eee1be822d305fc37c65bca2999da8d24a86fa9337036 088369d6c5b072192290c34c1828b1068aeedaabdae131594ca529bbb1630548 -test/extractor-tests/generated/ExternBlock/ExternBlock.ql d28af9f7d0fa29687fb3f420401769612ea5ed320597bddf6653a108ede53049 b4deea6cb1ebda9db6968096e4048f5eeca41261b2c2c30d5d23971301bd2cb0 +test/extractor-tests/generated/ExternBlock/ExternBlock.ql 0c50adb4ce7479100fe46e097801df699911b4888a4919aa7ca337e2ef8a2525 101eee87add6793006bac20a2f7d0e245a1c04cbc81834b6130db083578b0c5f test/extractor-tests/generated/ExternBlock/ExternBlock_getAbi.ql 9b7c7263fcbc84e07361f5b419026a525f781836ede051412b22fb4ddb5d0c6a c3755faa7ffb69ad7d3b4c5d6c7b4d378beca2fa349ea072e3bef4401e18ec99 test/extractor-tests/generated/ExternBlock/ExternBlock_getAttr.ql 78ed6a2d31ccab67b02da4792e9d2c7c7084a9f20eb065d83f64cd1c0a603d1b e548d4fa8a3dc1ca4b7d7b893897537237a01242c187ac738493b9f5c4700521 test/extractor-tests/generated/ExternBlock/ExternBlock_getExternItemList.ql 2c2b29bdfdc3b27173c068cbaab9946b42053aa14cf371236b4b60ff2e723370 dfc20fc8ef81cdce6f0badd664ef3914d6d49082eb942b1da3f45239b4351e2f @@ -716,7 +716,7 @@ test/extractor-tests/generated/FieldExpr/FieldExpr.ql 1b45da610feb62cee42f7a3866 test/extractor-tests/generated/FieldExpr/FieldExpr_getAttr.ql 609c4f1e275d963cf93a364b5ec750de8cb4790abdaa710cb533ff13ab750a4e 8c2aa84b1ea6ef40a7ee39a2168baf1b88323bfbc6b9f184e7b39631765a48dd test/extractor-tests/generated/FieldExpr/FieldExpr_getExpr.ql 57df2d733faf3e3e30ae106d8423aab612ab0ddf8659da008e384130cf1e8023 1e240bee8e83dc26f78d2c55464ca1fb88d773691d47aee9a2182c90f57eb8f1 test/extractor-tests/generated/FieldExpr/FieldExpr_getNameRef.ql 8631f5e8bdd72443a1ee3d667ee9136a51ad49dfd206612a36b79686da1beb19 692aef607108b8e3eaa78b8c915f2fd1d310905f8fea770b9694722a9a2a6232 -test/extractor-tests/generated/FnPtrType/FnPtrType.ql c8fe0b3c849e37ac2bfbb1658ea3b0081502ed6fffb65454853298ffb2383966 d6732c9fa4e37f42c34369a67147df1a1fd453fdc1aa982c3f59578fd1f3f818 +test/extractor-tests/generated/FnPtrType/FnPtrType.ql 50b76d678582cd0b8d7cc4a7658d5009d660bafcec6bd9968c9f60a7f547fa23 5bbf2504eb835e231a2355bc5d099322423c49c6af371902cf20a150e360cea7 test/extractor-tests/generated/FnPtrType/FnPtrType_getAbi.ql de1706382c2980c02dbdd295e0a2320c992afa3f19af0c2378b9980a7cd0c481 a3fa36711949d9d5ac53cc5dd39cb19b397c3f2e47c1d457df470c6e5142f9be test/extractor-tests/generated/FnPtrType/FnPtrType_getParamList.ql 9ea393acf37919e2fd1bbc16e738440e00a56552bf80baef9bfd2a9a405afb93 3b4237b22eea569cef0081eb3ea16b2d0f01f8f070f21e16390267e9cbe0cf57 test/extractor-tests/generated/FnPtrType/FnPtrType_getRetType.ql 57f662e4778e1bf4103f061bb8085def0708528f94045c9ff4a95ce802fff13d 924b924c7d766458e956afa0963e6eb1bfc083e5f9aeae64cf2d08929f79612c @@ -736,7 +736,7 @@ test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr.ql 0cd439f61569ecf0 test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getArg.ql 8f692486be1546b914b17abdff4a989dfbaa889bfa1fc44597f4357806c1a1dd da9fd237e31e9c8dd0ef0c3c968157815b87d3e8dcdfd74674c988ce2ab6d270 test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getAttr.ql 1f9bf1344f942e65c3a3591b6ae04d3f5a2a1a65459bce0d976698de7d8a5958 02acb861d8ab4d32cf144c589881a888c3da5e2ade27e8c85fec3ae45219bb3b test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getTemplate.ql c912ac37275cbe7b3b29607bed1a3190c80779436422c14a475113e1bfd91a54 ef90f67a9b952a38ce557b1afbf0b5ce8551e83ddfaad8309a0c9523e40b5ea7 -test/extractor-tests/generated/Function/Function.ql 608e1053c5be5a5d36e4be5cd9da5d4398a0a374adf0ded9f6b652c8b9e085f7 133260e1104616b467aa14a7e0237337aadac918f1b08bd1b9b4f1818fd911e9 +test/extractor-tests/generated/Function/Function.ql 28776a499f21ab36c9dfcb905861cf0bf0a2c51f24d6d9401ca45f67d9f982b0 1ded959dfd9c216975572c4577c6a2d4c56a2d3d4a2dd5b0f3f90adff98d86aa test/extractor-tests/generated/Function/Function_getAbi.ql e5c9c97de036ddd51cae5d99d41847c35c6b2eabbbd145f4467cb501edc606d8 0b81511528bd0ef9e63b19edfc3cb638d8af43eb87d018fad69d6ef8f8221454 test/extractor-tests/generated/Function/Function_getAttr.ql 44067ee11bdec8e91774ff10de0704a8c5c1b60816d587378e86bf3d82e1f660 b4bebf9441bda1f2d1e34e9261e07a7468cbabf53cf8047384f3c8b11869f04e test/extractor-tests/generated/Function/Function_getBody.ql cf2716a751e309deba703ee4da70e607aae767c1961d3c0ac5b6728f7791f608 3beaf4032924720cb881ef6618a3dd22316f88635c86cbc1be60e3bdad173e21 @@ -750,7 +750,7 @@ test/extractor-tests/generated/GenericArgList/GenericArgList.ql 2d3e37da2c02a88e test/extractor-tests/generated/GenericArgList/GenericArgList_getGenericArg.ql 7f92dc62d814c39bc50dfd46c359540261fe433fcad1752ea2fe139a05071183 9863976c97c1b7c07d5d18d8ffee798b1c1b0223784a61066ee2c9ffc46c4979 test/extractor-tests/generated/GenericParamList/GenericParamList.ql 5d04af9be32c5f8bdf9ec679b0acbabd58ff01a20f5543a0c7d4fe5c5773ebba 7e86c4d3ed64b9ef2f928abd22b593d72131862321096722df5150b5202a4a28 test/extractor-tests/generated/GenericParamList/GenericParamList_getGenericParam.ql 7866ed49ebfca1cc1fffeec797329a592f52b4431a5d259aeb7120a7f4961c44 16d89dd05d9db1b1997f801d9e5ba2dd9389d13a3031c730414f3daf5fb7b12f -test/extractor-tests/generated/IdentPat/IdentPat.ql 8fc54811b0fabda503949557737d14a2e71ec68170b6e42e69fde08ba1a2c39d aff69e979a6084eb4e1d902df2bafd0cde806a41ab8ef83336585a60d4e3a7c8 +test/extractor-tests/generated/IdentPat/IdentPat.ql 1e61edbdff611193bbb497eeba8c35043e1d1c6d3359903be58382b1c95e39e4 6f3a288cc12ee24a9ff21ca2fe544838d66f6481e60539cf7d4a473e628e3c3f test/extractor-tests/generated/IdentPat/IdentPat_getAttr.ql 02607c8c616dc94152777390f912fc1e6bb420cc3ea687397e31392848942aa7 aeb10434577815d9a9f0f45a1a448656323f05d5321ff07d435ca4a449527d53 test/extractor-tests/generated/IdentPat/IdentPat_getName.ql b96a3dbca1bade052cad294d95f95504665ad0b14c7f5f9f8083486d0ee64026 28c851703250c25b518024add1052d3204271db3f89eddf862d9a1e122ee6eb0 test/extractor-tests/generated/IdentPat/IdentPat_getPat.ql fea604fee0db39f83a3dadb4583cb53123c63351282bc3387b84f90477be19cb ef2e620ade30e0225f6bf1c84982d1b8f949ee0c2ced5edbd00e5547e0a81a7c @@ -759,7 +759,7 @@ test/extractor-tests/generated/IfExpr/IfExpr_getAttr.ql f5872cdbb21683bed689e753 test/extractor-tests/generated/IfExpr/IfExpr_getCondition.ql 5bab301a1d53fe6ee599edfb17f9c7edb2410ec6ea7108b3f4a5f0a8d14316e3 355183b52cca9dc81591a09891dab799150370fff2034ddcbf7b1e4a7cb43482 test/extractor-tests/generated/IfExpr/IfExpr_getElse.ql 8674cedf42fb7be513fdf6b9c3988308453ae3baf8051649832e7767b366c12f e064e5f0b8e394b080a05a7bccd57277a229c1f985aa4df37daea26aeade4603 test/extractor-tests/generated/IfExpr/IfExpr_getThen.ql 0989ddab2c231c0ee122ae805ffa0d3f0697fb7b6d9e53ee6d32b9140d4b0421 81028f9cd6b417c63091d46a8b85c3b32b1c77eea885f3f93ae12c99685bfe0a -test/extractor-tests/generated/Impl/Impl.ql 2969c1fc9dcc836ac7f40f5a2030b6f90f57a87f8a3da72b253da34c0620d4fe 0453150f2818fc002becd34a9d8cb67bf4df93b00d91b5be9fe053a9ed44aed2 +test/extractor-tests/generated/Impl/Impl.ql b879d3101c31d57c1b7b794c241678214f65fcb1b33ec45919948809d1d62f6c 769c7a691a8034db4cc12bc8cd8df3a8ae765a3fb83bb6a5efe6e310328d800c test/extractor-tests/generated/Impl/Impl_getAssocItemList.ql cf875361c53c081ac967482fd3af8daf735b0bc22f21dcf0936fcf70500a001a 0ad723839fa26d30fa1cd2badd01f9453977eba81add7f0f0a0fcb3adb76b87e test/extractor-tests/generated/Impl/Impl_getAttr.ql 018bdf6d9a9724d4f497d249de7cecd8bda0ac2340bde64b9b3d7c57482e715b cd065899d92aa35aca5d53ef64eadf7bb195d9a4e8ed632378a4e8c550b850cd test/extractor-tests/generated/Impl/Impl_getGenericParamList.ql 88d5cd8fd03cb4cc2887393ee38b2e2315eeef8c4db40a9bd94cf86b95935bdd 9c72828669ccf8f7ca39851bc36a0c426325a91fc428b49681e4bb680d6547a9 @@ -843,7 +843,7 @@ test/extractor-tests/generated/MatchExpr/MatchExpr_getExpr.ql 7baaa64071cf2666e3 test/extractor-tests/generated/MatchExpr/MatchExpr_getMatchArmList.ql d97055bcb0431e8b258b5ecdd98aa07cb24ece06b0cd658b697cd71da4ede8fc 5e9c03b2665ef6b2af98897996abb2e0a9c18d54eb64588340b8efbcee9793bd test/extractor-tests/generated/MatchGuard/MatchGuard.ql 23e47ec1b13e2d80e31b57894a46ec789d6ab5ed1eb66bdb6bba9bd5ae71d3ef 7302f4a93108a83228e0ebd5b4a1bc6bccc1f6f0f3272054866fa90378c0dcc4 test/extractor-tests/generated/MatchGuard/MatchGuard_getCondition.ql 8a79dd46798f111f8d0d5a975380b5cebe5e337267752b77b3718b268ba2773d 6691d8fb483f64fc7e3ad3f46e3129e0a1184d7beb9f83a1000acdbb081c8b5e -test/extractor-tests/generated/Meta/Meta.ql 5edf76c32512f29dbe033a02e12aa81e64ae8998b1eb70c414c08fd400f794d1 34ce5338b4a82437ba2db9e4bfb2810dcd37c463b8d667d483c3f7b3c6ca2a99 +test/extractor-tests/generated/Meta/Meta.ql 16f163f00ba2bbaa0a8c6f3f6710c860a8f61d02d43321c78e05a10a3606e39b ba982c6bb93ddb4fc2c44d24635bd487128a5b1d1f885214044c989a21f4d05a test/extractor-tests/generated/Meta/Meta_getExpr.ql ec9ec61f5be7d65c32775fb5c068daea04f9db7d875293ed99cc1b2481db041f 77a0c52f1cb6ddc8fdb294d637f9eda1b7301ffa3067f0fca6272d894f57d3ee test/extractor-tests/generated/Meta/Meta_getPath.ql aa9d4145a4e613c51b6e4637d57e3b7d0f66e0bb88f4ce959d598870814c06bb 2087e00686d502c0e2e89c88eae0fb354463576a9ae4101320981d3fd79b9078 test/extractor-tests/generated/Meta/Meta_getTokenTree.ql 1051c27ffd0d9a20436d684fde529b9ff55abe30d50e1d575b0318951e75bd34 983975672d928fb907676628384c949731da9807bf0c781bb7ec749d25733d2d @@ -905,7 +905,7 @@ test/extractor-tests/generated/PrefixExpr/PrefixExpr.ql 44fb7174365c6deecdc22c72 test/extractor-tests/generated/PrefixExpr/PrefixExpr_getAttr.ql fdad6ad5199435ded1e4a9ea6b246e76b904cd73a36aaa4780e84eef91741c5b 75d63940046e62c1efa1151b0cac45b5ec0bab5e39aec2e11d43f6c385e37984 test/extractor-tests/generated/PrefixExpr/PrefixExpr_getExpr.ql 2d1d97f6277794871fbb032ea87ac30b1aa902a74cd874720156162057ea202e b1b9880fce07d66df7ec87f12189c37adf9f233a1d0b38a1b09808d052a95642 test/extractor-tests/generated/PrefixExpr/PrefixExpr_getOperatorName.ql d27602e77ddf491a278426de65041dda8568f427d1e0ff97c0f23069ae64670e 4e4766e948adf88a6b003ead7d9de1ad26174fe9e30c370f1d3e666aa944df52 -test/extractor-tests/generated/PtrType/PtrType.ql 6a1cae6f398efe5021e94a945d791da9f01da56a19b25fe7692cbbe7e1a3817c e2d38e534bae46176e26f3941bb0029148cb70b244b61c19d2e9524682f3c5de +test/extractor-tests/generated/PtrType/PtrType.ql 6317c79917e024d2162ae9089c17539fae818288f9ba5976fe39d004691dd343 d7e12a58475322a1292777608056ff90d7014b3e3a77bb756e233014d2670f28 test/extractor-tests/generated/PtrType/PtrType_getTy.ql 97f5e6197e66c4dcf15d4a62692e30a26979f2902d83354911985d39c8560d1a 0b049b882a33be9746fbb704394a024ac320415cfd1707dc48fe114781558e36 test/extractor-tests/generated/RangeExpr/RangeExpr.ql 707c08aab49cc0a22c80a734e663b13ecbbddf0db28b6a25fdbc030a1ce38d6f 1f78950b30485cdde9fe7d9e416ad1dfdac8c5b6bc328172e6e721821c076131 test/extractor-tests/generated/RangeExpr/RangeExpr_getAttr.ql 8767e670f88c2115bc61b16195d2c9d02bc074adc4ca57d2aa537c1af9b4c530 4fa51652c60ca7d06bd9ad604107e002603ee2a7b4587636f6b46b8e8060e06c @@ -944,12 +944,12 @@ test/extractor-tests/generated/RecordPatField/RecordPatField_getPat.ql 577187a47 test/extractor-tests/generated/RecordPatFieldList/RecordPatFieldList.ql 5a49488f43bbac2349d75b3acbb3bca4440d9b3725434fefd1ba2eda2be6feb2 898177f203181e5e095091b0a3f6a92f1323c80862400cbfd85902d783a9160d test/extractor-tests/generated/RecordPatFieldList/RecordPatFieldList_getField.ql 7c0d190762089af3b6f4fb9ef95561bb2107d7476477bdcfce6b313caa61cab1 17c85ac9670c4faea44a76e9e21184a3d5cabc6c3deba083a0b84fb91e3cbe16 test/extractor-tests/generated/RecordPatFieldList/RecordPatFieldList_getRestPat.ql 0caef1f5d09a73a973200e061e09ea5498b855dc19af19c1dc48cd9f20da6857 45c12708b566a5efcc79155b45174fc3ff5a084109043493cffa5216b9054205 -test/extractor-tests/generated/RefExpr/RefExpr.ql 6a4d786b68003295ed2cc9a7a9b2f93d6b91f91e4faa7165537e369c3bb0923c 6dd9467a92ce7e966095c01c0356f8429e340e21c036e3ad5665c6442e705580 +test/extractor-tests/generated/RefExpr/RefExpr.ql 27d5dceb9e50668e77143ff5c4aa07cbe15aeea9829de70f1ddfe18d83690106 b95058b7a0bad4bddb857794901d9b651b2f9e4dd3554e5349a70a52cbbfaff6 test/extractor-tests/generated/RefExpr/RefExpr_getAttr.ql 477fb3fee61395fabf78f76360ea27656432cb9db62e6f1dab1e9f3c75c83d39 5210f2ac54c082b616d8dcb091659cdad08a5d4ae06bf61193c33f208237482f test/extractor-tests/generated/RefExpr/RefExpr_getExpr.ql 180d6417fd7322cabf4143d0ddd7810f65506b172a5c82484b3ef398041636b2 a291f0bec1ec5b3fa6d088b3d1a658889b9a3521c39ff3bb7a5ab22a56b8b20a -test/extractor-tests/generated/RefPat/RefPat.ql 2d2e9b058d66d2183a0795cdd719a36e53d27d9c267eca22e34624c558991250 b95d435925f0bd38a101eb00eab548acbc39a9d7e8fdaa10e1d65f0f72362a9b +test/extractor-tests/generated/RefPat/RefPat.ql ba0f0c0b12394ed80880bea7d80a58791492f1f96a26783c2b19085d11e2fd2b 22aa62c6d4b6e4354f20511f8e6d12e6da9d8b0f0b3509eefe7a0c50f7acfb49 test/extractor-tests/generated/RefPat/RefPat_getPat.ql 60f5e010b90c2c62d26674323d209b7e46c1c2b968a69765e1b1cde028893111 fe9e7dc6a5459250355336eca0bdf2a0be575b1e34936280fd12a76a004f7b46 -test/extractor-tests/generated/RefType/RefType.ql d5b822b2e4ffd6a85aac88cc37d113d321029ae042cacb66cb63cd7169faa1eb 3a4a866bc02d733236ebb2b32565bf6a00976afbea3cf50ef1d2271e4ebac9a5 +test/extractor-tests/generated/RefType/RefType.ql f6959c993a8e401a576c785fd1be4b910be218a212eaa9363ebf8f83dc2f1950 686678725a7f9824e74ec6dda294fc2233fd94aced8e2683b7019a1ce81f345d test/extractor-tests/generated/RefType/RefType_getLifetime.ql 880434f5908752adcc02d3645a48f22399250600c19e43c2da852cb6242e6a0b b8f9b9fab827972fd318d5edcaf37e4c7d0cf92261f9744e258537e6aee5a87a test/extractor-tests/generated/RefType/RefType_getTy.ql 0d5667542ad05a0da1a6a4c36882a39014c4803a76cadb11400d747b603890fd 2e6c3a56f1a7bbb72c181819be72d85c650af1df06f8582ae61bba9e165cf764 test/extractor-tests/generated/Rename/Rename.ql c8605e5d8ebb39be238ba26e46861df493d86c9caf9aa9a791ed5ff8d65a812a 7263c2c2565e41c652eda03d1e1ddd030fea79a8e3c967909df9945e30ecbe68 @@ -962,7 +962,7 @@ test/extractor-tests/generated/ReturnExpr/ReturnExpr.ql 8e9eba0837a466255e8e249e test/extractor-tests/generated/ReturnExpr/ReturnExpr_getAttr.ql 9fb7e1c79798e4f42e18785f3af17ea75f901a36abf9beb47a1eede69c613ba9 9cdb7cc4a4742865f6c92357973f84cee9229f55ff28081e5d17b6d57d6d275f test/extractor-tests/generated/ReturnExpr/ReturnExpr_getExpr.ql 7d4562efb0d26d92d11f03a0ef80338eb7d5a0c073f1f09cbb8a826f0cef33de 523ebd51b97f957afaf497e5a4d27929eed18e1d276054e3d5a7c5cfe7285c6e test/extractor-tests/generated/ReturnTypeSyntax/ReturnTypeSyntax.ql 976ce33fe3fd34aae2028a11b4accdee122b6d82d07722488c3239f0d2c14609 906bf8c8e7769a1052196bc78947b655158dd3b2903fef2802e2031cffbc1d78 -test/extractor-tests/generated/SelfParam/SelfParam.ql 61977791634b816d79507478a0be913befc843257fea1d6c564de58ff6d22cce 3e33365f58f59f61e0d190f1bfb101d5fc8f086d24322a7ca464e2a397b90110 +test/extractor-tests/generated/SelfParam/SelfParam.ql d051c7a2dd88382e37895f1d691f2702aed7f925d3936f51d49949463e4757c8 37f1f429093be7923a55f8b4f46b37bbf71d0dff3843c4d3686383c2863dee1a test/extractor-tests/generated/SelfParam/SelfParam_getAttr.ql 00dd5409c07e9a7b5dc51c1444e24b35d2ac3cab11320396ef70f531a3b65dc0 effbed79ad530a835e85b931389a0c8609a10ee035cb694f2e39b8539f8e54ba test/extractor-tests/generated/SelfParam/SelfParam_getLifetime.ql 0b7c243f609e005dd63fd1b3b9f0096fc13cb98fe113e6f3fefb0d5c414e9a5f f6e06de8bcddfc9bd978c058079e53174edbe7b39f18df3c0bd4e80486808eda test/extractor-tests/generated/SelfParam/SelfParam_getName.ql 69207a57b415ba590e50003d506a64fd1780b27b8832b14f9bd3c909bddb5593 56fa28ba1222f45893237052fa5a9421d960e14fbf1396b2d1049b440c2e5abe @@ -974,7 +974,7 @@ test/extractor-tests/generated/SliceType/SliceType_getTy.ql 0bc70c0e60fc3552584b test/extractor-tests/generated/SourceFile/SourceFile.ql c30a3c2c82be3114f3857295615e2ec1e59c823f0b65ea3918be85e6b7adb921 6a5bbe96f81861c953eb89f77ea64d580f996dca5950f717dd257a0b795453e6 test/extractor-tests/generated/SourceFile/SourceFile_getAttr.ql 450404306b3d991b23c60a7bb354631d37925e74dec7cc795452fe3263dc2358 07ffcc91523fd029bd599be28fe2fc909917e22f2b95c4257d3605f54f9d7551 test/extractor-tests/generated/SourceFile/SourceFile_getItem.ql f17e44bc0c829b2aadcb6d4ab9c687c10dc8f1afbed4e5190404e574d6ab3107 1cf49a37cc32a67fdc00d16b520daf39143e1b27205c1a610e24d2fe1a464b95 -test/extractor-tests/generated/Static/Static.ql 0a704360ff0075d90b0ab68e447892728036b55dd62ac87aba162155a920bfc2 1004434e09a18db400e57e1901555cfc20e7be743d4ec5a07beab5e163822f30 +test/extractor-tests/generated/Static/Static.ql 605b1c3b5664db0c8738c4159af0958a3d73ee4a180a8e022c1ef6b214d3d26f eb351abb9d55816b9d05c3849913074faf272a8ff267919a3d98d23ae67c7b5b test/extractor-tests/generated/Static/Static_getAttr.ql adb0bbf55fb962c0e9d317fd815c09c88793c04f2fb78dfd62c259420c70bc68 d317429171c69c4d5d926c26e97b47f5df87cf0552338f575cd3aeea0e57d2c2 test/extractor-tests/generated/Static/Static_getBody.ql e735bbd421e22c67db792671f5cb78291c437621fdfd700e5ef13b5b76b3684d 9148dc9d1899cedf817258a30a274e4f2c34659140090ca2afeb1b6f2f21e52f test/extractor-tests/generated/Static/Static_getName.ql c7537e166d994b6f961547e8b97ab4328b78cbd038a0eb9afaae42e35f6d9cb4 bb5ae24b85cd7a8340a4ce9e9d56ec3be31558051c82257ccb84289291f38a42 @@ -992,7 +992,7 @@ test/extractor-tests/generated/Struct/Struct_getName.ql 8f1d9da4013307b4d23a1ce5 test/extractor-tests/generated/Struct/Struct_getVisibility.ql 17139d3f91e02a0fc12ad8443fe166fe11003301fee0c303f13aa6d1138e82d5 07bdc1fbcc0ea40508364ea632fce899cbe734159f5c377ea2029bc41bc9a3b4 test/extractor-tests/generated/Struct/Struct_getWhereClause.ql d0db2c9811ed4568359e84255f04f0c75ae65a80d40981a1545d6cddf53e9c09 1133a46bc502757aaab61a8ac94b4a256b590548c5e27ec6a239ffd5a4a81577 test/extractor-tests/generated/TokenTree/TokenTree.ql ba2ef197e0566640b57503579f3bc811a16fec56f4817117395bf81da08922a6 2e7b105cb917a444171669eb06f5491a4b222b1f81fa79209a138ab97db85aff -test/extractor-tests/generated/Trait/Trait.ql a51ba80b65687fb6eb99f36e4f98565b4a9ed9cc97d2c7ad2f09254ec9089b3d 81783aedb5af5a09f470ec0df6694588a4dcf8390b1b1645fb7459d35bc1bc3e +test/extractor-tests/generated/Trait/Trait.ql a80249a821a91e11592227126209090ce5ced83a6168136f7c53db61b5bc3914 4555281baf4d9f736a68d28c6c7b788b913933a38503a323783d57db9e8c5c02 test/extractor-tests/generated/Trait/Trait_getAssocItemList.ql 05e6896f60afabf931a244e42f75ee55e09c749954a751d8895846de3121f58f def1f07d9945e8d9b45a659a285b0eb72b37509d20624c88e0a2d34abf7f0c72 test/extractor-tests/generated/Trait/Trait_getAttr.ql 9711125fa4fc0212b6357f06d1bc50df50b46168d139b649034296c64d732e21 901b6a9d04055b563f13d8742bd770c76ed1b2ccf9a7236a64de9d6d287fbd52 test/extractor-tests/generated/Trait/Trait_getGenericParamList.ql b27ff28e3aff9ec3369bbbcbee40a07a4bd8af40928c8c1cb7dd1e407a88ffee 2b48e2049df18de61ae3026f8ab4c3e9e517f411605328b37a0b71b288826925 @@ -1026,7 +1026,7 @@ test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.ql f3f2e23 test/extractor-tests/generated/TupleStructPat/TupleStructPat_getPath.ql 13a06696bbf1fa8d5b73107e28cdba40e93da04b27f9c54381b78a52368d2ad1 5558c35ea9bb371ad90a5b374d7530dd1936f83e6ba656ebfbfd5bd63598e088 test/extractor-tests/generated/TupleType/TupleType.ql e5951a30817b8c51fe9cb9435f75bfdca2a1277b2094267d3205e33ef1ee9a9c 9a4d57322ed2cff57057654272981b056f833136f983141b033afaf64e19c117 test/extractor-tests/generated/TupleType/TupleType_getField.ql b73a8cdaf6ba46cf9b63d8819239d2d2c06b3496ed4768e8a387a7558178fbd8 6efbcf13c25d0ff3ed0c6d194ba44d2abfa620406badef8184953395fab92bb4 -test/extractor-tests/generated/TypeAlias/TypeAlias.ql be2f90fb1bab4f8b77687f93f0fb7180582a0a3b3bb1a5e9fb77d55c12b01048 7fb298034353d13193e6b2fbb95b2cb2f7fa11c9eff7bd10bd7180f02267883f +test/extractor-tests/generated/TypeAlias/TypeAlias.ql 8fc7144467f3be85ffcc661630cc144a244b636220aca69f1074f8b7221eb32f 692417975c0062d4d324e8a4b5c4a95bc352bfbab03664f671240739d1ddfcfc test/extractor-tests/generated/TypeAlias/TypeAlias_getAttr.ql ecf4b45ef4876e46252785d2e42b11207e65757cdb26e60decafd765e7b03b49 21bb4d635d3d38abd731b9ad1a2b871f8e0788f48a03e9572823abeea0ea9382 test/extractor-tests/generated/TypeAlias/TypeAlias_getGenericParamList.ql e7e936458dce5a8c6675485a49e2769b6dbff29c112ed744c880e0fc7ae740ef e5fcf3a33d2416db6b0a73401a3cbc0cece22d0e06794e01a1645f2b3bca9306 test/extractor-tests/generated/TypeAlias/TypeAlias_getName.ql 757deb3493764677de3eb1ff7cc119a469482b7277ed01eb8aa0c38b4a8797fb 5efed24a6968544b10ff44bfac7d0432a9621bde0e53b8477563d600d4847825 @@ -1036,7 +1036,7 @@ test/extractor-tests/generated/TypeAlias/TypeAlias_getVisibility.ql a1851a78f31a test/extractor-tests/generated/TypeAlias/TypeAlias_getWhereClause.ql 0cd281b7b5d3a76e4ec1938d7dcebb41e24ed54e94f352dcf48cbcdb5d48b353 5898e71246d8ba7517dab1f8d726af02a7add79924c8e6b30ce2c760e1344e8f test/extractor-tests/generated/TypeArg/TypeArg.ql 8019f0eb5a64162df88e7e64ba0355578dad158b884c8eb42b2f10e093e52121 4871ac369925228978a1e16cf1393a449ea846657893d8a760fb46dbd6a0d609 test/extractor-tests/generated/TypeArg/TypeArg_getTy.ql 54c291039d88fb460b0bc6bb83938c3be272898512415d08abffea714a000275 3117f1bbc1168b0ff75948459673c50971e3e71b0bb966783a8dc44328803f33 -test/extractor-tests/generated/TypeBound/TypeBound.ql 8824b2133040a1c39ed74d3b90669e4d8859a9dd52090e3fd71fe0d8ef90c7f0 932a0361678a16c7f538d5ee9133a61c495234de323e1e012f0ae307c8d2170e +test/extractor-tests/generated/TypeBound/TypeBound.ql f49bc5b12f9817d9464c771bd35837c1ae6c8b3162ab6b0fc9b3e6748d18e87a 2535af71fa8e212d6f9b9e10ca0ba7958808dea4d1af432e1d5167a681d7779c test/extractor-tests/generated/TypeBound/TypeBound_getGenericParamList.ql 7cf4ce64ea8048b85733fc2de627480465a616d62f57345c25bb62fdfda0ca59 e63b77ed3555b150cebf205016b1cc8d1b10fda315d5a21b3e60753ad602ea8f test/extractor-tests/generated/TypeBound/TypeBound_getLifetime.ql 615b0f5ccbffc425a3fa9480197bfae649c072717697f59d2e9b8112d2ff3fcf 1f969aca15be820eb27fe80317ad7fd4ce60f1a0fbcb4ae98b04828b0aeca632 test/extractor-tests/generated/TypeBound/TypeBound_getTy.ql bded40be75f99b97869e5b4701a479db91867a861fb9f2071f4f7df0980ac6a2 6bdb30e50ba3ab7c2976aa602bae54a089019c8b81cab497c962b6b96362fbab diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/BlockExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/BlockExpr.qll index 7627172ee83c..c4f11fdd90c5 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/BlockExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/BlockExpr.qll @@ -53,6 +53,36 @@ module Generated { */ final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } + /** + * Holds if this block expression is async. + */ + predicate isAsync() { Synth::convertBlockExprToRaw(this).(Raw::BlockExpr).isAsync() } + + /** + * Holds if this block expression is const. + */ + predicate isConst() { Synth::convertBlockExprToRaw(this).(Raw::BlockExpr).isConst() } + + /** + * Holds if this block expression is gen. + */ + predicate isGen() { Synth::convertBlockExprToRaw(this).(Raw::BlockExpr).isGen() } + + /** + * Holds if this block expression is move. + */ + predicate isMove() { Synth::convertBlockExprToRaw(this).(Raw::BlockExpr).isMove() } + + /** + * Holds if this block expression is try. + */ + predicate isTry() { Synth::convertBlockExprToRaw(this).(Raw::BlockExpr).isTry() } + + /** + * Holds if this block expression is unsafe. + */ + predicate isUnsafe() { Synth::convertBlockExprToRaw(this).(Raw::BlockExpr).isUnsafe() } + /** * Gets the label of this block expression, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ClosureExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ClosureExpr.qll index 54a703414710..6538501d9a26 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ClosureExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ClosureExpr.qll @@ -83,6 +83,31 @@ module Generated { */ final predicate hasClosureBinder() { exists(this.getClosureBinder()) } + /** + * Holds if this closure expression is async. + */ + predicate isAsync() { Synth::convertClosureExprToRaw(this).(Raw::ClosureExpr).isAsync() } + + /** + * Holds if this closure expression is const. + */ + predicate isConst() { Synth::convertClosureExprToRaw(this).(Raw::ClosureExpr).isConst() } + + /** + * Holds if this closure expression is gen. + */ + predicate isGen() { Synth::convertClosureExprToRaw(this).(Raw::ClosureExpr).isGen() } + + /** + * Holds if this closure expression is move. + */ + predicate isMove() { Synth::convertClosureExprToRaw(this).(Raw::ClosureExpr).isMove() } + + /** + * Holds if this closure expression is static. + */ + predicate isStatic() { Synth::convertClosureExprToRaw(this).(Raw::ClosureExpr).isStatic() } + /** * Gets the parameter list of this closure expression, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Const.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Const.qll index 37c3b55204db..a9b1932a935b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Const.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Const.qll @@ -59,6 +59,16 @@ module Generated { */ final predicate hasBody() { exists(this.getBody()) } + /** + * Holds if this const is const. + */ + predicate isConst() { Synth::convertConstToRaw(this).(Raw::Const).isConst() } + + /** + * Holds if this const is default. + */ + predicate isDefault() { Synth::convertConstToRaw(this).(Raw::Const).isDefault() } + /** * Gets the name of this const, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ConstBlockPat.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ConstBlockPat.qll index 81e0319919ab..2935c7c8f85b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ConstBlockPat.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ConstBlockPat.qll @@ -42,5 +42,10 @@ module Generated { * Holds if `getBlockExpr()` exists. */ final predicate hasBlockExpr() { exists(this.getBlockExpr()) } + + /** + * Holds if this const block pat is const. + */ + predicate isConst() { Synth::convertConstBlockPatToRaw(this).(Raw::ConstBlockPat).isConst() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ConstParam.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ConstParam.qll index c4f6cfa022da..451234d3dc1b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ConstParam.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ConstParam.qll @@ -63,6 +63,11 @@ module Generated { */ final predicate hasDefaultVal() { exists(this.getDefaultVal()) } + /** + * Holds if this const parameter is const. + */ + predicate isConst() { Synth::convertConstParamToRaw(this).(Raw::ConstParam).isConst() } + /** * Gets the name of this const parameter, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ExternBlock.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ExternBlock.qll index f259e509c1e4..823bf4173c4b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ExternBlock.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ExternBlock.qll @@ -74,5 +74,10 @@ module Generated { * Holds if `getExternItemList()` exists. */ final predicate hasExternItemList() { exists(this.getExternItemList()) } + + /** + * Holds if this extern block is unsafe. + */ + predicate isUnsafe() { Synth::convertExternBlockToRaw(this).(Raw::ExternBlock).isUnsafe() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/FnPtrType.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/FnPtrType.qll index 4f8f2feb07c7..8296c401fa85 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/FnPtrType.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/FnPtrType.qll @@ -40,6 +40,21 @@ module Generated { */ final predicate hasAbi() { exists(this.getAbi()) } + /** + * Holds if this fn ptr type is async. + */ + predicate isAsync() { Synth::convertFnPtrTypeToRaw(this).(Raw::FnPtrType).isAsync() } + + /** + * Holds if this fn ptr type is const. + */ + predicate isConst() { Synth::convertFnPtrTypeToRaw(this).(Raw::FnPtrType).isConst() } + + /** + * Holds if this fn ptr type is unsafe. + */ + predicate isUnsafe() { Synth::convertFnPtrTypeToRaw(this).(Raw::FnPtrType).isUnsafe() } + /** * Gets the parameter list of this fn ptr type, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Function.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Function.qll index 82bfe1df7dfe..4c4513d9e33b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Function.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Function.qll @@ -101,6 +101,31 @@ module Generated { */ final predicate hasGenericParamList() { exists(this.getGenericParamList()) } + /** + * Holds if this function is async. + */ + predicate isAsync() { Synth::convertFunctionToRaw(this).(Raw::Function).isAsync() } + + /** + * Holds if this function is const. + */ + predicate isConst() { Synth::convertFunctionToRaw(this).(Raw::Function).isConst() } + + /** + * Holds if this function is default. + */ + predicate isDefault() { Synth::convertFunctionToRaw(this).(Raw::Function).isDefault() } + + /** + * Holds if this function is gen. + */ + predicate isGen() { Synth::convertFunctionToRaw(this).(Raw::Function).isGen() } + + /** + * Holds if this function is unsafe. + */ + predicate isUnsafe() { Synth::convertFunctionToRaw(this).(Raw::Function).isUnsafe() } + /** * Gets the name of this function, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/IdentPat.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/IdentPat.qll index bf77fbc3c083..275272f06a0d 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/IdentPat.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/IdentPat.qll @@ -54,6 +54,16 @@ module Generated { */ final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } + /** + * Holds if this ident pat is mut. + */ + predicate isMut() { Synth::convertIdentPatToRaw(this).(Raw::IdentPat).isMut() } + + /** + * Holds if this ident pat is reference. + */ + predicate isRef() { Synth::convertIdentPatToRaw(this).(Raw::IdentPat).isRef() } + /** * Gets the name of this ident pat, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Impl.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Impl.qll index 1b99ed4745b1..14ec8ee38630 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Impl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Impl.qll @@ -77,6 +77,21 @@ module Generated { */ final predicate hasGenericParamList() { exists(this.getGenericParamList()) } + /** + * Holds if this impl is const. + */ + predicate isConst() { Synth::convertImplToRaw(this).(Raw::Impl).isConst() } + + /** + * Holds if this impl is default. + */ + predicate isDefault() { Synth::convertImplToRaw(this).(Raw::Impl).isDefault() } + + /** + * Holds if this impl is unsafe. + */ + predicate isUnsafe() { Synth::convertImplToRaw(this).(Raw::Impl).isUnsafe() } + /** * Gets the self ty of this impl, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Meta.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Meta.qll index 146c08a9b1e6..9f4252af3090 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Meta.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Meta.qll @@ -39,6 +39,11 @@ module Generated { */ final predicate hasExpr() { exists(this.getExpr()) } + /** + * Holds if this meta is unsafe. + */ + predicate isUnsafe() { Synth::convertMetaToRaw(this).(Raw::Meta).isUnsafe() } + /** * Gets the path of this meta, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/PtrType.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/PtrType.qll index 47f438002db3..598052d09d5f 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/PtrType.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/PtrType.qll @@ -25,6 +25,16 @@ module Generated { class PtrType extends Synth::TPtrType, TypeRefImpl::TypeRef { override string getAPrimaryQlClass() { result = "PtrType" } + /** + * Holds if this ptr type is const. + */ + predicate isConst() { Synth::convertPtrTypeToRaw(this).(Raw::PtrType).isConst() } + + /** + * Holds if this ptr type is mut. + */ + predicate isMut() { Synth::convertPtrTypeToRaw(this).(Raw::PtrType).isMut() } + /** * Gets the ty of this ptr type, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index 4726ec0fd391..26330df68311 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -421,6 +421,11 @@ module Raw { */ Expr getExpr() { meta_exprs(this, result) } + /** + * Holds if this meta is unsafe. + */ + predicate isUnsafe() { meta_is_unsafe(this) } + /** * Gets the path of this meta, if it exists. */ @@ -772,6 +777,11 @@ module Raw { */ Attr getAttr(int index) { self_param_attrs(this, index, result) } + /** + * Holds if this self parameter is mut. + */ + predicate isMut() { self_param_is_mut(this) } + /** * Gets the lifetime of this self parameter, if it exists. */ @@ -899,6 +909,16 @@ module Raw { */ GenericParamList getGenericParamList() { type_bound_generic_param_lists(this, result) } + /** + * Holds if this type bound is async. + */ + predicate isAsync() { type_bound_is_async(this) } + + /** + * Holds if this type bound is const. + */ + predicate isConst() { type_bound_is_const(this) } + /** * Gets the lifetime of this type bound, if it exists. */ @@ -1320,6 +1340,36 @@ module Raw { */ Attr getAttr(int index) { block_expr_attrs(this, index, result) } + /** + * Holds if this block expression is async. + */ + predicate isAsync() { block_expr_is_async(this) } + + /** + * Holds if this block expression is const. + */ + predicate isConst() { block_expr_is_const(this) } + + /** + * Holds if this block expression is gen. + */ + predicate isGen() { block_expr_is_gen(this) } + + /** + * Holds if this block expression is move. + */ + predicate isMove() { block_expr_is_move(this) } + + /** + * Holds if this block expression is try. + */ + predicate isTry() { block_expr_is_try(this) } + + /** + * Holds if this block expression is unsafe. + */ + predicate isUnsafe() { block_expr_is_unsafe(this) } + /** * Gets the label of this block expression, if it exists. */ @@ -1481,6 +1531,31 @@ module Raw { */ ClosureBinder getClosureBinder() { closure_expr_closure_binders(this, result) } + /** + * Holds if this closure expression is async. + */ + predicate isAsync() { closure_expr_is_async(this) } + + /** + * Holds if this closure expression is const. + */ + predicate isConst() { closure_expr_is_const(this) } + + /** + * Holds if this closure expression is gen. + */ + predicate isGen() { closure_expr_is_gen(this) } + + /** + * Holds if this closure expression is move. + */ + predicate isMove() { closure_expr_is_move(this) } + + /** + * Holds if this closure expression is static. + */ + predicate isStatic() { closure_expr_is_static(this) } + /** * Gets the parameter list of this closure expression, if it exists. */ @@ -1547,6 +1622,11 @@ module Raw { * Gets the block expression of this const block pat, if it exists. */ BlockExpr getBlockExpr() { const_block_pat_block_exprs(this, result) } + + /** + * Holds if this const block pat is const. + */ + predicate isConst() { const_block_pat_is_const(this) } } /** @@ -1569,6 +1649,11 @@ module Raw { */ ConstArg getDefaultVal() { const_param_default_vals(this, result) } + /** + * Holds if this const parameter is const. + */ + predicate isConst() { const_param_is_const(this) } + /** * Gets the name of this const parameter, if it exists. */ @@ -1687,6 +1772,21 @@ module Raw { */ Abi getAbi() { fn_ptr_type_abis(this, result) } + /** + * Holds if this fn ptr type is async. + */ + predicate isAsync() { fn_ptr_type_is_async(this) } + + /** + * Holds if this fn ptr type is const. + */ + predicate isConst() { fn_ptr_type_is_const(this) } + + /** + * Holds if this fn ptr type is unsafe. + */ + predicate isUnsafe() { fn_ptr_type_is_unsafe(this) } + /** * Gets the parameter list of this fn ptr type, if it exists. */ @@ -1805,6 +1905,16 @@ module Raw { */ Attr getAttr(int index) { ident_pat_attrs(this, index, result) } + /** + * Holds if this ident pat is mut. + */ + predicate isMut() { ident_pat_is_mut(this) } + + /** + * Holds if this ident pat is reference. + */ + predicate isRef() { ident_pat_is_ref(this) } + /** * Gets the name of this ident pat, if it exists. */ @@ -2448,6 +2558,16 @@ module Raw { class PtrType extends @ptr_type, TypeRef { override string toString() { result = "PtrType" } + /** + * Holds if this ptr type is const. + */ + predicate isConst() { ptr_type_is_const(this) } + + /** + * Holds if this ptr type is mut. + */ + predicate isMut() { ptr_type_is_mut(this) } + /** * Gets the ty of this ptr type, if it exists. */ @@ -2608,6 +2728,21 @@ module Raw { * Gets the expression of this reference expression, if it exists. */ Expr getExpr() { ref_expr_exprs(this, result) } + + /** + * Holds if this reference expression is const. + */ + predicate isConst() { ref_expr_is_const(this) } + + /** + * Holds if this reference expression is mut. + */ + predicate isMut() { ref_expr_is_mut(this) } + + /** + * Holds if this reference expression is raw. + */ + predicate isRaw() { ref_expr_is_raw(this) } } /** @@ -2623,6 +2758,11 @@ module Raw { class RefPat extends @ref_pat, Pat { override string toString() { result = "RefPat" } + /** + * Holds if this reference pat is mut. + */ + predicate isMut() { ref_pat_is_mut(this) } + /** * Gets the pat of this reference pat, if it exists. */ @@ -2639,6 +2779,11 @@ module Raw { class RefType extends @ref_type, TypeRef { override string toString() { result = "RefType" } + /** + * Holds if this reference type is mut. + */ + predicate isMut() { ref_type_is_mut(this) } + /** * Gets the lifetime of this reference type, if it exists. */ @@ -3019,6 +3164,16 @@ module Raw { */ Expr getBody() { const_bodies(this, result) } + /** + * Holds if this const is const. + */ + predicate isConst() { const_is_const(this) } + + /** + * Holds if this const is default. + */ + predicate isDefault() { const_is_default(this) } + /** * Gets the name of this const, if it exists. */ @@ -3100,6 +3255,11 @@ module Raw { * Gets the extern item list of this extern block, if it exists. */ ExternItemList getExternItemList() { extern_block_extern_item_lists(this, result) } + + /** + * Holds if this extern block is unsafe. + */ + predicate isUnsafe() { extern_block_is_unsafe(this) } } /** @@ -3169,6 +3329,31 @@ module Raw { */ GenericParamList getGenericParamList() { function_generic_param_lists(this, result) } + /** + * Holds if this function is async. + */ + predicate isAsync() { function_is_async(this) } + + /** + * Holds if this function is const. + */ + predicate isConst() { function_is_const(this) } + + /** + * Holds if this function is default. + */ + predicate isDefault() { function_is_default(this) } + + /** + * Holds if this function is gen. + */ + predicate isGen() { function_is_gen(this) } + + /** + * Holds if this function is unsafe. + */ + predicate isUnsafe() { function_is_unsafe(this) } + /** * Gets the name of this function, if it exists. */ @@ -3220,6 +3405,21 @@ module Raw { */ GenericParamList getGenericParamList() { impl_generic_param_lists(this, result) } + /** + * Holds if this impl is const. + */ + predicate isConst() { impl_is_const(this) } + + /** + * Holds if this impl is default. + */ + predicate isDefault() { impl_is_default(this) } + + /** + * Holds if this impl is unsafe. + */ + predicate isUnsafe() { impl_is_unsafe(this) } + /** * Gets the self ty of this impl, if it exists. */ @@ -3390,6 +3590,16 @@ module Raw { */ Expr getBody() { static_bodies(this, result) } + /** + * Holds if this static is mut. + */ + predicate isMut() { static_is_mut(this) } + + /** + * Holds if this static is static. + */ + predicate isStatic() { static_is_static(this) } + /** * Gets the name of this static, if it exists. */ @@ -3472,6 +3682,16 @@ module Raw { */ GenericParamList getGenericParamList() { trait_generic_param_lists(this, result) } + /** + * Holds if this trait is auto. + */ + predicate isAuto() { trait_is_auto(this) } + + /** + * Holds if this trait is unsafe. + */ + predicate isUnsafe() { trait_is_unsafe(this) } + /** * Gets the name of this trait, if it exists. */ @@ -3554,6 +3774,11 @@ module Raw { */ GenericParamList getGenericParamList() { type_alias_generic_param_lists(this, result) } + /** + * Holds if this type alias is default. + */ + predicate isDefault() { type_alias_is_default(this) } + /** * Gets the name of this type alias, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/RefExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/RefExpr.qll index 90572fcf99ee..4eef67e3ed17 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/RefExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/RefExpr.qll @@ -58,5 +58,20 @@ module Generated { * Holds if `getExpr()` exists. */ final predicate hasExpr() { exists(this.getExpr()) } + + /** + * Holds if this reference expression is const. + */ + predicate isConst() { Synth::convertRefExprToRaw(this).(Raw::RefExpr).isConst() } + + /** + * Holds if this reference expression is mut. + */ + predicate isMut() { Synth::convertRefExprToRaw(this).(Raw::RefExpr).isMut() } + + /** + * Holds if this reference expression is raw. + */ + predicate isRaw() { Synth::convertRefExprToRaw(this).(Raw::RefExpr).isRaw() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/RefPat.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/RefPat.qll index c16c87405c20..197030ea1cbf 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/RefPat.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/RefPat.qll @@ -28,6 +28,11 @@ module Generated { class RefPat extends Synth::TRefPat, PatImpl::Pat { override string getAPrimaryQlClass() { result = "RefPat" } + /** + * Holds if this reference pat is mut. + */ + predicate isMut() { Synth::convertRefPatToRaw(this).(Raw::RefPat).isMut() } + /** * Gets the pat of this reference pat, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/RefType.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/RefType.qll index 2d3df19798c1..ce0bbf1e416e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/RefType.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/RefType.qll @@ -26,6 +26,11 @@ module Generated { class RefType extends Synth::TRefType, TypeRefImpl::TypeRef { override string getAPrimaryQlClass() { result = "RefType" } + /** + * Holds if this reference type is mut. + */ + predicate isMut() { Synth::convertRefTypeToRaw(this).(Raw::RefType).isMut() } + /** * Gets the lifetime of this reference type, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/SelfParam.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/SelfParam.qll index 24bf5433361f..243d04e9bb77 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/SelfParam.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/SelfParam.qll @@ -46,6 +46,11 @@ module Generated { */ final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } + /** + * Holds if this self parameter is mut. + */ + predicate isMut() { Synth::convertSelfParamToRaw(this).(Raw::SelfParam).isMut() } + /** * Gets the lifetime of this self parameter, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Static.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Static.qll index 6fbe692fb28d..a7d5828ee980 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Static.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Static.qll @@ -60,6 +60,16 @@ module Generated { */ final predicate hasBody() { exists(this.getBody()) } + /** + * Holds if this static is mut. + */ + predicate isMut() { Synth::convertStaticToRaw(this).(Raw::Static).isMut() } + + /** + * Holds if this static is static. + */ + predicate isStatic() { Synth::convertStaticToRaw(this).(Raw::Static).isStatic() } + /** * Gets the name of this static, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Trait.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Trait.qll index 88cea87c5b5a..acbcb1e2e24b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Trait.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Trait.qll @@ -78,6 +78,16 @@ module Generated { */ final predicate hasGenericParamList() { exists(this.getGenericParamList()) } + /** + * Holds if this trait is auto. + */ + predicate isAuto() { Synth::convertTraitToRaw(this).(Raw::Trait).isAuto() } + + /** + * Holds if this trait is unsafe. + */ + predicate isUnsafe() { Synth::convertTraitToRaw(this).(Raw::Trait).isUnsafe() } + /** * Gets the name of this trait, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/TypeAlias.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/TypeAlias.qll index 1014900cb0a6..2f5294ef65e8 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/TypeAlias.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/TypeAlias.qll @@ -68,6 +68,11 @@ module Generated { */ final predicate hasGenericParamList() { exists(this.getGenericParamList()) } + /** + * Holds if this type alias is default. + */ + predicate isDefault() { Synth::convertTypeAliasToRaw(this).(Raw::TypeAlias).isDefault() } + /** * Gets the name of this type alias, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/TypeBound.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/TypeBound.qll index 4a571897ba71..e83586d9cdf9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/TypeBound.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/TypeBound.qll @@ -42,6 +42,16 @@ module Generated { */ final predicate hasGenericParamList() { exists(this.getGenericParamList()) } + /** + * Holds if this type bound is async. + */ + predicate isAsync() { Synth::convertTypeBoundToRaw(this).(Raw::TypeBound).isAsync() } + + /** + * Holds if this type bound is const. + */ + predicate isConst() { Synth::convertTypeBoundToRaw(this).(Raw::TypeBound).isConst() } + /** * Gets the lifetime of this type bound, if it exists. */ diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index 831141fef1dd..029fff99f4dd 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -500,6 +500,11 @@ meta_exprs( int expr: @expr ref ); +#keyset[id] +meta_is_unsafe( + int id: @meta ref +); + #keyset[id] meta_paths( int id: @meta ref, @@ -804,6 +809,11 @@ self_param_attrs( int attr: @attr ref ); +#keyset[id] +self_param_is_mut( + int id: @self_param ref +); + #keyset[id] self_param_lifetimes( int id: @self_param ref, @@ -911,6 +921,16 @@ type_bound_generic_param_lists( int generic_param_list: @generic_param_list ref ); +#keyset[id] +type_bound_is_async( + int id: @type_bound ref +); + +#keyset[id] +type_bound_is_const( + int id: @type_bound ref +); + #keyset[id] type_bound_lifetimes( int id: @type_bound ref, @@ -1256,6 +1276,36 @@ block_expr_attrs( int attr: @attr ref ); +#keyset[id] +block_expr_is_async( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_const( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_gen( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_move( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_try( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_unsafe( + int id: @block_expr ref +); + #keyset[id] block_expr_labels( int id: @block_expr ref, @@ -1370,6 +1420,31 @@ closure_expr_closure_binders( int closure_binder: @closure_binder ref ); +#keyset[id] +closure_expr_is_async( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_const( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_gen( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_move( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_static( + int id: @closure_expr ref +); + #keyset[id] closure_expr_param_lists( int id: @closure_expr ref, @@ -1408,6 +1483,11 @@ const_block_pat_block_exprs( int block_expr: @block_expr ref ); +#keyset[id] +const_block_pat_is_const( + int id: @const_block_pat ref +); + const_params( unique int id: @const_param ); @@ -1425,6 +1505,11 @@ const_param_default_vals( int default_val: @const_arg ref ); +#keyset[id] +const_param_is_const( + int id: @const_param ref +); + #keyset[id] const_param_names( int id: @const_param ref, @@ -1507,6 +1592,21 @@ fn_ptr_type_abis( int abi: @abi ref ); +#keyset[id] +fn_ptr_type_is_async( + int id: @fn_ptr_type ref +); + +#keyset[id] +fn_ptr_type_is_const( + int id: @fn_ptr_type ref +); + +#keyset[id] +fn_ptr_type_is_unsafe( + int id: @fn_ptr_type ref +); + #keyset[id] fn_ptr_type_param_lists( int id: @fn_ptr_type ref, @@ -1605,6 +1705,16 @@ ident_pat_attrs( int attr: @attr ref ); +#keyset[id] +ident_pat_is_mut( + int id: @ident_pat ref +); + +#keyset[id] +ident_pat_is_ref( + int id: @ident_pat ref +); + #keyset[id] ident_pat_names( int id: @ident_pat ref, @@ -2072,6 +2182,16 @@ ptr_types( unique int id: @ptr_type ); +#keyset[id] +ptr_type_is_const( + int id: @ptr_type ref +); + +#keyset[id] +ptr_type_is_mut( + int id: @ptr_type ref +); + #keyset[id] ptr_type_ties( int id: @ptr_type ref, @@ -2189,10 +2309,30 @@ ref_expr_exprs( int expr: @expr ref ); +#keyset[id] +ref_expr_is_const( + int id: @ref_expr ref +); + +#keyset[id] +ref_expr_is_mut( + int id: @ref_expr ref +); + +#keyset[id] +ref_expr_is_raw( + int id: @ref_expr ref +); + ref_pats( unique int id: @ref_pat ); +#keyset[id] +ref_pat_is_mut( + int id: @ref_pat ref +); + #keyset[id] ref_pat_pats( int id: @ref_pat ref, @@ -2203,6 +2343,11 @@ ref_types( unique int id: @ref_type ); +#keyset[id] +ref_type_is_mut( + int id: @ref_type ref +); + #keyset[id] ref_type_lifetimes( int id: @ref_type ref, @@ -2483,6 +2628,16 @@ const_bodies( int body: @expr ref ); +#keyset[id] +const_is_const( + int id: @const ref +); + +#keyset[id] +const_is_default( + int id: @const ref +); + #keyset[id] const_names( int id: @const ref, @@ -2565,6 +2720,11 @@ extern_block_extern_item_lists( int extern_item_list: @extern_item_list ref ); +#keyset[id] +extern_block_is_unsafe( + int id: @extern_block ref +); + extern_crates( unique int id: @extern_crate ); @@ -2623,6 +2783,31 @@ function_generic_param_lists( int generic_param_list: @generic_param_list ref ); +#keyset[id] +function_is_async( + int id: @function ref +); + +#keyset[id] +function_is_const( + int id: @function ref +); + +#keyset[id] +function_is_default( + int id: @function ref +); + +#keyset[id] +function_is_gen( + int id: @function ref +); + +#keyset[id] +function_is_unsafe( + int id: @function ref +); + #keyset[id] function_names( int id: @function ref, @@ -2676,6 +2861,21 @@ impl_generic_param_lists( int generic_param_list: @generic_param_list ref ); +#keyset[id] +impl_is_const( + int id: @impl ref +); + +#keyset[id] +impl_is_default( + int id: @impl ref +); + +#keyset[id] +impl_is_unsafe( + int id: @impl ref +); + #keyset[id] impl_self_ties( int id: @impl ref, @@ -2833,6 +3033,16 @@ static_bodies( int body: @expr ref ); +#keyset[id] +static_is_mut( + int id: @static ref +); + +#keyset[id] +static_is_static( + int id: @static ref +); + #keyset[id] static_names( int id: @static ref, @@ -2915,6 +3125,16 @@ trait_generic_param_lists( int generic_param_list: @generic_param_list ref ); +#keyset[id] +trait_is_auto( + int id: @trait ref +); + +#keyset[id] +trait_is_unsafe( + int id: @trait ref +); + #keyset[id] trait_names( int id: @trait ref, @@ -2997,6 +3217,11 @@ type_alias_generic_param_lists( int generic_param_list: @generic_param_list ref ); +#keyset[id] +type_alias_is_default( + int id: @type_alias ref +); + #keyset[id] type_alias_names( int id: @type_alias ref, diff --git a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.ql b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.ql index 7748f7d14135..581070545155 100644 --- a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.ql +++ b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.ql @@ -2,11 +2,21 @@ import codeql.rust.elements import TestUtils -from BlockExpr x, int getNumberOfAttrs, string hasLabel, string hasStmtList +from + BlockExpr x, int getNumberOfAttrs, string isAsync, string isConst, string isGen, string isMove, + string isTry, string isUnsafe, string hasLabel, string hasStmtList where toBeTested(x) and not x.isUnknown() and getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.isAsync() then isAsync = "yes" else isAsync = "no") and + (if x.isConst() then isConst = "yes" else isConst = "no") and + (if x.isGen() then isGen = "yes" else isGen = "no") and + (if x.isMove() then isMove = "yes" else isMove = "no") and + (if x.isTry() then isTry = "yes" else isTry = "no") and + (if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no") and (if x.hasLabel() then hasLabel = "yes" else hasLabel = "no") and if x.hasStmtList() then hasStmtList = "yes" else hasStmtList = "no" -select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasLabel:", hasLabel, "hasStmtList:", hasStmtList +select x, "getNumberOfAttrs:", getNumberOfAttrs, "isAsync:", isAsync, "isConst:", isConst, "isGen:", + isGen, "isMove:", isMove, "isTry:", isTry, "isUnsafe:", isUnsafe, "hasLabel:", hasLabel, + "hasStmtList:", hasStmtList diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql index 5fabed2d7da4..f55b0c78d22a 100644 --- a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql @@ -3,7 +3,8 @@ import codeql.rust.elements import TestUtils from - ClosureExpr x, int getNumberOfAttrs, string hasBody, string hasClosureBinder, string hasParamList, + ClosureExpr x, int getNumberOfAttrs, string hasBody, string hasClosureBinder, string isAsync, + string isConst, string isGen, string isMove, string isStatic, string hasParamList, string hasRetType where toBeTested(x) and @@ -11,7 +12,13 @@ where getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasBody() then hasBody = "yes" else hasBody = "no") and (if x.hasClosureBinder() then hasClosureBinder = "yes" else hasClosureBinder = "no") and + (if x.isAsync() then isAsync = "yes" else isAsync = "no") and + (if x.isConst() then isConst = "yes" else isConst = "no") and + (if x.isGen() then isGen = "yes" else isGen = "no") and + (if x.isMove() then isMove = "yes" else isMove = "no") and + (if x.isStatic() then isStatic = "yes" else isStatic = "no") and (if x.hasParamList() then hasParamList = "yes" else hasParamList = "no") and if x.hasRetType() then hasRetType = "yes" else hasRetType = "no" select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasBody:", hasBody, "hasClosureBinder:", - hasClosureBinder, "hasParamList:", hasParamList, "hasRetType:", hasRetType + hasClosureBinder, "isAsync:", isAsync, "isConst:", isConst, "isGen:", isGen, "isMove:", isMove, + "isStatic:", isStatic, "hasParamList:", hasParamList, "hasRetType:", hasRetType diff --git a/rust/ql/test/extractor-tests/generated/Const/Const.ql b/rust/ql/test/extractor-tests/generated/Const/Const.ql index 9af69afe4d3b..a5def567f8c2 100644 --- a/rust/ql/test/extractor-tests/generated/Const/Const.ql +++ b/rust/ql/test/extractor-tests/generated/Const/Const.ql @@ -3,14 +3,17 @@ import codeql.rust.elements import TestUtils from - Const x, int getNumberOfAttrs, string hasBody, string hasName, string hasTy, string hasVisibility + Const x, int getNumberOfAttrs, string hasBody, string isConst, string isDefault, string hasName, + string hasTy, string hasVisibility where toBeTested(x) and not x.isUnknown() and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasBody() then hasBody = "yes" else hasBody = "no") and + (if x.isConst() then isConst = "yes" else isConst = "no") and + (if x.isDefault() then isDefault = "yes" else isDefault = "no") and (if x.hasName() then hasName = "yes" else hasName = "no") and (if x.hasTy() then hasTy = "yes" else hasTy = "no") and if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" -select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasBody:", hasBody, "hasName:", hasName, "hasTy:", - hasTy, "hasVisibility:", hasVisibility +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasBody:", hasBody, "isConst:", isConst, + "isDefault:", isDefault, "hasName:", hasName, "hasTy:", hasTy, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat.ql b/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat.ql index 058f9bcae1d8..005f8a752c1f 100644 --- a/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat.ql +++ b/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat.ql @@ -2,9 +2,10 @@ import codeql.rust.elements import TestUtils -from ConstBlockPat x, string hasBlockExpr +from ConstBlockPat x, string hasBlockExpr, string isConst where toBeTested(x) and not x.isUnknown() and - if x.hasBlockExpr() then hasBlockExpr = "yes" else hasBlockExpr = "no" -select x, "hasBlockExpr:", hasBlockExpr + (if x.hasBlockExpr() then hasBlockExpr = "yes" else hasBlockExpr = "no") and + if x.isConst() then isConst = "yes" else isConst = "no" +select x, "hasBlockExpr:", hasBlockExpr, "isConst:", isConst diff --git a/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam.ql b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam.ql index 2415e1728d9c..5988a54b4d1b 100644 --- a/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam.ql +++ b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam.ql @@ -2,13 +2,16 @@ import codeql.rust.elements import TestUtils -from ConstParam x, int getNumberOfAttrs, string hasDefaultVal, string hasName, string hasTy +from + ConstParam x, int getNumberOfAttrs, string hasDefaultVal, string isConst, string hasName, + string hasTy where toBeTested(x) and not x.isUnknown() and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasDefaultVal() then hasDefaultVal = "yes" else hasDefaultVal = "no") and + (if x.isConst() then isConst = "yes" else isConst = "no") and (if x.hasName() then hasName = "yes" else hasName = "no") and if x.hasTy() then hasTy = "yes" else hasTy = "no" -select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasDefaultVal:", hasDefaultVal, "hasName:", - hasName, "hasTy:", hasTy +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasDefaultVal:", hasDefaultVal, "isConst:", + isConst, "hasName:", hasName, "hasTy:", hasTy diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.ql b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.ql index 8400769a595f..7348a546ec20 100644 --- a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.ql +++ b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.ql @@ -2,12 +2,13 @@ import codeql.rust.elements import TestUtils -from ExternBlock x, string hasAbi, int getNumberOfAttrs, string hasExternItemList +from ExternBlock x, string hasAbi, int getNumberOfAttrs, string hasExternItemList, string isUnsafe where toBeTested(x) and not x.isUnknown() and (if x.hasAbi() then hasAbi = "yes" else hasAbi = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and - if x.hasExternItemList() then hasExternItemList = "yes" else hasExternItemList = "no" + (if x.hasExternItemList() then hasExternItemList = "yes" else hasExternItemList = "no") and + if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no" select x, "hasAbi:", hasAbi, "getNumberOfAttrs:", getNumberOfAttrs, "hasExternItemList:", - hasExternItemList + hasExternItemList, "isUnsafe:", isUnsafe diff --git a/rust/ql/test/extractor-tests/generated/FnPtrType/FnPtrType.ql b/rust/ql/test/extractor-tests/generated/FnPtrType/FnPtrType.ql index b5b871c4f271..83cf90dec0a0 100644 --- a/rust/ql/test/extractor-tests/generated/FnPtrType/FnPtrType.ql +++ b/rust/ql/test/extractor-tests/generated/FnPtrType/FnPtrType.ql @@ -2,11 +2,17 @@ import codeql.rust.elements import TestUtils -from FnPtrType x, string hasAbi, string hasParamList, string hasRetType +from + FnPtrType x, string hasAbi, string isAsync, string isConst, string isUnsafe, string hasParamList, + string hasRetType where toBeTested(x) and not x.isUnknown() and (if x.hasAbi() then hasAbi = "yes" else hasAbi = "no") and + (if x.isAsync() then isAsync = "yes" else isAsync = "no") and + (if x.isConst() then isConst = "yes" else isConst = "no") and + (if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no") and (if x.hasParamList() then hasParamList = "yes" else hasParamList = "no") and if x.hasRetType() then hasRetType = "yes" else hasRetType = "no" -select x, "hasAbi:", hasAbi, "hasParamList:", hasParamList, "hasRetType:", hasRetType +select x, "hasAbi:", hasAbi, "isAsync:", isAsync, "isConst:", isConst, "isUnsafe:", isUnsafe, + "hasParamList:", hasParamList, "hasRetType:", hasRetType diff --git a/rust/ql/test/extractor-tests/generated/Function/Function.ql b/rust/ql/test/extractor-tests/generated/Function/Function.ql index 2ab5bea652ac..9f4fed07e57d 100644 --- a/rust/ql/test/extractor-tests/generated/Function/Function.ql +++ b/rust/ql/test/extractor-tests/generated/Function/Function.ql @@ -4,8 +4,8 @@ import TestUtils from Function x, string hasAbi, int getNumberOfAttrs, string hasBody, string hasGenericParamList, - string hasName, string hasParamList, string hasRetType, string hasVisibility, - string hasWhereClause + string isAsync, string isConst, string isDefault, string isGen, string isUnsafe, string hasName, + string hasParamList, string hasRetType, string hasVisibility, string hasWhereClause where toBeTested(x) and not x.isUnknown() and @@ -13,11 +13,18 @@ where getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasBody() then hasBody = "yes" else hasBody = "no") and (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no") and + (if x.isAsync() then isAsync = "yes" else isAsync = "no") and + (if x.isConst() then isConst = "yes" else isConst = "no") and + (if x.isDefault() then isDefault = "yes" else isDefault = "no") and + (if x.isGen() then isGen = "yes" else isGen = "no") and + (if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no") and (if x.hasName() then hasName = "yes" else hasName = "no") and (if x.hasParamList() then hasParamList = "yes" else hasParamList = "no") and (if x.hasRetType() then hasRetType = "yes" else hasRetType = "no") and (if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no") and if x.hasWhereClause() then hasWhereClause = "yes" else hasWhereClause = "no" select x, "hasAbi:", hasAbi, "getNumberOfAttrs:", getNumberOfAttrs, "hasBody:", hasBody, - "hasGenericParamList:", hasGenericParamList, "hasName:", hasName, "hasParamList:", hasParamList, - "hasRetType:", hasRetType, "hasVisibility:", hasVisibility, "hasWhereClause:", hasWhereClause + "hasGenericParamList:", hasGenericParamList, "isAsync:", isAsync, "isConst:", isConst, + "isDefault:", isDefault, "isGen:", isGen, "isUnsafe:", isUnsafe, "hasName:", hasName, + "hasParamList:", hasParamList, "hasRetType:", hasRetType, "hasVisibility:", hasVisibility, + "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat.ql b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat.ql index 9b7d6f141a38..3587ccff9ae5 100644 --- a/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat.ql +++ b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat.ql @@ -2,11 +2,14 @@ import codeql.rust.elements import TestUtils -from IdentPat x, int getNumberOfAttrs, string hasName, string hasPat +from IdentPat x, int getNumberOfAttrs, string isMut, string isRef, string hasName, string hasPat where toBeTested(x) and not x.isUnknown() and getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.isMut() then isMut = "yes" else isMut = "no") and + (if x.isRef() then isRef = "yes" else isRef = "no") and (if x.hasName() then hasName = "yes" else hasName = "no") and if x.hasPat() then hasPat = "yes" else hasPat = "no" -select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasName:", hasName, "hasPat:", hasPat +select x, "getNumberOfAttrs:", getNumberOfAttrs, "isMut:", isMut, "isRef:", isRef, "hasName:", + hasName, "hasPat:", hasPat diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl.ql b/rust/ql/test/extractor-tests/generated/Impl/Impl.ql index 72e934f58c61..b011141e5f7d 100644 --- a/rust/ql/test/extractor-tests/generated/Impl/Impl.ql +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl.ql @@ -3,18 +3,23 @@ import codeql.rust.elements import TestUtils from - Impl x, string hasAssocItemList, int getNumberOfAttrs, string hasGenericParamList, - string hasSelfTy, string hasTrait, string hasVisibility, string hasWhereClause + Impl x, string hasAssocItemList, int getNumberOfAttrs, string hasGenericParamList, string isConst, + string isDefault, string isUnsafe, string hasSelfTy, string hasTrait, string hasVisibility, + string hasWhereClause where toBeTested(x) and not x.isUnknown() and (if x.hasAssocItemList() then hasAssocItemList = "yes" else hasAssocItemList = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no") and + (if x.isConst() then isConst = "yes" else isConst = "no") and + (if x.isDefault() then isDefault = "yes" else isDefault = "no") and + (if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no") and (if x.hasSelfTy() then hasSelfTy = "yes" else hasSelfTy = "no") and (if x.hasTrait() then hasTrait = "yes" else hasTrait = "no") and (if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no") and if x.hasWhereClause() then hasWhereClause = "yes" else hasWhereClause = "no" select x, "hasAssocItemList:", hasAssocItemList, "getNumberOfAttrs:", getNumberOfAttrs, - "hasGenericParamList:", hasGenericParamList, "hasSelfTy:", hasSelfTy, "hasTrait:", hasTrait, - "hasVisibility:", hasVisibility, "hasWhereClause:", hasWhereClause + "hasGenericParamList:", hasGenericParamList, "isConst:", isConst, "isDefault:", isDefault, + "isUnsafe:", isUnsafe, "hasSelfTy:", hasSelfTy, "hasTrait:", hasTrait, "hasVisibility:", + hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/Meta/Meta.ql b/rust/ql/test/extractor-tests/generated/Meta/Meta.ql index 7d476131b8cd..72a0426d8098 100644 --- a/rust/ql/test/extractor-tests/generated/Meta/Meta.ql +++ b/rust/ql/test/extractor-tests/generated/Meta/Meta.ql @@ -2,11 +2,13 @@ import codeql.rust.elements import TestUtils -from Meta x, string hasExpr, string hasPath, string hasTokenTree +from Meta x, string hasExpr, string isUnsafe, string hasPath, string hasTokenTree where toBeTested(x) and not x.isUnknown() and (if x.hasExpr() then hasExpr = "yes" else hasExpr = "no") and + (if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no") and (if x.hasPath() then hasPath = "yes" else hasPath = "no") and if x.hasTokenTree() then hasTokenTree = "yes" else hasTokenTree = "no" -select x, "hasExpr:", hasExpr, "hasPath:", hasPath, "hasTokenTree:", hasTokenTree +select x, "hasExpr:", hasExpr, "isUnsafe:", isUnsafe, "hasPath:", hasPath, "hasTokenTree:", + hasTokenTree diff --git a/rust/ql/test/extractor-tests/generated/PtrType/PtrType.ql b/rust/ql/test/extractor-tests/generated/PtrType/PtrType.ql index 4b64e7c0efe4..7dc004522c78 100644 --- a/rust/ql/test/extractor-tests/generated/PtrType/PtrType.ql +++ b/rust/ql/test/extractor-tests/generated/PtrType/PtrType.ql @@ -2,9 +2,11 @@ import codeql.rust.elements import TestUtils -from PtrType x, string hasTy +from PtrType x, string isConst, string isMut, string hasTy where toBeTested(x) and not x.isUnknown() and + (if x.isConst() then isConst = "yes" else isConst = "no") and + (if x.isMut() then isMut = "yes" else isMut = "no") and if x.hasTy() then hasTy = "yes" else hasTy = "no" -select x, "hasTy:", hasTy +select x, "isConst:", isConst, "isMut:", isMut, "hasTy:", hasTy diff --git a/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.ql b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.ql index 7970aed3ebec..a2567b81ed75 100644 --- a/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.ql +++ b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.ql @@ -2,10 +2,14 @@ import codeql.rust.elements import TestUtils -from RefExpr x, int getNumberOfAttrs, string hasExpr +from RefExpr x, int getNumberOfAttrs, string hasExpr, string isConst, string isMut, string isRaw where toBeTested(x) and not x.isUnknown() and getNumberOfAttrs = x.getNumberOfAttrs() and - if x.hasExpr() then hasExpr = "yes" else hasExpr = "no" -select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasExpr:", hasExpr + (if x.hasExpr() then hasExpr = "yes" else hasExpr = "no") and + (if x.isConst() then isConst = "yes" else isConst = "no") and + (if x.isMut() then isMut = "yes" else isMut = "no") and + if x.isRaw() then isRaw = "yes" else isRaw = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasExpr:", hasExpr, "isConst:", isConst, "isMut:", + isMut, "isRaw:", isRaw diff --git a/rust/ql/test/extractor-tests/generated/RefPat/RefPat.ql b/rust/ql/test/extractor-tests/generated/RefPat/RefPat.ql index e92585faee49..4ae72433dad4 100644 --- a/rust/ql/test/extractor-tests/generated/RefPat/RefPat.ql +++ b/rust/ql/test/extractor-tests/generated/RefPat/RefPat.ql @@ -2,9 +2,10 @@ import codeql.rust.elements import TestUtils -from RefPat x, string hasPat +from RefPat x, string isMut, string hasPat where toBeTested(x) and not x.isUnknown() and + (if x.isMut() then isMut = "yes" else isMut = "no") and if x.hasPat() then hasPat = "yes" else hasPat = "no" -select x, "hasPat:", hasPat +select x, "isMut:", isMut, "hasPat:", hasPat diff --git a/rust/ql/test/extractor-tests/generated/RefType/RefType.ql b/rust/ql/test/extractor-tests/generated/RefType/RefType.ql index 63537e176306..1a0df7a0b98a 100644 --- a/rust/ql/test/extractor-tests/generated/RefType/RefType.ql +++ b/rust/ql/test/extractor-tests/generated/RefType/RefType.ql @@ -2,10 +2,11 @@ import codeql.rust.elements import TestUtils -from RefType x, string hasLifetime, string hasTy +from RefType x, string isMut, string hasLifetime, string hasTy where toBeTested(x) and not x.isUnknown() and + (if x.isMut() then isMut = "yes" else isMut = "no") and (if x.hasLifetime() then hasLifetime = "yes" else hasLifetime = "no") and if x.hasTy() then hasTy = "yes" else hasTy = "no" -select x, "hasLifetime:", hasLifetime, "hasTy:", hasTy +select x, "isMut:", isMut, "hasLifetime:", hasLifetime, "hasTy:", hasTy diff --git a/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam.ql b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam.ql index 044de94c3800..af2fa064a724 100644 --- a/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam.ql +++ b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam.ql @@ -2,13 +2,15 @@ import codeql.rust.elements import TestUtils -from SelfParam x, int getNumberOfAttrs, string hasLifetime, string hasName, string hasTy +from + SelfParam x, int getNumberOfAttrs, string isMut, string hasLifetime, string hasName, string hasTy where toBeTested(x) and not x.isUnknown() and getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.isMut() then isMut = "yes" else isMut = "no") and (if x.hasLifetime() then hasLifetime = "yes" else hasLifetime = "no") and (if x.hasName() then hasName = "yes" else hasName = "no") and if x.hasTy() then hasTy = "yes" else hasTy = "no" -select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasLifetime:", hasLifetime, "hasName:", hasName, - "hasTy:", hasTy +select x, "getNumberOfAttrs:", getNumberOfAttrs, "isMut:", isMut, "hasLifetime:", hasLifetime, + "hasName:", hasName, "hasTy:", hasTy diff --git a/rust/ql/test/extractor-tests/generated/Static/Static.ql b/rust/ql/test/extractor-tests/generated/Static/Static.ql index a629119be703..a1cac0742eea 100644 --- a/rust/ql/test/extractor-tests/generated/Static/Static.ql +++ b/rust/ql/test/extractor-tests/generated/Static/Static.ql @@ -3,14 +3,17 @@ import codeql.rust.elements import TestUtils from - Static x, int getNumberOfAttrs, string hasBody, string hasName, string hasTy, string hasVisibility + Static x, int getNumberOfAttrs, string hasBody, string isMut, string isStatic, string hasName, + string hasTy, string hasVisibility where toBeTested(x) and not x.isUnknown() and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasBody() then hasBody = "yes" else hasBody = "no") and + (if x.isMut() then isMut = "yes" else isMut = "no") and + (if x.isStatic() then isStatic = "yes" else isStatic = "no") and (if x.hasName() then hasName = "yes" else hasName = "no") and (if x.hasTy() then hasTy = "yes" else hasTy = "no") and if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" -select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasBody:", hasBody, "hasName:", hasName, "hasTy:", - hasTy, "hasVisibility:", hasVisibility +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasBody:", hasBody, "isMut:", isMut, "isStatic:", + isStatic, "hasName:", hasName, "hasTy:", hasTy, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait.ql b/rust/ql/test/extractor-tests/generated/Trait/Trait.ql index a1f58bb68204..3551f78de6ba 100644 --- a/rust/ql/test/extractor-tests/generated/Trait/Trait.ql +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait.ql @@ -3,18 +3,22 @@ import codeql.rust.elements import TestUtils from - Trait x, string hasAssocItemList, int getNumberOfAttrs, string hasGenericParamList, - string hasName, string hasTypeBoundList, string hasVisibility, string hasWhereClause + Trait x, string hasAssocItemList, int getNumberOfAttrs, string hasGenericParamList, string isAuto, + string isUnsafe, string hasName, string hasTypeBoundList, string hasVisibility, + string hasWhereClause where toBeTested(x) and not x.isUnknown() and (if x.hasAssocItemList() then hasAssocItemList = "yes" else hasAssocItemList = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no") and + (if x.isAuto() then isAuto = "yes" else isAuto = "no") and + (if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no") and (if x.hasName() then hasName = "yes" else hasName = "no") and (if x.hasTypeBoundList() then hasTypeBoundList = "yes" else hasTypeBoundList = "no") and (if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no") and if x.hasWhereClause() then hasWhereClause = "yes" else hasWhereClause = "no" select x, "hasAssocItemList:", hasAssocItemList, "getNumberOfAttrs:", getNumberOfAttrs, - "hasGenericParamList:", hasGenericParamList, "hasName:", hasName, "hasTypeBoundList:", - hasTypeBoundList, "hasVisibility:", hasVisibility, "hasWhereClause:", hasWhereClause + "hasGenericParamList:", hasGenericParamList, "isAuto:", isAuto, "isUnsafe:", isUnsafe, "hasName:", + hasName, "hasTypeBoundList:", hasTypeBoundList, "hasVisibility:", hasVisibility, + "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql index 10494cb2889d..240791745dcd 100644 --- a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql @@ -3,18 +3,19 @@ import codeql.rust.elements import TestUtils from - TypeAlias x, int getNumberOfAttrs, string hasGenericParamList, string hasName, string hasTy, - string hasTypeBoundList, string hasVisibility, string hasWhereClause + TypeAlias x, int getNumberOfAttrs, string hasGenericParamList, string isDefault, string hasName, + string hasTy, string hasTypeBoundList, string hasVisibility, string hasWhereClause where toBeTested(x) and not x.isUnknown() and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no") and + (if x.isDefault() then isDefault = "yes" else isDefault = "no") and (if x.hasName() then hasName = "yes" else hasName = "no") and (if x.hasTy() then hasTy = "yes" else hasTy = "no") and (if x.hasTypeBoundList() then hasTypeBoundList = "yes" else hasTypeBoundList = "no") and (if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no") and if x.hasWhereClause() then hasWhereClause = "yes" else hasWhereClause = "no" select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasGenericParamList:", hasGenericParamList, - "hasName:", hasName, "hasTy:", hasTy, "hasTypeBoundList:", hasTypeBoundList, "hasVisibility:", - hasVisibility, "hasWhereClause:", hasWhereClause + "isDefault:", isDefault, "hasName:", hasName, "hasTy:", hasTy, "hasTypeBoundList:", + hasTypeBoundList, "hasVisibility:", hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound.ql b/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound.ql index 06e117fe2242..449ca67ed71e 100644 --- a/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound.ql +++ b/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound.ql @@ -2,11 +2,16 @@ import codeql.rust.elements import TestUtils -from TypeBound x, string hasGenericParamList, string hasLifetime, string hasTy +from + TypeBound x, string hasGenericParamList, string isAsync, string isConst, string hasLifetime, + string hasTy where toBeTested(x) and not x.isUnknown() and (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no") and + (if x.isAsync() then isAsync = "yes" else isAsync = "no") and + (if x.isConst() then isConst = "yes" else isConst = "no") and (if x.hasLifetime() then hasLifetime = "yes" else hasLifetime = "no") and if x.hasTy() then hasTy = "yes" else hasTy = "no" -select x, "hasGenericParamList:", hasGenericParamList, "hasLifetime:", hasLifetime, "hasTy:", hasTy +select x, "hasGenericParamList:", hasGenericParamList, "isAsync:", isAsync, "isConst:", isConst, + "hasLifetime:", hasLifetime, "hasTy:", hasTy diff --git a/rust/schema/ast.py b/rust/schema/ast.py index 665afe12b7d9..7964359ac46a 100644 --- a/rust/schema/ast.py +++ b/rust/schema/ast.py @@ -83,6 +83,12 @@ class BinaryExpr(Expr): class BlockExpr(Expr): attrs: list["Attr"] | child + is_async: predicate + is_const: predicate + is_gen: predicate + is_move: predicate + is_try: predicate + is_unsafe: predicate label: optional["Label"] | child stmt_list: optional["StmtList"] | child @@ -111,12 +117,19 @@ class ClosureExpr(Expr): attrs: list["Attr"] | child body: optional["Expr"] | child closure_binder: optional["ClosureBinder"] | child + is_async: predicate + is_const: predicate + is_gen: predicate + is_move: predicate + is_static: predicate param_list: optional["ParamList"] | child ret_type: optional["RetType"] | child class Const(AssocItem,Item): attrs: list["Attr"] | child body: optional["Expr"] | child + is_const: predicate + is_default: predicate name: optional["Name"] | child ty: optional["TypeRef"] | child visibility: optional["Visibility"] | child @@ -126,10 +139,12 @@ class ConstArg(GenericArg): class ConstBlockPat(Pat): block_expr: optional["BlockExpr"] | child + is_const: predicate class ConstParam(GenericParam): attrs: list["Attr"] | child default_val: optional["ConstArg"] | child + is_const: predicate name: optional["Name"] | child ty: optional["TypeRef"] | child @@ -155,6 +170,7 @@ class ExternBlock(Item): abi: optional["Abi"] | child attrs: list["Attr"] | child extern_item_list: optional["ExternItemList"] | child + is_unsafe: predicate class ExternCrate(Item): attrs: list["Attr"] | child @@ -176,6 +192,11 @@ class Function(AssocItem,ExternItem,Item): attrs: list["Attr"] | child body: optional["BlockExpr"] | child generic_param_list: optional["GenericParamList"] | child + is_async: predicate + is_const: predicate + is_default: predicate + is_gen: predicate + is_unsafe: predicate name: optional["Name"] | child param_list: optional["ParamList"] | child ret_type: optional["RetType"] | child @@ -184,6 +205,9 @@ class Function(AssocItem,ExternItem,Item): class FnPtrType(TypeRef): abi: optional["Abi"] | child + is_async: predicate + is_const: predicate + is_unsafe: predicate param_list: optional["ParamList"] | child ret_type: optional["RetType"] | child @@ -215,6 +239,8 @@ class GenericParamList(AstNode): class IdentPat(Pat): attrs: list["Attr"] | child + is_mut: predicate + is_ref: predicate name: optional["Name"] | child pat: optional["Pat"] | child @@ -228,6 +254,9 @@ class Impl(Item): assoc_item_list: optional["AssocItemList"] | child attrs: list["Attr"] | child generic_param_list: optional["GenericParamList"] | child + is_const: predicate + is_default: predicate + is_unsafe: predicate self_ty: optional["TypeRef"] | child trait_: optional["TypeRef"] | child visibility: optional["Visibility"] | child @@ -336,6 +365,7 @@ class MatchGuard(AstNode): class Meta(AstNode): expr: optional["Expr"] | child + is_unsafe: predicate path: optional["Path"] | child token_tree: optional["TokenTree"] | child @@ -417,6 +447,8 @@ class PrefixExpr(Expr): operator_name: optional[string] class PtrType(TypeRef): + is_const: predicate + is_mut: predicate ty: optional["TypeRef"] | child class RangeExpr(Expr): @@ -469,11 +501,16 @@ class RecordPatFieldList(AstNode): class RefExpr(Expr): attrs: list["Attr"] | child expr: optional["Expr"] | child + is_const: predicate + is_mut: predicate + is_raw: predicate class RefPat(Pat): + is_mut: predicate pat: optional["Pat"] | child class RefType(TypeRef): + is_mut: predicate lifetime: optional["Lifetime"] | child ty: optional["TypeRef"] | child @@ -495,6 +532,7 @@ class ReturnTypeSyntax(AstNode): class SelfParam(AstNode): attrs: list["Attr"] | child + is_mut: predicate lifetime: optional["Lifetime"] | child name: optional["Name"] | child ty: optional["TypeRef"] | child @@ -512,6 +550,8 @@ class SourceFile(AstNode): class Static(ExternItem,Item): attrs: list["Attr"] | child body: optional["Expr"] | child + is_mut: predicate + is_static: predicate name: optional["Name"] | child ty: optional["TypeRef"] | child visibility: optional["Visibility"] | child @@ -536,6 +576,8 @@ class Trait(Item): assoc_item_list: optional["AssocItemList"] | child attrs: list["Attr"] | child generic_param_list: optional["GenericParamList"] | child + is_auto: predicate + is_unsafe: predicate name: optional["Name"] | child type_bound_list: optional["TypeBoundList"] | child visibility: optional["Visibility"] | child @@ -578,6 +620,7 @@ class TupleType(TypeRef): class TypeAlias(AssocItem,ExternItem,Item): attrs: list["Attr"] | child generic_param_list: optional["GenericParamList"] | child + is_default: predicate name: optional["Name"] | child ty: optional["TypeRef"] | child type_bound_list: optional["TypeBoundList"] | child @@ -589,6 +632,8 @@ class TypeArg(GenericArg): class TypeBound(AstNode): generic_param_list: optional["GenericParamList"] | child + is_async: predicate + is_const: predicate lifetime: optional["Lifetime"] | child ty: optional["TypeRef"] | child From 32e9881cfb20db9c6d3e8329c4496a4467cad90e Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Thu, 10 Oct 2024 13:11:13 +0200 Subject: [PATCH 035/217] Rust: update expected output --- .../generated/BlockExpr/BlockExpr.expected | 6 +++--- .../generated/ClosureExpr/ClosureExpr.expected | 10 +++++----- .../generated/ConstBlockPat/ConstBlockPat.expected | 2 +- .../generated/Function/Function.expected | 4 ++-- .../generated/IdentPat/IdentPat.expected | 4 ++-- .../extractor-tests/generated/RefExpr/RefExpr.expected | 8 ++++---- .../extractor-tests/generated/RefPat/RefPat.expected | 4 ++-- 7 files changed, 19 insertions(+), 19 deletions(-) diff --git a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.expected b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.expected index 6308944a23e8..39ec1d6a7e1a 100644 --- a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.expected +++ b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.expected @@ -1,3 +1,3 @@ -| gen_block_expr.rs:3:28:12:1 | BlockExpr | getNumberOfAttrs: | 0 | hasLabel: | no | hasStmtList: | yes | -| gen_block_expr.rs:5:5:7:5 | BlockExpr | getNumberOfAttrs: | 0 | hasLabel: | no | hasStmtList: | yes | -| gen_block_expr.rs:8:5:11:5 | BlockExpr | getNumberOfAttrs: | 0 | hasLabel: | yes | hasStmtList: | yes | +| gen_block_expr.rs:3:28:12:1 | BlockExpr | getNumberOfAttrs: | 0 | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | hasLabel: | no | hasStmtList: | yes | +| gen_block_expr.rs:5:5:7:5 | BlockExpr | getNumberOfAttrs: | 0 | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | hasLabel: | no | hasStmtList: | yes | +| gen_block_expr.rs:8:5:11:5 | BlockExpr | getNumberOfAttrs: | 0 | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | hasLabel: | yes | hasStmtList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.expected b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.expected index c6a8ba5ece4b..18fb82716295 100644 --- a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.expected @@ -1,5 +1,5 @@ -| gen_closure_expr.rs:5:5:5:13 | ClosureExpr | getNumberOfAttrs: | 0 | hasBody: | yes | hasClosureBinder: | no | hasParamList: | yes | hasRetType: | no | -| gen_closure_expr.rs:6:5:6:34 | ClosureExpr | getNumberOfAttrs: | 0 | hasBody: | yes | hasClosureBinder: | no | hasParamList: | yes | hasRetType: | yes | -| gen_closure_expr.rs:7:5:7:27 | ClosureExpr | getNumberOfAttrs: | 0 | hasBody: | yes | hasClosureBinder: | no | hasParamList: | yes | hasRetType: | no | -| gen_closure_expr.rs:8:6:9:15 | ClosureExpr | getNumberOfAttrs: | 1 | hasBody: | yes | hasClosureBinder: | no | hasParamList: | yes | hasRetType: | no | -| gen_closure_expr.rs:10:6:11:23 | ClosureExpr | getNumberOfAttrs: | 1 | hasBody: | yes | hasClosureBinder: | no | hasParamList: | yes | hasRetType: | no | +| gen_closure_expr.rs:5:5:5:13 | ClosureExpr | getNumberOfAttrs: | 0 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasParamList: | yes | hasRetType: | no | +| gen_closure_expr.rs:6:5:6:34 | ClosureExpr | getNumberOfAttrs: | 0 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | yes | isStatic: | no | hasParamList: | yes | hasRetType: | yes | +| gen_closure_expr.rs:7:5:7:27 | ClosureExpr | getNumberOfAttrs: | 0 | hasBody: | yes | hasClosureBinder: | no | isAsync: | yes | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasParamList: | yes | hasRetType: | no | +| gen_closure_expr.rs:8:6:9:15 | ClosureExpr | getNumberOfAttrs: | 1 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasParamList: | yes | hasRetType: | no | +| gen_closure_expr.rs:10:6:11:23 | ClosureExpr | getNumberOfAttrs: | 1 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | yes | hasParamList: | yes | hasRetType: | no | diff --git a/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat.expected b/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat.expected index 5b6220f2b9c9..21feba1f729f 100644 --- a/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat.expected +++ b/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat.expected @@ -1 +1 @@ -| gen_const_block_pat.rs:6:9:6:27 | ConstBlockPat | hasBlockExpr: | yes | +| gen_const_block_pat.rs:6:9:6:27 | ConstBlockPat | hasBlockExpr: | yes | isConst: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Function/Function.expected b/rust/ql/test/extractor-tests/generated/Function/Function.expected index fd765f9b5785..cf2de6ac0a6d 100644 --- a/rust/ql/test/extractor-tests/generated/Function/Function.expected +++ b/rust/ql/test/extractor-tests/generated/Function/Function.expected @@ -1,2 +1,2 @@ -| gen_function.rs:3:1:4:38 | foo | hasAbi: | no | getNumberOfAttrs: | 0 | hasBody: | yes | hasGenericParamList: | no | hasName: | yes | hasParamList: | yes | hasRetType: | yes | hasVisibility: | no | hasWhereClause: | no | -| gen_function.rs:7:5:7:13 | bar | hasAbi: | no | getNumberOfAttrs: | 0 | hasBody: | no | hasGenericParamList: | no | hasName: | yes | hasParamList: | yes | hasRetType: | no | hasVisibility: | no | hasWhereClause: | no | +| gen_function.rs:3:1:4:38 | foo | hasAbi: | no | getNumberOfAttrs: | 0 | hasBody: | yes | hasGenericParamList: | no | isAsync: | no | isConst: | no | isDefault: | no | isGen: | no | isUnsafe: | no | hasName: | yes | hasParamList: | yes | hasRetType: | yes | hasVisibility: | no | hasWhereClause: | no | +| gen_function.rs:7:5:7:13 | bar | hasAbi: | no | getNumberOfAttrs: | 0 | hasBody: | no | hasGenericParamList: | no | isAsync: | no | isConst: | no | isDefault: | no | isGen: | no | isUnsafe: | no | hasName: | yes | hasParamList: | yes | hasRetType: | no | hasVisibility: | no | hasWhereClause: | no | diff --git a/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat.expected b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat.expected index 5f7d899ccab9..bdc57b38cf31 100644 --- a/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat.expected +++ b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat.expected @@ -1,2 +1,2 @@ -| gen_ident_pat.rs:6:22:6:22 | y | getNumberOfAttrs: | 0 | hasName: | yes | hasPat: | no | -| gen_ident_pat.rs:10:9:10:25 | y | getNumberOfAttrs: | 0 | hasName: | yes | hasPat: | yes | +| gen_ident_pat.rs:6:22:6:22 | y | getNumberOfAttrs: | 0 | isMut: | no | isRef: | no | hasName: | yes | hasPat: | no | +| gen_ident_pat.rs:10:9:10:25 | y | getNumberOfAttrs: | 0 | isMut: | no | isRef: | no | hasName: | yes | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.expected b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.expected index b5f629c6a5c7..d4c75d9a79a0 100644 --- a/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.expected +++ b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.expected @@ -1,4 +1,4 @@ -| gen_ref_expr.rs:5:25:5:28 | RefExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | -| gen_ref_expr.rs:6:23:6:30 | RefExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | -| gen_ref_expr.rs:7:35:7:48 | RefExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | -| gen_ref_expr.rs:8:33:8:44 | RefExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | +| gen_ref_expr.rs:5:25:5:28 | RefExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | no | isMut: | no | isRaw: | no | +| gen_ref_expr.rs:6:23:6:30 | RefExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | no | isMut: | yes | isRaw: | no | +| gen_ref_expr.rs:7:35:7:48 | RefExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | yes | isMut: | no | isRaw: | yes | +| gen_ref_expr.rs:8:33:8:44 | RefExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | no | isMut: | yes | isRaw: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RefPat/RefPat.expected b/rust/ql/test/extractor-tests/generated/RefPat/RefPat.expected index 2cef03b7f5d7..c2fc3416297a 100644 --- a/rust/ql/test/extractor-tests/generated/RefPat/RefPat.expected +++ b/rust/ql/test/extractor-tests/generated/RefPat/RefPat.expected @@ -1,2 +1,2 @@ -| gen_ref_pat.rs:6:9:6:28 | RefPat | hasPat: | yes | -| gen_ref_pat.rs:7:9:7:21 | RefPat | hasPat: | yes | +| gen_ref_pat.rs:6:9:6:28 | RefPat | isMut: | yes | hasPat: | yes | +| gen_ref_pat.rs:7:9:7:21 | RefPat | isMut: | no | hasPat: | yes | From c364fd7e56c6952c2d6b1ec1fc170b8f390ad74f Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 10 Oct 2024 14:33:06 +0200 Subject: [PATCH 036/217] Codegen: allow annotations to replace bases and drop fields --- misc/codegen/lib/schemadefs.py | 24 +++++++++---- misc/codegen/test/test_schemaloader.py | 50 ++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 7 deletions(-) diff --git a/misc/codegen/lib/schemadefs.py b/misc/codegen/lib/schemadefs.py index 7152c32d12b1..ea8d6cf09ce7 100644 --- a/misc/codegen/lib/schemadefs.py +++ b/misc/codegen/lib/schemadefs.py @@ -1,4 +1,8 @@ -from typing import Callable as _Callable, Dict as _Dict, ClassVar as _ClassVar +from typing import ( + Callable as _Callable, + Dict as _Dict, + ClassVar as _ClassVar, +) from misc.codegen.lib import schema as _schema import inspect as _inspect from dataclasses import dataclass as _dataclass @@ -271,14 +275,16 @@ def __or__(self, other: _schema.PropertyModifier): _ = _PropertyAnnotation() +drop = object() -def annotate(annotated_cls: type) -> _Callable[[type], _PropertyAnnotation]: + +def annotate(annotated_cls: type, replace_bases: _Dict[type, type] | None = None) -> _Callable[[type], _PropertyAnnotation]: """ - Add or modify schema annotations after a class has been defined - For the moment, only docstring annotation is supported. In the future, any kind of - modification will be allowed. + Add or modify schema annotations after a class has been defined previously. + + The name of the class used for annotation must be `_`. - The name of the class used for annotation must be `_` + `replace_bases` can be used to replace bases on the annotated class. """ def decorator(cls: type) -> _PropertyAnnotation: if cls.__name__ != "_": @@ -287,11 +293,15 @@ def decorator(cls: type) -> _PropertyAnnotation: annotated_cls.__doc__ = cls.__doc__ for p, v in cls.__dict__.get("_pragmas", {}).items(): _ClassPragma(p, value=v)(annotated_cls) + if replace_bases: + annotated_cls.__bases__ = tuple(replace_bases.get(b, b) for b in annotated_cls.__bases__) for a in dir(cls): if a.startswith(_schema.inheritable_pragma_prefix): setattr(annotated_cls, a, getattr(cls, a)) for p, a in cls.__annotations__.items(): - if p in annotated_cls.__annotations__: + if a is drop: + del annotated_cls.__annotations__[p] + elif p in annotated_cls.__annotations__: annotated_cls.__annotations__[p] |= a elif isinstance(a, (_PropertyAnnotation, _PropertyModifierList)): raise _schema.Error(f"annotated property {p} not present in annotated class " diff --git a/misc/codegen/test/test_schemaloader.py b/misc/codegen/test/test_schemaloader.py index 4d1aa06ecd0f..0c9128c72727 100644 --- a/misc/codegen/test/test_schemaloader.py +++ b/misc/codegen/test/test_schemaloader.py @@ -884,6 +884,56 @@ class Something: """ +def test_annotate_replace_bases(): + @load + class data: + class Root: + pass + + class A(Root): + pass + + class B(Root): + pass + + class C(B): + pass + + class Derived(A, B): + pass + + @defs.annotate(Derived, replace_bases={B: C}) + class _: + pass + assert data.classes == { + "Root": schema.Class("Root", derived={"A", "B"}), + "A": schema.Class("A", bases=["Root"], derived={"Derived"}), + "B": schema.Class("B", bases=["Root"], derived={"C"}), + "C": schema.Class("C", bases=["B"], derived={"Derived"}), + "Derived": schema.Class("Derived", bases=["A", "C"]), + } + + +def test_annotate_drop_field(): + @load + class data: + class Root: + x: defs.int + y: defs.string + z: defs.boolean + + @defs.annotate(Root) + class _: + y: defs.drop + + assert data.classes == { + "Root": schema.Class("Root", properties=[ + schema.SingleProperty("x", "int"), + schema.SingleProperty("z", "boolean"), + ]), + } + + def test_test_with_unknown_string(): with pytest.raises(schema.Error): @load From 601552458993e3ef0b38164c67ba18ef5db129dc Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 10 Oct 2024 14:34:24 +0200 Subject: [PATCH 037/217] Rust: insert `FunctionOrMethodCallExpr` in annotations --- rust/schema/annotations.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index b4c647f2654b..7fafb26bbb31 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -185,8 +185,15 @@ class _: ``` """ +class FunctionOrMethodCallExpr(Expr): + """ + A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details. + """ + arg_list: optional["ArgList"] | child + attrs: list["Attr"] | child -@annotate(CallExpr) + +@annotate(CallExpr, replace_bases={Expr: FunctionOrMethodCallExpr}) class _: """ A function call expression. For example: @@ -197,9 +204,10 @@ class _: foo(1) = 4; ``` """ + arg_list: drop + attrs: drop - -@annotate(MethodCallExpr) +@annotate(MethodCallExpr, replace_bases={Expr: FunctionOrMethodCallExpr}) class _: """ A method call expression. For example: @@ -208,6 +216,8 @@ class _: x.foo::(42); ``` """ + arg_list: drop + attrs: drop @annotate(MatchArm) From 89f43fb917a6c069ae4c957e69dfc6c1bb23e2c6 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 10 Oct 2024 14:37:40 +0200 Subject: [PATCH 038/217] Rust: generate code --- rust/extractor/src/generated/.generated.list | 2 +- rust/extractor/src/generated/top.rs | 347 +++++++++++------- rust/ql/.generated.list | 19 +- rust/ql/.gitattributes | 3 + rust/ql/lib/codeql/rust/elements.qll | 1 + rust/ql/lib/codeql/rust/elements/CallExpr.qll | 3 +- .../elements/FunctionOrMethodCallExpr.qll | 14 + .../codeql/rust/elements/MethodCallExpr.qll | 3 +- .../internal/FunctionOrMethodCallExprImpl.qll | 19 + .../elements/internal/generated/CallExpr.qll | 37 +- .../generated/FunctionOrMethodCallExpr.qll | 59 +++ .../internal/generated/MethodCallExpr.qll | 43 +-- .../internal/generated/ParentChild.qll | 135 +++---- .../rust/elements/internal/generated/Raw.qll | 128 ++++--- .../elements/internal/generated/Synth.qll | 43 ++- rust/ql/lib/rust.dbscheme | 111 +++--- 16 files changed, 538 insertions(+), 429 deletions(-) create mode 100644 rust/ql/lib/codeql/rust/elements/FunctionOrMethodCallExpr.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/FunctionOrMethodCallExprImpl.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/generated/FunctionOrMethodCallExpr.qll diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index 43459827a075..886def53f2da 100644 --- a/rust/extractor/src/generated/.generated.list +++ b/rust/extractor/src/generated/.generated.list @@ -1,2 +1,2 @@ mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 -top.rs 855f5f0639dfafd8603c9b842f6470ca6d1214bb72391890a1de64db2adebba1 855f5f0639dfafd8603c9b842f6470ca6d1214bb72391890a1de64db2adebba1 +top.rs 7269710572ed5f727107f19cf4002ec19b8a4149842b351c6c61dbeb1ec35e5c 7269710572ed5f727107f19cf4002ec19b8a4149842b351c6c61dbeb1ec35e5c diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index 5c234ae22aef..fad605cab2e0 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -3614,73 +3614,6 @@ impl From> for trap::Label { } } -#[derive(Debug)] -pub struct CallExpr { - pub id: trap::TrapId, - pub arg_list: Option>, - pub attrs: Vec>, - pub expr: Option>, -} - -impl trap::TrapEntry for CallExpr { - fn extract_id(&mut self) -> trap::TrapId { - std::mem::replace(&mut self.id, trap::TrapId::Star) - } - - fn emit(self, id: trap::Label, out: &mut trap::Writer) { - out.add_tuple("call_exprs", vec![id.into()]); - if let Some(v) = self.arg_list { - out.add_tuple("call_expr_arg_lists", vec![id.into(), v.into()]); - } - for (i, v) in self.attrs.into_iter().enumerate() { - out.add_tuple("call_expr_attrs", vec![id.into(), i.into(), v.into()]); - } - if let Some(v) = self.expr { - out.add_tuple("call_expr_exprs", vec![id.into(), v.into()]); - } - } -} - -impl trap::TrapClass for CallExpr { - fn class_name() -> &'static str { "CallExpr" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of AstNode - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of Element - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of Expr - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of Locatable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct CastExpr { pub id: trap::TrapId, @@ -4589,6 +4522,51 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct FunctionOrMethodCallExpr { + _unused: () +} + +impl trap::TrapClass for FunctionOrMethodCallExpr { + fn class_name() -> &'static str { "FunctionOrMethodCallExpr" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme FunctionOrMethodCallExpr is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme FunctionOrMethodCallExpr is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme FunctionOrMethodCallExpr is a subclass of Expr + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme FunctionOrMethodCallExpr is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct IdentPat { pub id: trap::TrapId, @@ -5654,81 +5632,6 @@ impl From> for trap::Label { } } -#[derive(Debug)] -pub struct MethodCallExpr { - pub id: trap::TrapId, - pub arg_list: Option>, - pub attrs: Vec>, - pub generic_arg_list: Option>, - pub name_ref: Option>, - pub receiver: Option>, -} - -impl trap::TrapEntry for MethodCallExpr { - fn extract_id(&mut self) -> trap::TrapId { - std::mem::replace(&mut self.id, trap::TrapId::Star) - } - - fn emit(self, id: trap::Label, out: &mut trap::Writer) { - out.add_tuple("method_call_exprs", vec![id.into()]); - if let Some(v) = self.arg_list { - out.add_tuple("method_call_expr_arg_lists", vec![id.into(), v.into()]); - } - for (i, v) in self.attrs.into_iter().enumerate() { - out.add_tuple("method_call_expr_attrs", vec![id.into(), i.into(), v.into()]); - } - if let Some(v) = self.generic_arg_list { - out.add_tuple("method_call_expr_generic_arg_lists", vec![id.into(), v.into()]); - } - if let Some(v) = self.name_ref { - out.add_tuple("method_call_expr_name_refs", vec![id.into(), v.into()]); - } - if let Some(v) = self.receiver { - out.add_tuple("method_call_expr_receivers", vec![id.into(), v.into()]); - } - } -} - -impl trap::TrapClass for MethodCallExpr { - fn class_name() -> &'static str { "MethodCallExpr" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of AstNode - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Element - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Expr - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Locatable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct NeverType { pub id: trap::TrapId, @@ -7953,6 +7856,82 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct CallExpr { + pub id: trap::TrapId, + pub arg_list: Option>, + pub attrs: Vec>, + pub expr: Option>, +} + +impl trap::TrapEntry for CallExpr { + fn extract_id(&mut self) -> trap::TrapId { + std::mem::replace(&mut self.id, trap::TrapId::Star) + } + + fn emit(self, id: trap::Label, out: &mut trap::Writer) { + out.add_tuple("call_exprs", vec![id.into()]); + if let Some(v) = self.arg_list { + out.add_tuple("function_or_method_call_expr_arg_lists", vec![id.into(), v.into()]); + } + for (i, v) in self.attrs.into_iter().enumerate() { + out.add_tuple("function_or_method_call_expr_attrs", vec![id.into(), i.into(), v.into()]); + } + if let Some(v) = self.expr { + out.add_tuple("call_expr_exprs", vec![id.into(), v.into()]); + } + } +} + +impl trap::TrapClass for CallExpr { + fn class_name() -> &'static str { "CallExpr" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of Expr + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of FunctionOrMethodCallExpr + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct Const { pub id: trap::TrapId, @@ -8758,6 +8737,90 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct MethodCallExpr { + pub id: trap::TrapId, + pub arg_list: Option>, + pub attrs: Vec>, + pub generic_arg_list: Option>, + pub name_ref: Option>, + pub receiver: Option>, +} + +impl trap::TrapEntry for MethodCallExpr { + fn extract_id(&mut self) -> trap::TrapId { + std::mem::replace(&mut self.id, trap::TrapId::Star) + } + + fn emit(self, id: trap::Label, out: &mut trap::Writer) { + out.add_tuple("method_call_exprs", vec![id.into()]); + if let Some(v) = self.arg_list { + out.add_tuple("function_or_method_call_expr_arg_lists", vec![id.into(), v.into()]); + } + for (i, v) in self.attrs.into_iter().enumerate() { + out.add_tuple("function_or_method_call_expr_attrs", vec![id.into(), i.into(), v.into()]); + } + if let Some(v) = self.generic_arg_list { + out.add_tuple("method_call_expr_generic_arg_lists", vec![id.into(), v.into()]); + } + if let Some(v) = self.name_ref { + out.add_tuple("method_call_expr_name_refs", vec![id.into(), v.into()]); + } + if let Some(v) = self.receiver { + out.add_tuple("method_call_expr_receivers", vec![id.into(), v.into()]); + } + } +} + +impl trap::TrapClass for MethodCallExpr { + fn class_name() -> &'static str { "MethodCallExpr" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Expr + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of FunctionOrMethodCallExpr + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct Module { pub id: trap::TrapId, diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index e37f6947148d..59d71c496637 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -14,7 +14,7 @@ lib/codeql/rust/elements/BinaryExpr.qll 394522da3bc3a716fc7bc40c3560143ca840f5d2 lib/codeql/rust/elements/BlockExpr.qll b952fd44b89de248931d4089834d2c9406f6f2fc1a3f5c2365156be4e55157cf daccc07ab11ac696679b9fadc99f40b1bf579c90bf6c7cca6e82eaa313932ede lib/codeql/rust/elements/BoxPat.qll 1b2c3fff171aa6aa238c9460b122f26c79e04577cea67fa856de99842ba873d4 0caf8d23ed6e0997a6b8751def27641582151fba6e24fccf798712a4690b42f1 lib/codeql/rust/elements/BreakExpr.qll 7ca3807a20e9a9a988d1fd7abebf240325ed422fcb45c719ba46272f031f94db dffb7379d3f3ba220acfbd05eb7bb6cfd9cfda211e9c8b1f5240ca5fa61be3fc -lib/codeql/rust/elements/CallExpr.qll 6760ef2753fcaa9f02860bfeadfd1b1603d0d5b35f5dd72b33a474c206f51a29 55afe003eb51ef28b382af368429930d858d291bb7d76d71149eee1c805731f1 +lib/codeql/rust/elements/CallExpr.qll 4232f42c54212fe9e8aa140194da324b77581395a4d5c899190d469609598668 a589e19792174b18ce39b74e19828bfe5c7ff796424c05f6a6084eab4ff16ab4 lib/codeql/rust/elements/CastExpr.qll ba281bde130f43c486c4ad889539b77fba9e41afdf7980e50b6a8696a1ec7527 61257003d395896ec60729d0bc01da36697615bb725d07141255fbb5c44e50a0 lib/codeql/rust/elements/ClosureBinder.qll 977df800f97cc9b03fffb5e5e1fc6acd08a2938e04cb6ad91108784a15b0d510 f6fad4127226fe1dff2f16416d8a7fde5d8ab4a88f30e443ac5e5ff618de3e05 lib/codeql/rust/elements/ClosureExpr.qll 8f06357ae134e42c073eef994c83c04b8cf294fe33b286dbd75c0e705ce29d05 9d9e282d965fed723965376801d4afa49444d1d9be9b093d02e276729a2cf7ad @@ -41,6 +41,7 @@ lib/codeql/rust/elements/ForType.qll 0036bed8749358c356d78c4a0eef40d73e279628429 lib/codeql/rust/elements/FormatArgsArg.qll 5bc9b4cd1bac7131165836e93838c45452a08ea6011741cbddace3cbf9c69440 f825140e98dc9800d5c045402186793c7b21511448e2f6bf6402d1e06305219c lib/codeql/rust/elements/FormatArgsExpr.qll f2ffad5a1105b29a8437c8ed6cf918cfcf4d65ac164bbf1be0585c3b673ca749 3ba20dc312a0a994bb43b37b2db72cbd4e06061b97918fa0e84ce355070ffbeb lib/codeql/rust/elements/Function.qll 736c53408f8674c88c352cd1f08f7c77e51551c68ef802f2e1c1aaf3d44fa8e9 6b52dbea081a5e799f1a2cedd57be5485bc8e018ded7249a1852343053d849a6 +lib/codeql/rust/elements/FunctionOrMethodCallExpr.qll 69754853bd452c18a333e2bb70a401726cc115092a120662edac5b24586f1951 1d9226ea609d298ec76eaf6a25248c96315b14a5993ac7c8dfd7fd80e1c134fb lib/codeql/rust/elements/GenericArg.qll 5f11ce0e3c5f08de84db61f56ba1b984652455ba6b95a8b8a5b5a235913d4072 756b6a73d66fde45bdcc65ce2362a5b1391af2927e6d54b6550b3ecd5fd11e75 lib/codeql/rust/elements/GenericArgList.qll dcf274db517b0e8f19e4545d77f86cdd4066ff2805e68c808d0bb5750b49f569 1055a82929e850264e501b367ef4d314a3e6bb8943ec95f4284d157fb4d0092f lib/codeql/rust/elements/GenericParam.qll b58448b808d6dfa05db9574f54c22ce51f0b1d78784263c75a95d6bfc787067d 4afbab71fe717d7d7d3e2f60ea8c3d97bcb29b17b4efb79eabfe8f070edcb9bb @@ -75,7 +76,7 @@ lib/codeql/rust/elements/MatchArmList.qll e6c48fd7419d88e996b82eb45e4aa2686dfd07 lib/codeql/rust/elements/MatchExpr.qll e9ef1664f020823b6f4bb72d906a9dc0c1ee6432d4a9a13f7dbdbab2b2b1ee4d 38d71e5c487abcb5682293c573343be66e499a6e131bb630604c120d34b7777b lib/codeql/rust/elements/MatchGuard.qll 20754ab2009a7d40b50feece496ff7f38650586d79190ed2a372308594693694 471f8f118317efcf112f4ddfd60125ca2a9d9b3b08e6ee331c430961de7885ff lib/codeql/rust/elements/Meta.qll 9fa3216c86fa55ed5c0c4671708110a6ffc7c0f5d6cda8dda31aaff17f87534d c44ee2754dd71776ffd0a8a7d6c1ae8737c47e998e6bdb8efab5283625807cf4 -lib/codeql/rust/elements/MethodCallExpr.qll 0a5cab9f21741f6a38956e6de4f6beb143db5d85ee590f9908dab3da300a6b72 df21eba9cf2823a7b06eb6672dd8249225e7c16d5b6c1c37c1f2a175d9513272 +lib/codeql/rust/elements/MethodCallExpr.qll d19c02fdd2f6f649dfbf757c53f4af441f10842ca69f56b13d218e343961688b eafb571244dcbec1bb8106f8ec03c641ca383b51b615506bf0d7bc90a1aa1934 lib/codeql/rust/elements/Missing.qll 70e6ac9790314752849c9888443c98223ccfc93a193998b7ce350b2c6ebe8ea4 e2f0623511acaa76b091f748d417714137a8b94f1f2bdbbd177f1c682c786dad lib/codeql/rust/elements/Module.qll 0bc85019177709256f8078d9de2a36f62f848d476225bff7bba1e35f249875c7 3fbb70e0c417a644dd0cada2c364c6e6876cfa16f37960e219c87e49c966c94e lib/codeql/rust/elements/Name.qll 3d7ed16c232912e30e5a075f5087ad344a8f76dcc27bc8f71a80c133802b89d7 036dc3ba0c20eb0907ef6dcc532214aa5de8e0de0fa819eca1fce0355b3741a3 @@ -229,6 +230,7 @@ lib/codeql/rust/elements/internal/FormatArgsArgImpl.qll 601f7715e9a65bcfa7cea197 lib/codeql/rust/elements/internal/FormatArgsExprConstructor.qll ce29ff5a839b885b1ab7a02d6a381ae474ab1be3e6ee7dcfd7595bdf28e4b558 63bf957426871905a51ea319662a59e38104c197a1024360aca364dc145b11e8 lib/codeql/rust/elements/internal/FormatArgsExprImpl.qll bdb992ebc6be59311b486f40325b39f52a69921cfc66a731085cb184da00050f 6336e7770f9cb700f1b3914fd940c3423ab4e971b34ed8fcc79da80c1f1cdba3 lib/codeql/rust/elements/internal/FunctionConstructor.qll b50aea579938d03745dfbd8b5fa8498f7f83b967369f63d6875510e09ab7f5d2 19cca32aeaecaf9debc27329e8c39ecec69464bb1d89d7b09908a1d73a8d92a2 +lib/codeql/rust/elements/internal/FunctionOrMethodCallExprImpl.qll 34e7b5c95c8f0fdbd9c52159494e21046acbd0d62e1fb9b2eee53a11f15be261 105783845539bc44f05473efe8bedbc033fb5fb107c2daa77af664bfccb20bf6 lib/codeql/rust/elements/internal/GenericArgImpl.qll 6b1b804c357425c223f926e560a688e81506f5a35b95485cecf704e88cc009ee cc1ccf6a23dadc397e82664f3911d4b385d4c8ca80b1ee16d5275d9c936148dd lib/codeql/rust/elements/internal/GenericArgListConstructor.qll 46859bb3eb09d77987a18642d65ba2e13471a4dc9c0a83a192fddc82e37c335c 2c7d54c876269a88d3461b05745e73b06532b1616cae9b614ac94b28735d8fc4 lib/codeql/rust/elements/internal/GenericArgListImpl.qll 1a39ba7080147abccaaba451852c9c124fb6177f2ebd64e38ee74014444a34e1 80df3150c961936037ac02b46ef5f775c3f82e66490afbca00a016cb9eee798a @@ -459,7 +461,7 @@ lib/codeql/rust/elements/internal/generated/BinaryExpr.qll 64e9bd9c571edd6e5f3e7 lib/codeql/rust/elements/internal/generated/BlockExpr.qll 6fc90a80e60f017bf3418e45bcc35b5ddac59b51037c21aed3955d47c147ce4a 1f3f8e5107b0c6de381b7c94aab93dc5fd758a845c6ff9554888df453f1315d0 lib/codeql/rust/elements/internal/generated/BoxPat.qll ec946a3e671ab7417e04b0207967adad004df512c570c4f0780ca5816d12d75f b0e64860855c4e85914042b1a51034899ff7cd1b2c6857188de89310a2726ea3 lib/codeql/rust/elements/internal/generated/BreakExpr.qll 0f428a8b2f4209b134c2ffc3e1c93c30bc6b0e9c9172f140cefa88c1f77d8690 957b39f38ff6befe9061f55bc0b403c2f1c366dd0cf63b874bae6f8216576d76 -lib/codeql/rust/elements/internal/generated/CallExpr.qll c2700dbd9c33dcc14de10dc72ff49abafdf0952257864d4435cf8ac46849a2ee 7932f725f97ffbe1b050c2622a61a0d56f18c9264a3293466cba9915313495b5 +lib/codeql/rust/elements/internal/generated/CallExpr.qll 2ed74ea3da426b351949291ae728eb6d70de033cccc667712988cf416319e999 af84a17bf5512dc97d8781cb0aa868c7f5349932596f2600785d2432e15ece3a lib/codeql/rust/elements/internal/generated/CastExpr.qll d6fbf02e9e202254666082a9116634d0eb933177866ac4c0a57b5e9c4bb4b383 477f67773492e3b82695461d56327c9db05a7d1a67e8d192406265f2ce369670 lib/codeql/rust/elements/internal/generated/ClosureBinder.qll 94c0dcdd4cd87d115659d496c88a98354bc7d4ddc0fa27028003bf7688b99987 d59d713b426dbbdb775df9092d176eea031dac1f14e468810f2fc8591399cd19 lib/codeql/rust/elements/internal/generated/ClosureExpr.qll f9047451cb8b53f8b77e1c01f7ef485d5b5a92999e0591c6702062050052fa2f 2252be8b3022c587a8c6ad93b64d856263be7bfe2938c1d063e7cad845dd38e2 @@ -486,6 +488,7 @@ lib/codeql/rust/elements/internal/generated/ForType.qll 3d43d044a1189281f09c55ca lib/codeql/rust/elements/internal/generated/FormatArgsArg.qll e07a1ae310f590003f1b88fada7dcf4847c99adb9d4c838d1c88e66e1da85c5f 0ef7342451fe2cb06e765fb4b33bb8c4a9b927f5edbc8feb5c6ba3655697f447 lib/codeql/rust/elements/internal/generated/FormatArgsExpr.qll 40d6daa7d2bafb33798a21d79774dc802cfbd7a31618ac3bd0149399ea2bf893 d1172e2151791228559004792e125fc4625f6a26ffad25f29efb0ad263bf8795 lib/codeql/rust/elements/internal/generated/Function.qll b239af1a8874802b8a311706c53d56e3ceaad7ed23a7f97d1694bf961b63768b 4bc3c23685fa05820222e472ab1cdb40a271f862727d3bd878d47de9c2e3f485 +lib/codeql/rust/elements/internal/generated/FunctionOrMethodCallExpr.qll 5c6e3b4e4d3a91d0bb934dd2402898767ef6156b7b419222dfbc144167780231 67c82e154ff4c68f601fd92ba8aad7a8dd5b688dc89189744e1515bb647e9669 lib/codeql/rust/elements/internal/generated/GenericArg.qll 464da0ba1c5ddcd1be68617167f177773d99b5ac4775ec8ea24d503e789a9099 6faa1033d59baf7c210ac4837a55781cfc054b7acbad8027faf4630dbfa6e101 lib/codeql/rust/elements/internal/generated/GenericArgList.qll b8cd936bba6f28344e28c98acf38acb8ef43af6ecf8367d79ed487e5b9da17cb 8b14331261e49d004807285b02fca190aafd62bfb9378b05c7d9c1e95525fe7b lib/codeql/rust/elements/internal/generated/GenericParam.qll a0285123f974f287154b706bf6688b86edf72a4adcec57346c654d962435651b b42c3915e9564b5b5c5282229bf882aa3309de26a77721b2255d6f4235c0cc38 @@ -520,7 +523,7 @@ lib/codeql/rust/elements/internal/generated/MatchArmList.qll 13362680c037fe83fef lib/codeql/rust/elements/internal/generated/MatchExpr.qll 689d65f690fe05bc262d0a5bfe69bb4f8a142db387c5765fcc4958a9b49989f8 2979cd2017d0538870d17b2b7592c75cc05b706bd36c9de3e5dc38fa3a957e5b lib/codeql/rust/elements/internal/generated/MatchGuard.qll 521a507883963106780f1782084c581fbcf1179863c7c15438c4db79e30e78dd 6226feffaaa8d828a42ece0c693e616cd375672eb987c3b7ff1ca15fa23c116a lib/codeql/rust/elements/internal/generated/Meta.qll f1ce7cdaf2a6fa3b86f0465e33a9521d254c032468427b276d93276ffd5142be 046d72c868ee2664b8a291de16320238ece9d0612c93c96a0d601e0b6079bf90 -lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll c2d6faf1f840628dbc5aa59c90dbd8b244f6bd4a7dba25e410047fcde11ff378 2d0251b095bf15b0275d493efdd1f9ce0926a3cff6671bb550a7a672aaf62a30 +lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll 89f5d6248ea338f0b3add9de4166df411bce2f8589b164d0a69db4650e4bcd71 3e13ddfa857e0a3655e7030b3d4ab411b09d6f0ea960b098f54ffcc1d8394d91 lib/codeql/rust/elements/internal/generated/Missing.qll 16735d91df04a4e1ae52fae25db5f59a044e540755734bbab46b5fbb0fe6b0bd 28ca4e49fb7e6b4734be2f2f69e7c224c570344cc160ef80c5a5cd413e750dad lib/codeql/rust/elements/internal/generated/Module.qll ebae5d8963c9fd569c0fbad1d7770abd3fd2479437f236cbce0505ba9f9af52c fa3c382115fed18a26f1a755d8749a201b9489f82c09448a88fb8e9e1435fe5f lib/codeql/rust/elements/internal/generated/Name.qll 12aad57744b7d1b04454159536409244c47319aedd580acb58ee93ef9d7f837d 63fc67ccc085db22f82576a53489f15216a7c29d5b941b14a965eab481534e2e @@ -533,7 +536,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll c808c9d84dd7800573832b lib/codeql/rust/elements/internal/generated/ParenExpr.qll bc0731505bfe88516205ec360582a4222d2681d11342c93e15258590ddee82f2 d4bd6e0c80cf1d63746c88d4bcb3a01d4c75732e5da09e3ebd9437ced227fb60 lib/codeql/rust/elements/internal/generated/ParenPat.qll ce24b8f8ecbf0f204af200317405724063887257460c80cf250c39b2fdf37185 e7c87d37e1a0ca7ea03840017e1aa9ddb7f927f1f3b6396c0305b46aeee33db6 lib/codeql/rust/elements/internal/generated/ParenType.qll 9cc954d73f8330dcac7b475f97748b63af5c8766dee9d2f2872c0a7e4c903537 c07534c8a9c683c4a9b11d490095647e420de0a0bfc23273eaf6f31b00244273 -lib/codeql/rust/elements/internal/generated/ParentChild.qll ad728d69b3ef9555d71db2274b04a5ba99b4f815120c55032c57d077e0c954ca 64c6406626a14ed3052d3996cc47fc91e435175bd982440d948416cf878400fd +lib/codeql/rust/elements/internal/generated/ParentChild.qll 36a5d76d16a00cb18ee2e3193708b795e502ca9a92e72b8047e215961da3c5c8 dae8c9eda242e6d4c153f070ea4eefe1cbaae44aa148c5a79a852c9f1c8f7b2d lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll 299abce24762a5ab023f3cf1ab9718b83047e171aed42a8092e7a155914b1657 db1a23d18640c548f08c9f94823838b5e019ac85877c7b15df2d1493d1846572 lib/codeql/rust/elements/internal/generated/PathExpr.qll 17cdb0a7393258a207450f08e37178fc9d35d167f064ba6015be94246f3dc933 a75fdd280aff6d87e083a92030e041c2eb52b57cf7151d4a6989fcd31d6a64bf @@ -545,7 +548,7 @@ lib/codeql/rust/elements/internal/generated/PtrType.qll 5f12b6ad29b4e5ce51c205e2 lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll dc03515d678ba052c2ff2dd9f0883e0bce54cac740ba9a15e5173f292c1b6971 dc03515d678ba052c2ff2dd9f0883e0bce54cac740ba9a15e5173f292c1b6971 lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll efd93730de217cf50dcba5875595263a5eadf9f7e4e1272401342a094d158614 229b251b3d118932e31e78ac4dfb75f48b766f240f20d436062785606d44467b -lib/codeql/rust/elements/internal/generated/Raw.qll 783c3d04b798c0a5281baf88aa3ada406492e6e6b8ff41dac658d52c88f95c46 e69891409fc89f0a3a199feb6f1a734bfdd862239a5f6794de0ee811e69fab04 +lib/codeql/rust/elements/internal/generated/Raw.qll 468493674e9f891b6b289d07dd3f6d4369ab04411b8d20a81673f56dfe3abeb4 5876c9a5cc5ede7503b9f524184585abf8fba21fa94887033d2488205d3b4f94 lib/codeql/rust/elements/internal/generated/RecordExpr.qll eb6cb662e463f9260efae1a6ce874fa781172063b916ef1963f861e9942d308d 1a21cbccc8f3799ff13281e822818ebfb21d81591720a427cac3625512cb9d40 lib/codeql/rust/elements/internal/generated/RecordExprField.qll 7e9f8663d3b74ebbc9603b10c9912f082febba6bd73d344b100bbd3edf837802 fbe6b578e7fd5d5a6f21bbb8c388957ab7210a6a249ec71510a50fb35b319ea1 lib/codeql/rust/elements/internal/generated/RecordExprFieldList.qll 179a97211fe7aa6265085d4d54115cdbc0e1cd7c9b2135591e8f36d6432f13d3 dd44bbbc1e83a1ed3a587afb729d7debf7aeb7b63245de181726af13090e50c0 @@ -570,7 +573,7 @@ lib/codeql/rust/elements/internal/generated/Static.qll cae5313e08e4af44c46b25802 lib/codeql/rust/elements/internal/generated/Stmt.qll 8473ff532dd5cc9d7decaddcd174b94d610f6ca0aec8e473cc051dad9f3db917 6ef7d2b5237c2dbdcacbf7d8b39109d4dc100229f2b28b5c9e3e4fbf673ba72b lib/codeql/rust/elements/internal/generated/StmtList.qll a667193e32341e17400867c6e359878c4e645ef9f5f4d97676afc0283a33a026 a320ed678ee359302e2fc1b70a9476705cd616fcfa44a499d32f0c7715627f73 lib/codeql/rust/elements/internal/generated/Struct.qll 4d57f0db12dc7ad3e31e750a24172ef1505406b4dab16386af0674bd18bf8f4b 1a73c83df926b996f629316f74c61ea775be04532ab61b56af904223354f033e -lib/codeql/rust/elements/internal/generated/Synth.qll 99fa143232f2cfb1ef3f6ed6a51afa634c336361105e37719ce11ca6c74de8ee b3b77e1bdea36022b3be7cef000e7113059eb8b2b1afec26ae1d62e84259143b +lib/codeql/rust/elements/internal/generated/Synth.qll 908954d21685d16362d15c4170de397fd0af45bcd2038245b863196c96f0caeb 2a696c02a9c57411312ecbad592abd3718d4e73fbd070a2c5b03273358ed3c9d lib/codeql/rust/elements/internal/generated/SynthConstructors.qll 518b68ccf6d0791bc0c141486261108bb1723e37743fc7f8e4167a1d61660531 518b68ccf6d0791bc0c141486261108bb1723e37743fc7f8e4167a1d61660531 lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b lib/codeql/rust/elements/internal/generated/TokenTree.qll 8577c2b097c1be2f0f7daa5acfcf146f78674a424d99563e08a84dd3e6d91b46 d2f30764e84dbfc0a6a5d3d8a5f935cd432413688cb32da9c94e420fbc10665c @@ -605,7 +608,7 @@ lib/codeql/rust/elements/internal/generated/WhileExpr.qll fec8a9211b82a80601bf73 lib/codeql/rust/elements/internal/generated/WildcardPat.qll d74b70b57a0a66bfae017a329352a5b27a6b9e73dd5521d627f680e810c6c59e 4b913b548ba27ff3c82fcd32cf996ff329cb57d176d3bebd0fcef394486ea499 lib/codeql/rust/elements/internal/generated/YeetExpr.qll cac328200872a35337b4bcb15c851afb4743f82c080f9738d295571eb01d7392 94af734eea08129b587fed849b643e7572800e8330c0b57d727d41abda47930b lib/codeql/rust/elements/internal/generated/YieldExpr.qll 37e5f0c1e373a22bbc53d8b7f2c0e1f476e5be5080b8437c5e964f4e83fad79a 4a9a68643401637bf48e5c2b2f74a6bf0ddcb4ff76f6bffb61d436b685621e85 -lib/codeql/rust/elements.qll 926e6e5f994ef7fcd04854c4d69004d7bfd81950e132c9d3d501b4b2420db222 926e6e5f994ef7fcd04854c4d69004d7bfd81950e132c9d3d501b4b2420db222 +lib/codeql/rust/elements.qll c647c2f20c9d20d49214026ea0e2965d0b751db567baceaf7a9225a8efa2546b c647c2f20c9d20d49214026ea0e2965d0b751db567baceaf7a9225a8efa2546b test/extractor-tests/generated/Abi/Abi.ql 7f6e7dc4af86eca3ebdc79b10373988cd0871bd78b51997d3cffd969105e5fdd 2f936b6ca005c6157c755121584410c03e4a3949c23bee302fbe05ee10ce118f test/extractor-tests/generated/Abi/Abi_getAbiString.ql a496762fcec5a0887b87023bbf93e9b650f02e20113e25c44d6e4281ae8f5335 14109c7ce11ba25e3cd6e7f1b3fcb4cb00622f2a4eac91bfe43145c5f366bc52 test/extractor-tests/generated/ArgList/ArgList.ql e412927756e72165d0e7c5c9bd3fca89d08197bbf760db8fb7683c64bb2229bc 043dba8506946fbb87753e22c387987d7eded6ddb963aa067f9e60ef9024d684 diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index e69d7ea5791b..63630aa20cca 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -43,6 +43,7 @@ /lib/codeql/rust/elements/FormatArgsArg.qll linguist-generated /lib/codeql/rust/elements/FormatArgsExpr.qll linguist-generated /lib/codeql/rust/elements/Function.qll linguist-generated +/lib/codeql/rust/elements/FunctionOrMethodCallExpr.qll linguist-generated /lib/codeql/rust/elements/GenericArg.qll linguist-generated /lib/codeql/rust/elements/GenericArgList.qll linguist-generated /lib/codeql/rust/elements/GenericParam.qll linguist-generated @@ -231,6 +232,7 @@ /lib/codeql/rust/elements/internal/FormatArgsExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/FormatArgsExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/FunctionConstructor.qll linguist-generated +/lib/codeql/rust/elements/internal/FunctionOrMethodCallExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/GenericArgImpl.qll linguist-generated /lib/codeql/rust/elements/internal/GenericArgListConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/GenericArgListImpl.qll linguist-generated @@ -488,6 +490,7 @@ /lib/codeql/rust/elements/internal/generated/FormatArgsArg.qll linguist-generated /lib/codeql/rust/elements/internal/generated/FormatArgsExpr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/Function.qll linguist-generated +/lib/codeql/rust/elements/internal/generated/FunctionOrMethodCallExpr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/GenericArg.qll linguist-generated /lib/codeql/rust/elements/internal/generated/GenericArgList.qll linguist-generated /lib/codeql/rust/elements/internal/generated/GenericParam.qll linguist-generated diff --git a/rust/ql/lib/codeql/rust/elements.qll b/rust/ql/lib/codeql/rust/elements.qll index 4abbb0b4148c..3795ecbe6c55 100644 --- a/rust/ql/lib/codeql/rust/elements.qll +++ b/rust/ql/lib/codeql/rust/elements.qll @@ -46,6 +46,7 @@ import codeql.rust.elements.ForType import codeql.rust.elements.FormatArgsArg import codeql.rust.elements.FormatArgsExpr import codeql.rust.elements.Function +import codeql.rust.elements.FunctionOrMethodCallExpr import codeql.rust.elements.GenericArg import codeql.rust.elements.GenericArgList import codeql.rust.elements.GenericParam diff --git a/rust/ql/lib/codeql/rust/elements/CallExpr.qll b/rust/ql/lib/codeql/rust/elements/CallExpr.qll index 7047d6a8c3cf..bf637cb29a60 100644 --- a/rust/ql/lib/codeql/rust/elements/CallExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/CallExpr.qll @@ -4,9 +4,8 @@ */ private import internal.CallExprImpl -import codeql.rust.elements.ArgList -import codeql.rust.elements.Attr import codeql.rust.elements.Expr +import codeql.rust.elements.FunctionOrMethodCallExpr /** * A function call expression. For example: diff --git a/rust/ql/lib/codeql/rust/elements/FunctionOrMethodCallExpr.qll b/rust/ql/lib/codeql/rust/elements/FunctionOrMethodCallExpr.qll new file mode 100644 index 000000000000..3635c33e324d --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/FunctionOrMethodCallExpr.qll @@ -0,0 +1,14 @@ +// generated by codegen, do not edit +/** + * This module provides the public class `FunctionOrMethodCallExpr`. + */ + +private import internal.FunctionOrMethodCallExprImpl +import codeql.rust.elements.ArgList +import codeql.rust.elements.Attr +import codeql.rust.elements.Expr + +/** + * A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details. + */ +final class FunctionOrMethodCallExpr = Impl::FunctionOrMethodCallExpr; diff --git a/rust/ql/lib/codeql/rust/elements/MethodCallExpr.qll b/rust/ql/lib/codeql/rust/elements/MethodCallExpr.qll index ec3d305f63cf..3646d987f9fa 100644 --- a/rust/ql/lib/codeql/rust/elements/MethodCallExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/MethodCallExpr.qll @@ -4,9 +4,8 @@ */ private import internal.MethodCallExprImpl -import codeql.rust.elements.ArgList -import codeql.rust.elements.Attr import codeql.rust.elements.Expr +import codeql.rust.elements.FunctionOrMethodCallExpr import codeql.rust.elements.GenericArgList import codeql.rust.elements.NameRef diff --git a/rust/ql/lib/codeql/rust/elements/internal/FunctionOrMethodCallExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/FunctionOrMethodCallExprImpl.qll new file mode 100644 index 000000000000..1ad34f210cfb --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/FunctionOrMethodCallExprImpl.qll @@ -0,0 +1,19 @@ +// generated by codegen, remove this comment if you wish to edit this file +/** + * This module provides a hand-modifiable wrapper around the generated class `FunctionOrMethodCallExpr`. + * + * INTERNAL: Do not use. + */ + +private import codeql.rust.elements.internal.generated.FunctionOrMethodCallExpr + +/** + * INTERNAL: This module contains the customizable definition of `FunctionOrMethodCallExpr` and should not + * be referenced directly. + */ +module Impl { + /** + * A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details. + */ + class FunctionOrMethodCallExpr extends Generated::FunctionOrMethodCallExpr { } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/CallExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/CallExpr.qll index f7b27e6e2a84..66b4ce10cb71 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/CallExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/CallExpr.qll @@ -6,10 +6,8 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw -import codeql.rust.elements.ArgList -import codeql.rust.elements.Attr import codeql.rust.elements.Expr -import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl +import codeql.rust.elements.internal.FunctionOrMethodCallExprImpl::Impl as FunctionOrMethodCallExprImpl /** * INTERNAL: This module contains the fully generated definition of `CallExpr` and should not @@ -27,40 +25,9 @@ module Generated { * INTERNAL: Do not reference the `Generated::CallExpr` class directly. * Use the subclass `CallExpr`, where the following predicates are available. */ - class CallExpr extends Synth::TCallExpr, ExprImpl::Expr { + class CallExpr extends Synth::TCallExpr, FunctionOrMethodCallExprImpl::FunctionOrMethodCallExpr { override string getAPrimaryQlClass() { result = "CallExpr" } - /** - * Gets the argument list of this call expression, if it exists. - */ - ArgList getArgList() { - result = - Synth::convertArgListFromRaw(Synth::convertCallExprToRaw(this).(Raw::CallExpr).getArgList()) - } - - /** - * Holds if `getArgList()` exists. - */ - final predicate hasArgList() { exists(this.getArgList()) } - - /** - * Gets the `index`th attr of this call expression (0-based). - */ - Attr getAttr(int index) { - result = - Synth::convertAttrFromRaw(Synth::convertCallExprToRaw(this).(Raw::CallExpr).getAttr(index)) - } - - /** - * Gets any of the attrs of this call expression. - */ - final Attr getAnAttr() { result = this.getAttr(_) } - - /** - * Gets the number of attrs of this call expression. - */ - final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } - /** * Gets the expression of this call expression, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/FunctionOrMethodCallExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/FunctionOrMethodCallExpr.qll new file mode 100644 index 000000000000..e4ecbaa1a699 --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/FunctionOrMethodCallExpr.qll @@ -0,0 +1,59 @@ +// generated by codegen, do not edit +/** + * This module provides the generated definition of `FunctionOrMethodCallExpr`. + * INTERNAL: Do not import directly. + */ + +private import codeql.rust.elements.internal.generated.Synth +private import codeql.rust.elements.internal.generated.Raw +import codeql.rust.elements.ArgList +import codeql.rust.elements.Attr +import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl + +/** + * INTERNAL: This module contains the fully generated definition of `FunctionOrMethodCallExpr` and should not + * be referenced directly. + */ +module Generated { + /** + * A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details. + * INTERNAL: Do not reference the `Generated::FunctionOrMethodCallExpr` class directly. + * Use the subclass `FunctionOrMethodCallExpr`, where the following predicates are available. + */ + class FunctionOrMethodCallExpr extends Synth::TFunctionOrMethodCallExpr, ExprImpl::Expr { + /** + * Gets the argument list of this function or method call expression, if it exists. + */ + ArgList getArgList() { + result = + Synth::convertArgListFromRaw(Synth::convertFunctionOrMethodCallExprToRaw(this) + .(Raw::FunctionOrMethodCallExpr) + .getArgList()) + } + + /** + * Holds if `getArgList()` exists. + */ + final predicate hasArgList() { exists(this.getArgList()) } + + /** + * Gets the `index`th attr of this function or method call expression (0-based). + */ + Attr getAttr(int index) { + result = + Synth::convertAttrFromRaw(Synth::convertFunctionOrMethodCallExprToRaw(this) + .(Raw::FunctionOrMethodCallExpr) + .getAttr(index)) + } + + /** + * Gets any of the attrs of this function or method call expression. + */ + final Attr getAnAttr() { result = this.getAttr(_) } + + /** + * Gets the number of attrs of this function or method call expression. + */ + final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } + } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll index 0cc8f2437065..de5cef9e70b5 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll @@ -6,10 +6,8 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw -import codeql.rust.elements.ArgList -import codeql.rust.elements.Attr import codeql.rust.elements.Expr -import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl +import codeql.rust.elements.internal.FunctionOrMethodCallExprImpl::Impl as FunctionOrMethodCallExprImpl import codeql.rust.elements.GenericArgList import codeql.rust.elements.NameRef @@ -27,44 +25,11 @@ module Generated { * INTERNAL: Do not reference the `Generated::MethodCallExpr` class directly. * Use the subclass `MethodCallExpr`, where the following predicates are available. */ - class MethodCallExpr extends Synth::TMethodCallExpr, ExprImpl::Expr { + class MethodCallExpr extends Synth::TMethodCallExpr, + FunctionOrMethodCallExprImpl::FunctionOrMethodCallExpr + { override string getAPrimaryQlClass() { result = "MethodCallExpr" } - /** - * Gets the argument list of this method call expression, if it exists. - */ - ArgList getArgList() { - result = - Synth::convertArgListFromRaw(Synth::convertMethodCallExprToRaw(this) - .(Raw::MethodCallExpr) - .getArgList()) - } - - /** - * Holds if `getArgList()` exists. - */ - final predicate hasArgList() { exists(this.getArgList()) } - - /** - * Gets the `index`th attr of this method call expression (0-based). - */ - Attr getAttr(int index) { - result = - Synth::convertAttrFromRaw(Synth::convertMethodCallExprToRaw(this) - .(Raw::MethodCallExpr) - .getAttr(index)) - } - - /** - * Gets any of the attrs of this method call expression. - */ - final Attr getAnAttr() { result = this.getAttr(_) } - - /** - * Gets the number of attrs of this method call expression. - */ - final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } - /** * Gets the generic argument list of this method call expression, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll index a5c77c02914f..4dbb92f77f92 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -1380,29 +1380,6 @@ private module Impl { ) } - private Element getImmediateChildOfCallExpr(CallExpr e, int index, string partialPredicateCall) { - exists(int b, int bExpr, int n, int nArgList, int nAttr, int nExpr | - b = 0 and - bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and - n = bExpr and - nArgList = n + 1 and - nAttr = nArgList + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nExpr = nAttr + 1 and - ( - none() - or - result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) - or - index = n and result = e.getArgList() and partialPredicateCall = "ArgList()" - or - result = e.getAttr(index - nArgList) and - partialPredicateCall = "Attr(" + (index - nArgList).toString() + ")" - or - index = nAttr and result = e.getExpr() and partialPredicateCall = "Expr()" - ) - ) - } - private Element getImmediateChildOfCastExpr(CastExpr e, int index, string partialPredicateCall) { exists(int b, int bExpr, int n, int nAttr, int nExpr, int nTy | b = 0 and @@ -1714,6 +1691,28 @@ private module Impl { ) } + private Element getImmediateChildOfFunctionOrMethodCallExpr( + FunctionOrMethodCallExpr e, int index, string partialPredicateCall + ) { + exists(int b, int bExpr, int n, int nArgList, int nAttr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + nArgList = n + 1 and + nAttr = nArgList + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or + index = n and result = e.getArgList() and partialPredicateCall = "ArgList()" + or + result = e.getAttr(index - nArgList) and + partialPredicateCall = "Attr(" + (index - nArgList).toString() + ")" + ) + ) + } + private Element getImmediateChildOfIdentPat(IdentPat e, int index, string partialPredicateCall) { exists(int b, int bPat, int n, int nAttr, int nName, int nPat | b = 0 and @@ -2058,42 +2057,6 @@ private module Impl { ) } - private Element getImmediateChildOfMethodCallExpr( - MethodCallExpr e, int index, string partialPredicateCall - ) { - exists( - int b, int bExpr, int n, int nArgList, int nAttr, int nGenericArgList, int nNameRef, - int nReceiver - | - b = 0 and - bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and - n = bExpr and - nArgList = n + 1 and - nAttr = nArgList + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nGenericArgList = nAttr + 1 and - nNameRef = nGenericArgList + 1 and - nReceiver = nNameRef + 1 and - ( - none() - or - result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) - or - index = n and result = e.getArgList() and partialPredicateCall = "ArgList()" - or - result = e.getAttr(index - nArgList) and - partialPredicateCall = "Attr(" + (index - nArgList).toString() + ")" - or - index = nAttr and - result = e.getGenericArgList() and - partialPredicateCall = "GenericArgList()" - or - index = nGenericArgList and result = e.getNameRef() and partialPredicateCall = "NameRef()" - or - index = nNameRef and result = e.getReceiver() and partialPredicateCall = "Receiver()" - ) - ) - } - private Element getImmediateChildOfNeverType(NeverType e, int index, string partialPredicateCall) { exists(int b, int bTypeRef, int n | b = 0 and @@ -2780,6 +2743,24 @@ private module Impl { ) } + private Element getImmediateChildOfCallExpr(CallExpr e, int index, string partialPredicateCall) { + exists(int b, int bFunctionOrMethodCallExpr, int n, int nExpr | + b = 0 and + bFunctionOrMethodCallExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfFunctionOrMethodCallExpr(e, i, _)) | i) and + n = bFunctionOrMethodCallExpr and + nExpr = n + 1 and + ( + none() + or + result = getImmediateChildOfFunctionOrMethodCallExpr(e, index - b, partialPredicateCall) + or + index = n and result = e.getExpr() and partialPredicateCall = "Expr()" + ) + ) + } + private Element getImmediateChildOfConst(Const e, int index, string partialPredicateCall) { exists( int b, int bAssocItem, int bItem, int n, int nAttr, int nBody, int nName, int nTy, @@ -3096,6 +3077,34 @@ private module Impl { ) } + private Element getImmediateChildOfMethodCallExpr( + MethodCallExpr e, int index, string partialPredicateCall + ) { + exists( + int b, int bFunctionOrMethodCallExpr, int n, int nGenericArgList, int nNameRef, int nReceiver + | + b = 0 and + bFunctionOrMethodCallExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfFunctionOrMethodCallExpr(e, i, _)) | i) and + n = bFunctionOrMethodCallExpr and + nGenericArgList = n + 1 and + nNameRef = nGenericArgList + 1 and + nReceiver = nNameRef + 1 and + ( + none() + or + result = getImmediateChildOfFunctionOrMethodCallExpr(e, index - b, partialPredicateCall) + or + index = n and result = e.getGenericArgList() and partialPredicateCall = "GenericArgList()" + or + index = nGenericArgList and result = e.getNameRef() and partialPredicateCall = "NameRef()" + or + index = nNameRef and result = e.getReceiver() and partialPredicateCall = "Receiver()" + ) + ) + } + private Element getImmediateChildOfModule(Module e, int index, string partialPredicateCall) { exists(int b, int bItem, int n, int nAttr, int nItemList, int nName, int nVisibility | b = 0 and @@ -3519,8 +3528,6 @@ private module Impl { or result = getImmediateChildOfBreakExpr(e, index, partialAccessor) or - result = getImmediateChildOfCallExpr(e, index, partialAccessor) - or result = getImmediateChildOfCastExpr(e, index, partialAccessor) or result = getImmediateChildOfClosureExpr(e, index, partialAccessor) @@ -3581,8 +3588,6 @@ private module Impl { or result = getImmediateChildOfMatchExpr(e, index, partialAccessor) or - result = getImmediateChildOfMethodCallExpr(e, index, partialAccessor) - or result = getImmediateChildOfNeverType(e, index, partialAccessor) or result = getImmediateChildOfOffsetOfExpr(e, index, partialAccessor) @@ -3655,6 +3660,8 @@ private module Impl { or result = getImmediateChildOfYieldExpr(e, index, partialAccessor) or + result = getImmediateChildOfCallExpr(e, index, partialAccessor) + or result = getImmediateChildOfConst(e, index, partialAccessor) or result = getImmediateChildOfEnum(e, index, partialAccessor) @@ -3673,6 +3680,8 @@ private module Impl { or result = getImmediateChildOfMacroRules(e, index, partialAccessor) or + result = getImmediateChildOfMethodCallExpr(e, index, partialAccessor) + or result = getImmediateChildOfModule(e, index, partialAccessor) or result = getImmediateChildOfStatic(e, index, partialAccessor) diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index 4726ec0fd391..57d3827561cf 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -1395,35 +1395,6 @@ module Raw { Lifetime getLifetime() { break_expr_lifetimes(this, result) } } - /** - * INTERNAL: Do not use. - * A function call expression. For example: - * ```rust - * foo(42); - * foo::(42); - * foo[0](42); - * foo(1) = 4; - * ``` - */ - class CallExpr extends @call_expr, Expr { - override string toString() { result = "CallExpr" } - - /** - * Gets the argument list of this call expression, if it exists. - */ - ArgList getArgList() { call_expr_arg_lists(this, result) } - - /** - * Gets the `index`th attr of this call expression (0-based). - */ - Attr getAttr(int index) { call_expr_attrs(this, index, result) } - - /** - * Gets the expression of this call expression, if it exists. - */ - Expr getExpr() { call_expr_exprs(this, result) } - } - /** * INTERNAL: Do not use. * A cast expression. For example: @@ -1781,6 +1752,22 @@ module Raw { Expr getTemplate() { format_args_expr_templates(this, result) } } + /** + * INTERNAL: Do not use. + * A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details. + */ + class FunctionOrMethodCallExpr extends @function_or_method_call_expr, Expr { + /** + * Gets the argument list of this function or method call expression, if it exists. + */ + ArgList getArgList() { function_or_method_call_expr_arg_lists(this, result) } + + /** + * Gets the `index`th attr of this function or method call expression (0-based). + */ + Attr getAttr(int index) { function_or_method_call_expr_attrs(this, index, result) } + } + /** * INTERNAL: Do not use. * A binding pattern. For example: @@ -2206,43 +2193,6 @@ module Raw { MatchArmList getMatchArmList() { match_expr_match_arm_lists(this, result) } } - /** - * INTERNAL: Do not use. - * A method call expression. For example: - * ```rust - * x.foo(42); - * x.foo::(42); - * ``` - */ - class MethodCallExpr extends @method_call_expr, Expr { - override string toString() { result = "MethodCallExpr" } - - /** - * Gets the argument list of this method call expression, if it exists. - */ - ArgList getArgList() { method_call_expr_arg_lists(this, result) } - - /** - * Gets the `index`th attr of this method call expression (0-based). - */ - Attr getAttr(int index) { method_call_expr_attrs(this, index, result) } - - /** - * Gets the generic argument list of this method call expression, if it exists. - */ - GenericArgList getGenericArgList() { method_call_expr_generic_arg_lists(this, result) } - - /** - * Gets the name reference of this method call expression, if it exists. - */ - NameRef getNameRef() { method_call_expr_name_refs(this, result) } - - /** - * Gets the receiver of this method call expression, if it exists. - */ - Expr getReceiver() { method_call_expr_receivers(this, result) } - } - /** * INTERNAL: Do not use. * A NeverType. For example: @@ -2999,6 +2949,25 @@ module Raw { Expr getExpr() { yield_expr_exprs(this, result) } } + /** + * INTERNAL: Do not use. + * A function call expression. For example: + * ```rust + * foo(42); + * foo::(42); + * foo[0](42); + * foo(1) = 4; + * ``` + */ + class CallExpr extends @call_expr, FunctionOrMethodCallExpr { + override string toString() { result = "CallExpr" } + + /** + * Gets the expression of this call expression, if it exists. + */ + Expr getExpr() { call_expr_exprs(this, result) } + } + /** * INTERNAL: Do not use. * A Const. For example: @@ -3334,6 +3303,33 @@ module Raw { Visibility getVisibility() { macro_rules_visibilities(this, result) } } + /** + * INTERNAL: Do not use. + * A method call expression. For example: + * ```rust + * x.foo(42); + * x.foo::(42); + * ``` + */ + class MethodCallExpr extends @method_call_expr, FunctionOrMethodCallExpr { + override string toString() { result = "MethodCallExpr" } + + /** + * Gets the generic argument list of this method call expression, if it exists. + */ + GenericArgList getGenericArgList() { method_call_expr_generic_arg_lists(this, result) } + + /** + * Gets the name reference of this method call expression, if it exists. + */ + NameRef getNameRef() { method_call_expr_name_refs(this, result) } + + /** + * Gets the receiver of this method call expression, if it exists. + */ + Expr getReceiver() { method_call_expr_receivers(this, result) } + } + /** * INTERNAL: Do not use. * A module declaration. For example: diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll index 891da3025dbe..192f22dae05a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll @@ -608,9 +608,9 @@ module Synth { */ class TExpr = TArrayExpr or TAsmExpr or TAwaitExpr or TBecomeExpr or TBinaryExpr or TBlockExpr or - TBreakExpr or TCallExpr or TCastExpr or TClosureExpr or TContinueExpr or TFieldExpr or - TForExpr or TFormatArgsExpr or TIfExpr or TIndexExpr or TLetExpr or TLiteralExpr or - TLoopExpr or TMacroExpr or TMatchExpr or TMethodCallExpr or TOffsetOfExpr or TParenExpr or + TBreakExpr or TCastExpr or TClosureExpr or TContinueExpr or TFieldExpr or TForExpr or + TFormatArgsExpr or TFunctionOrMethodCallExpr or TIfExpr or TIndexExpr or TLetExpr or + TLiteralExpr or TLoopExpr or TMacroExpr or TMatchExpr or TOffsetOfExpr or TParenExpr or TPathExpr or TPrefixExpr or TRangeExpr or TRecordExpr or TRefExpr or TReturnExpr or TTryExpr or TTupleExpr or TUnderscoreExpr or TWhileExpr or TYeetExpr or TYieldExpr; @@ -624,6 +624,11 @@ module Synth { */ class TFieldList = TRecordFieldList or TTupleFieldList; + /** + * INTERNAL: Do not use. + */ + class TFunctionOrMethodCallExpr = TCallExpr or TMethodCallExpr; + /** * INTERNAL: Do not use. */ @@ -1693,8 +1698,6 @@ module Synth { or result = convertBreakExprFromRaw(e) or - result = convertCallExprFromRaw(e) - or result = convertCastExprFromRaw(e) or result = convertClosureExprFromRaw(e) @@ -1707,6 +1710,8 @@ module Synth { or result = convertFormatArgsExprFromRaw(e) or + result = convertFunctionOrMethodCallExprFromRaw(e) + or result = convertIfExprFromRaw(e) or result = convertIndexExprFromRaw(e) @@ -1721,8 +1726,6 @@ module Synth { or result = convertMatchExprFromRaw(e) or - result = convertMethodCallExprFromRaw(e) - or result = convertOffsetOfExprFromRaw(e) or result = convertParenExprFromRaw(e) @@ -1776,6 +1779,16 @@ module Synth { result = convertTupleFieldListFromRaw(e) } + /** + * INTERNAL: Do not use. + * Converts a raw DB element to a synthesized `TFunctionOrMethodCallExpr`, if possible. + */ + TFunctionOrMethodCallExpr convertFunctionOrMethodCallExprFromRaw(Raw::Element e) { + result = convertCallExprFromRaw(e) + or + result = convertMethodCallExprFromRaw(e) + } + /** * INTERNAL: Do not use. * Converts a raw DB element to a synthesized `TGenericArg`, if possible. @@ -2963,8 +2976,6 @@ module Synth { or result = convertBreakExprToRaw(e) or - result = convertCallExprToRaw(e) - or result = convertCastExprToRaw(e) or result = convertClosureExprToRaw(e) @@ -2977,6 +2988,8 @@ module Synth { or result = convertFormatArgsExprToRaw(e) or + result = convertFunctionOrMethodCallExprToRaw(e) + or result = convertIfExprToRaw(e) or result = convertIndexExprToRaw(e) @@ -2991,8 +3004,6 @@ module Synth { or result = convertMatchExprToRaw(e) or - result = convertMethodCallExprToRaw(e) - or result = convertOffsetOfExprToRaw(e) or result = convertParenExprToRaw(e) @@ -3046,6 +3057,16 @@ module Synth { result = convertTupleFieldListToRaw(e) } + /** + * INTERNAL: Do not use. + * Converts a synthesized `TFunctionOrMethodCallExpr` to a raw DB element, if possible. + */ + Raw::Element convertFunctionOrMethodCallExprToRaw(TFunctionOrMethodCallExpr e) { + result = convertCallExprToRaw(e) + or + result = convertMethodCallExprToRaw(e) + } + /** * INTERNAL: Do not use. * Converts a synthesized `TGenericArg` to a raw DB element, if possible. diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index 831141fef1dd..113c3fe7d7e2 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -273,13 +273,13 @@ closure_binder_generic_param_lists( | @binary_expr | @block_expr | @break_expr -| @call_expr | @cast_expr | @closure_expr | @continue_expr | @field_expr | @for_expr | @format_args_expr +| @function_or_method_call_expr | @if_expr | @index_expr | @let_expr @@ -287,7 +287,6 @@ closure_binder_generic_param_lists( | @loop_expr | @macro_expr | @match_expr -| @method_call_expr | @offset_of_expr | @paren_expr | @path_expr @@ -1301,29 +1300,6 @@ break_expr_lifetimes( int lifetime: @lifetime ref ); -call_exprs( - unique int id: @call_expr -); - -#keyset[id] -call_expr_arg_lists( - int id: @call_expr ref, - int arg_list: @arg_list ref -); - -#keyset[id, index] -call_expr_attrs( - int id: @call_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -call_expr_exprs( - int id: @call_expr ref, - int expr: @expr ref -); - cast_exprs( unique int id: @cast_expr ); @@ -1594,6 +1570,24 @@ format_args_expr_templates( int template: @expr ref ); +@function_or_method_call_expr = + @call_expr +| @method_call_expr +; + +#keyset[id] +function_or_method_call_expr_arg_lists( + int id: @function_or_method_call_expr ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +function_or_method_call_expr_attrs( + int id: @function_or_method_call_expr ref, + int index: int ref, + int attr: @attr ref +); + ident_pats( unique int id: @ident_pat ); @@ -1897,41 +1891,6 @@ match_expr_match_arm_lists( int match_arm_list: @match_arm_list ref ); -method_call_exprs( - unique int id: @method_call_expr -); - -#keyset[id] -method_call_expr_arg_lists( - int id: @method_call_expr ref, - int arg_list: @arg_list ref -); - -#keyset[id, index] -method_call_expr_attrs( - int id: @method_call_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -method_call_expr_generic_arg_lists( - int id: @method_call_expr ref, - int generic_arg_list: @generic_arg_list ref -); - -#keyset[id] -method_call_expr_name_refs( - int id: @method_call_expr ref, - int name_ref: @name_ref ref -); - -#keyset[id] -method_call_expr_receivers( - int id: @method_call_expr ref, - int receiver: @expr ref -); - never_types( unique int id: @never_type ); @@ -2466,6 +2425,16 @@ yield_expr_exprs( int expr: @expr ref ); +call_exprs( + unique int id: @call_expr +); + +#keyset[id] +call_expr_exprs( + int id: @call_expr ref, + int expr: @expr ref +); + consts( unique int id: @const ); @@ -2787,6 +2756,28 @@ macro_rules_visibilities( int visibility: @visibility ref ); +method_call_exprs( + unique int id: @method_call_expr +); + +#keyset[id] +method_call_expr_generic_arg_lists( + int id: @method_call_expr ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +method_call_expr_name_refs( + int id: @method_call_expr ref, + int name_ref: @name_ref ref +); + +#keyset[id] +method_call_expr_receivers( + int id: @method_call_expr ref, + int receiver: @expr ref +); + modules( unique int id: @module ); From d295cac6978fdcd1a6a23fd9ce9650d641cab730 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 9 Oct 2024 10:56:22 +0100 Subject: [PATCH 039/217] Always use generic method object --- go/extractor/extractor.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/go/extractor/extractor.go b/go/extractor/extractor.go index c157f7c8f672..03190183c26f 100644 --- a/go/extractor/extractor.go +++ b/go/extractor/extractor.go @@ -1637,7 +1637,7 @@ func extractType(tw *trap.Writer, tp types.Type) trap.Label { // Note that methods coming from embedded interfaces can be // accessed through `Method(i)`, so there is no need to // deal with them separately. - meth := tp.Method(i) + meth := tp.Method(i).Origin() // Note that methods do not have a parent scope, so they are // not dealt with by `extractScopes` @@ -1707,7 +1707,7 @@ func extractType(tw *trap.Writer, tp types.Type) trap.Label { // ensure all methods have labels - note that methods do not have a // parent scope, so they are not dealt with by `extractScopes` for i := 0; i < origintp.NumMethods(); i++ { - meth := origintp.Method(i) + meth := origintp.Method(i).Origin() extractMethod(tw, meth) } @@ -1715,7 +1715,7 @@ func extractType(tw *trap.Writer, tp types.Type) trap.Label { // associate all methods of underlying interface with this type if underlyingInterface, ok := underlying.(*types.Interface); ok { for i := 0; i < underlyingInterface.NumMethods(); i++ { - methlbl := extractMethod(tw, underlyingInterface.Method(i)) + methlbl := extractMethod(tw, underlyingInterface.Method(i).Origin()) dbscheme.MethodHostsTable.Emit(tw, methlbl, lbl) } } @@ -1787,7 +1787,7 @@ func getTypeLabel(tw *trap.Writer, tp types.Type) (trap.Label, bool) { case *types.Interface: var b strings.Builder for i := 0; i < tp.NumMethods(); i++ { - meth := tp.Method(i) + meth := tp.Method(i).Origin() methLbl := extractType(tw, meth.Type()) if i > 0 { b.WriteString(",") From 6f6b4a0bfef0e6cffd21f1e12fc11eddbc98083f Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 9 Oct 2024 11:09:26 +0100 Subject: [PATCH 040/217] Add check for specialized objects --- go/extractor/extractor.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/go/extractor/extractor.go b/go/extractor/extractor.go index 03190183c26f..f3209e8abdaf 100644 --- a/go/extractor/extractor.go +++ b/go/extractor/extractor.go @@ -518,6 +518,7 @@ func extractMethod(tw *trap.Writer, meth *types.Func) trap.Label { // For more information on objects, see: // https://github.com/golang/example/blob/master/gotypes/README.md#objects func extractObject(tw *trap.Writer, obj types.Object, lbl trap.Label) { + checkObjectNotSpecialized(obj) name := obj.Name() isBuiltin := obj.Parent() == types.Universe var kind int @@ -2143,3 +2144,15 @@ func skipExtractingValueForLeftOperand(tw *trap.Writer, be *ast.BinaryExpr) bool } return true } + +// checkObjectNotSpecialized exits the program if `obj` is specialized. Note +// that specialization is only possible for function objects and variable +// objects. +func checkObjectNotSpecialized(obj types.Object) { + if funcObj, ok := obj.(*types.Func); ok && funcObj != funcObj.Origin() { + log.Fatalf("Encountered unexpected specialization %s of generic function object %s", funcObj.FullName(), funcObj.Origin().FullName()) + } + if varObj, ok := obj.(*types.Var); ok && varObj != varObj.Origin() { + log.Fatalf("Encountered unexpected specialization %s of generic variable object %s", varObj.String(), varObj.Origin().String()) + } +} From 513efe222d2f3084f367d260ae4694bfdbc4a436 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 9 Oct 2024 11:19:49 +0100 Subject: [PATCH 041/217] Add check for object for specialized named type --- go/extractor/extractor.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/go/extractor/extractor.go b/go/extractor/extractor.go index f3209e8abdaf..936e0b6fdec8 100644 --- a/go/extractor/extractor.go +++ b/go/extractor/extractor.go @@ -2155,4 +2155,9 @@ func checkObjectNotSpecialized(obj types.Object) { if varObj, ok := obj.(*types.Var); ok && varObj != varObj.Origin() { log.Fatalf("Encountered unexpected specialization %s of generic variable object %s", varObj.String(), varObj.Origin().String()) } + if typeNameObj, ok := obj.(*types.TypeName); ok { + if namedType, ok := typeNameObj.Type().(*types.Named); ok && namedType != namedType.Origin() { + log.Fatalf("Encountered type object for specialization %s of named type %s", namedType.String(), namedType.Origin().String()) + } + } } From 8a895740bafc0639ce607753853a8af77534fc1b Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 10 Oct 2024 14:05:39 +0100 Subject: [PATCH 042/217] Ruby: Move language specific code out of FileSystem.qll (at least for now). --- ruby/ql/lib/codeql/files/FileSystem.qll | 18 ------------------ ruby/ql/lib/codeql/ruby/AST.qll | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/ruby/ql/lib/codeql/files/FileSystem.qll b/ruby/ql/lib/codeql/files/FileSystem.qll index 8985cc333447..528dde52fd91 100644 --- a/ruby/ql/lib/codeql/files/FileSystem.qll +++ b/ruby/ql/lib/codeql/files/FileSystem.qll @@ -2,7 +2,6 @@ private import codeql.Locations private import codeql.util.FileSystem -private import codeql.ruby.Diagnostics private module Input implements InputSig { abstract class ContainerBase extends @container { @@ -35,20 +34,3 @@ class File extends Container, Impl::File { /** Holds if this file was extracted from ordinary source code. */ predicate fromSource() { any() } } - -/** - * A successfully extracted file, that is, a file that was extracted and - * contains no extraction errors or warnings. - */ -class SuccessfullyExtractedFile extends File { - SuccessfullyExtractedFile() { - not exists(Diagnostic d | - d.getLocation().getFile() = this and - ( - d instanceof ExtractionError - or - d instanceof ExtractionWarning - ) - ) - } -} diff --git a/ruby/ql/lib/codeql/ruby/AST.qll b/ruby/ql/lib/codeql/ruby/AST.qll index e8dc28692c07..e98749af4273 100644 --- a/ruby/ql/lib/codeql/ruby/AST.qll +++ b/ruby/ql/lib/codeql/ruby/AST.qll @@ -18,6 +18,7 @@ private import ast.internal.Scope private import ast.internal.Synthesis private import ast.internal.TreeSitter private import Customizations +private import Diagnostics cached private module Cached { @@ -166,3 +167,20 @@ class RubyFile extends File { /** Gets the number of lines of comments in this file. */ int getNumberOfLinesOfComments() { result = count(int line | this.line(line, true)) } } + +/** + * A successfully extracted file, that is, a file that was extracted and + * contains no extraction errors or warnings. + */ +class SuccessfullyExtractedFile extends RubyFile { + SuccessfullyExtractedFile() { + not exists(Diagnostic d | + d.getLocation().getFile() = this and + ( + d instanceof ExtractionError + or + d instanceof ExtractionWarning + ) + ) + } +} From 7986fc70368c6f7c5170597a395e0deca9fa4a7c Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Thu, 26 Sep 2024 05:15:41 +0200 Subject: [PATCH 043/217] Rust: avoid double '.' in trap extension --- rust/extractor/src/trap.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/extractor/src/trap.rs b/rust/extractor/src/trap.rs index 0d549ea4dc7a..7422c3a93b2b 100644 --- a/rust/extractor/src/trap.rs +++ b/rust/extractor/src/trap.rs @@ -244,7 +244,7 @@ impl TrapFileProvider { } pub fn create(&self, category: &str, key: &Path) -> TrapFile { - let path = file_paths::path_for(&self.trap_dir.join(category), key, ".trap"); + let path = file_paths::path_for(&self.trap_dir.join(category), key, "trap"); debug!("creating trap file {}", path.display()); let mut writer = trap::Writer::new(); extractor::populate_empty_location(&mut writer); From 69f0e8bcf76ed7990b45f0b077511df156dfdf23 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Tue, 1 Oct 2024 15:17:17 +0200 Subject: [PATCH 044/217] Rust: add MacroStmts and MacroItems --- rust/ast-generator/src/main.rs | 3 --- rust/extractor/src/translate/generated.rs | 24 +++++++++++++++++++++++ rust/schema/ast.py | 7 +++++++ 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/rust/ast-generator/src/main.rs b/rust/ast-generator/src/main.rs index 8d4114c8bde5..043848e902c8 100644 --- a/rust/ast-generator/src/main.rs +++ b/rust/ast-generator/src/main.rs @@ -538,9 +538,6 @@ fn main() -> std::io::Result<()> { .parse() .unwrap(); let mut grammar = codegen::grammar::lower(&grammar); - grammar - .nodes - .retain(|x| x.name != "MacroStmts" && x.name != "MacroItems"); grammar.enums.retain(|x| x.name != "Adt"); diff --git a/rust/extractor/src/translate/generated.rs b/rust/extractor/src/translate/generated.rs index 57d3cbc186b9..9725bbfa6b64 100644 --- a/rust/extractor/src/translate/generated.rs +++ b/rust/extractor/src/translate/generated.rs @@ -1004,6 +1004,17 @@ impl Translator { label } + pub(crate) fn emit_macro_items(&mut self, node: ast::MacroItems) -> Label { + let items = node.items().map(|x| self.emit_item(x)).collect(); + let label = self.trap.emit(generated::MacroItems { + id: TrapId::Star, + items, + }); + self.emit_location(label, &node); + self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + label + } + pub(crate) fn emit_macro_pat(&mut self, node: ast::MacroPat) -> Label { let macro_call = node.macro_call().map(|x| self.emit_macro_call(x)); let label = self.trap.emit(generated::MacroPat { @@ -1032,6 +1043,19 @@ impl Translator { label } + pub(crate) fn emit_macro_stmts(&mut self, node: ast::MacroStmts) -> Label { + let expr = node.expr().map(|x| self.emit_expr(x)); + let statements = node.statements().map(|x| self.emit_stmt(x)).collect(); + let label = self.trap.emit(generated::MacroStmts { + id: TrapId::Star, + expr, + statements, + }); + self.emit_location(label, &node); + self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + label + } + pub(crate) fn emit_macro_type(&mut self, node: ast::MacroType) -> Label { let macro_call = node.macro_call().map(|x| self.emit_macro_call(x)); let label = self.trap.emit(generated::MacroType { diff --git a/rust/schema/ast.py b/rust/schema/ast.py index 665afe12b7d9..6e146c7c54d9 100644 --- a/rust/schema/ast.py +++ b/rust/schema/ast.py @@ -304,6 +304,9 @@ class MacroDef(Item): class MacroExpr(Expr): macro_call: optional["MacroCall"] | child +class MacroItems(AstNode): + items: list["Item"] | child + class MacroPat(Pat): macro_call: optional["MacroCall"] | child @@ -313,6 +316,10 @@ class MacroRules(Item): token_tree: optional["TokenTree"] | child visibility: optional["Visibility"] | child +class MacroStmts(AstNode): + expr: optional["Expr"] | child + statements: list["Stmt"] | child + class MacroType(TypeRef): macro_call: optional["MacroCall"] | child From 6ede20cccc3ec4c0098203d6ab3de98d841ee95e Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Tue, 1 Oct 2024 15:18:17 +0200 Subject: [PATCH 045/217] Rust: regenerate code --- rust/extractor/src/generated/.generated.list | 2 +- rust/extractor/src/generated/top.rs | 104 ++++++++++++++++++ rust/ql/.generated.list | 20 +++- rust/ql/.gitattributes | 10 ++ rust/ql/lib/codeql/rust/elements.qll | 2 + .../lib/codeql/rust/elements/MacroItems.qll | 10 ++ .../lib/codeql/rust/elements/MacroStmts.qll | 11 ++ .../internal/MacroItemsConstructor.qll | 14 +++ .../rust/elements/internal/MacroItemsImpl.qll | 16 +++ .../internal/MacroStmtsConstructor.qll | 14 +++ .../rust/elements/internal/MacroStmtsImpl.qll | 16 +++ .../internal/generated/MacroItems.qll | 44 ++++++++ .../internal/generated/MacroStmts.qll | 58 ++++++++++ .../internal/generated/ParentChild.qll | 41 +++++++ .../rust/elements/internal/generated/Raw.qll | 29 +++++ .../elements/internal/generated/Synth.qll | 54 +++++++-- .../internal/generated/SynthConstructors.qll | 2 + rust/ql/lib/rust.dbscheme | 30 +++++ .../generated/MacroItems/MISSING_SOURCE.txt | 4 + .../generated/MacroStmts/MISSING_SOURCE.txt | 4 + 20 files changed, 472 insertions(+), 13 deletions(-) create mode 100644 rust/ql/lib/codeql/rust/elements/MacroItems.qll create mode 100644 rust/ql/lib/codeql/rust/elements/MacroStmts.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/MacroItemsConstructor.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/MacroItemsImpl.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/MacroStmtsConstructor.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/MacroStmtsImpl.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/generated/MacroItems.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/generated/MacroStmts.qll create mode 100644 rust/ql/test/extractor-tests/generated/MacroItems/MISSING_SOURCE.txt create mode 100644 rust/ql/test/extractor-tests/generated/MacroStmts/MISSING_SOURCE.txt diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index 43459827a075..7ae321e9a1a0 100644 --- a/rust/extractor/src/generated/.generated.list +++ b/rust/extractor/src/generated/.generated.list @@ -1,2 +1,2 @@ mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 -top.rs 855f5f0639dfafd8603c9b842f6470ca6d1214bb72391890a1de64db2adebba1 855f5f0639dfafd8603c9b842f6470ca6d1214bb72391890a1de64db2adebba1 +top.rs 00321b829ffca674c66daa86c003b9d5f8c64fef42873d03fa677cfa479039a2 00321b829ffca674c66daa86c003b9d5f8c64fef42873d03fa677cfa479039a2 diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index 5c234ae22aef..372760d5c133 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -1032,6 +1032,110 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct MacroItems { + pub id: trap::TrapId, + pub items: Vec>, +} + +impl trap::TrapEntry for MacroItems { + fn extract_id(&mut self) -> trap::TrapId { + std::mem::replace(&mut self.id, trap::TrapId::Star) + } + + fn emit(self, id: trap::Label, out: &mut trap::Writer) { + out.add_tuple("macro_items", vec![id.into()]); + for (i, v) in self.items.into_iter().enumerate() { + out.add_tuple("macro_items_items", vec![id.into(), i.into(), v.into()]); + } + } +} + +impl trap::TrapClass for MacroItems { + fn class_name() -> &'static str { "MacroItems" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MacroItems is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MacroItems is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MacroItems is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +#[derive(Debug)] +pub struct MacroStmts { + pub id: trap::TrapId, + pub expr: Option>, + pub statements: Vec>, +} + +impl trap::TrapEntry for MacroStmts { + fn extract_id(&mut self) -> trap::TrapId { + std::mem::replace(&mut self.id, trap::TrapId::Star) + } + + fn emit(self, id: trap::Label, out: &mut trap::Writer) { + out.add_tuple("macro_stmts", vec![id.into()]); + if let Some(v) = self.expr { + out.add_tuple("macro_stmts_exprs", vec![id.into(), v.into()]); + } + for (i, v) in self.statements.into_iter().enumerate() { + out.add_tuple("macro_stmts_statements", vec![id.into(), i.into(), v.into()]); + } + } +} + +impl trap::TrapClass for MacroStmts { + fn class_name() -> &'static str { "MacroStmts" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MacroStmts is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MacroStmts is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MacroStmts is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct MatchArm { pub id: trap::TrapId, diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index e37f6947148d..d18865bbf1ff 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -67,8 +67,10 @@ lib/codeql/rust/elements/LoopExpr.qll 58ade0bc4a01a1cc361363682fde3ea56f4c5fbb4b lib/codeql/rust/elements/MacroCall.qll 16933db15c6c0dbb717ef442f751ad8f63c444f36a12f8d56b8a05a3e5f71d1b ac05cbf50e4b06f39f58817cddbeac6f804c2d1e4f60956a960d63d495e7183d lib/codeql/rust/elements/MacroDef.qll acb39275a1a3257084314a46ad4d8477946130f57e401c70c5949ad6aafc5c5f 6a8a8db12a3ec345fede51ca36e8c6acbdce58c5144388bb94f0706416fa152a lib/codeql/rust/elements/MacroExpr.qll ea9fed13f610bab1a2c4541c994510e0cb806530b60beef0d0c36b23e3b620f0 ad11a6bbd3a229ad97a16049cc6b0f3c8740f9f75ea61bbf4eebb072db9b12d2 +lib/codeql/rust/elements/MacroItems.qll 4acf8e5ab8f84dc8fae442d52a29266be2f1e7160120bb1dd52238b3d62b4cab 0d6e25bbf1f3082b739bb846d7c3ef21a58c79e6a65b72272a00cffc3d32aa47 lib/codeql/rust/elements/MacroPat.qll dbf193b4fb544ac0b5a7dcfc31a6652de7239b6e643ff15b05868b2c142e940c 19b45c0a1eb1198e450c05d564b5d4aa0d6da29e7db84b9521eadf901e20a932 lib/codeql/rust/elements/MacroRules.qll a94535506798077043b9c1470992ac4310bf67bcce5f722080886d1b3e6d90d1 bd8e08a7171991abc85100b45267631e66d1b332caf1e5882cd17caee5cf18a3 +lib/codeql/rust/elements/MacroStmts.qll 66b3e877c4e3f8ef552152c92188aae7d5901a7b2e21dec581a61ee390be2fbc cc535cb6afb29783be37b1647d3267dd693c3434d42e1ab561d3a6a74ce20cfc lib/codeql/rust/elements/MacroType.qll e5a153643e49a6be41483ad944550a030e0500764947b4e328cef6fa08c4fbd4 a42332c0a9c5cf7317fc49f3e1049e7751004fcc3efa056bbe058a8bfa2ef0cb lib/codeql/rust/elements/MatchArm.qll c39fd6cc0da24b1ff8d1e42835bcfee7695ad13580e3c7c50acd7c881b1cd894 62a31d2bd125e6aaebefc406e541a641271d3c497a377959f94dd4735b2bfbf8 lib/codeql/rust/elements/MatchArmList.qll e6c48fd7419d88e996b82eb45e4aa2686dfd079b283b02be7710192fb2cb93a0 0ec63a0ca56f5f7f80093fd3e77b198b74c6289e67be55dc6a4deb610753c7bd @@ -274,10 +276,14 @@ lib/codeql/rust/elements/internal/MacroDefConstructor.qll 382a3bdf46905d112ee491 lib/codeql/rust/elements/internal/MacroDefImpl.qll f26e787ffd43e8cb079db01eba04412dbf32c338938acf1bc09a2f094bbdfdfe 044f43bc94fe4b6df22afae32e9f039d1d0d9e85ad9f24b6388be71211c37ce5 lib/codeql/rust/elements/internal/MacroExprConstructor.qll b12edb21ea189a1b28d96309c69c3d08e08837621af22edd67ff9416c097d2df d35bc98e7b7b5451930214c0d93dce33a2c7b5b74f36bf99f113f53db1f19c14 lib/codeql/rust/elements/internal/MacroExprImpl.qll 92dd9f658a85ae407e055f090385f451084de59190d8a00c7e1fba453c3eced4 89d544634fecdbead2ff06a26fc8132e127dab07f38b9322fa14dc55657b9f1a +lib/codeql/rust/elements/internal/MacroItemsConstructor.qll 8e9ab7ec1e0f50a22605d4e993f99a85ca8059fbb506d67bc8f5a281af367b05 2602f9db31ea0c48192c3dde3bb5625a8ed1cae4cd3408729b9e09318d5bd071 +lib/codeql/rust/elements/internal/MacroItemsImpl.qll b20e9d0ba72de335ae1df33318339c9546c7f4c7ff25b3bf6eec884a2faa33bd 3bb159223eecb566004ce27457d5d97cd676f632be14b0411ff228a1d4e8e107 lib/codeql/rust/elements/internal/MacroPatConstructor.qll 24744c1bbe21c1d249a04205fb09795ae38ed106ba1423e86ccbc5e62359eaa2 4fac3f731a1ffd87c1230d561c5236bd28dcde0d1ce0dcd7d7a84ba393669d4a lib/codeql/rust/elements/internal/MacroPatImpl.qll 7470e2d88c38c7300a64986f058ba92bb22b4945438e2e0e268f180c4f267b71 c1507df74fc4c92887f3e0a4f857f54b61f174ffae5b1af6fb70f466175d658b lib/codeql/rust/elements/internal/MacroRulesConstructor.qll dc04726ad59915ec980501c4cd3b3d2ad774f454ddbf138ff5808eba6bd63dea 8d6bf20feb850c47d1176237027ef131f18c5cbb095f6ab8b3ec58cea9bce856 lib/codeql/rust/elements/internal/MacroRulesImpl.qll 10c03adfb63ee7a4348ff5cffc6ef5300a531b048f28811a51e940b053e69f68 2498bd64aeaea9849c086abeaa6c248e4ce41b4436155f4bd4840965976d5d54 +lib/codeql/rust/elements/internal/MacroStmtsConstructor.qll c293815cd69c002ba6de1db6018672654420f3f8bdd143f9d0c620adddd2be02 d376f8f07661a8cad1b10039076fd7fca353dcacf3ca40ed6507b8c874e849ca +lib/codeql/rust/elements/internal/MacroStmtsImpl.qll 7ce09c93fedbb6453fccbc081e7ec03d2e2a088c8ff3b27e28794258ac6ff553 d48681d5ed630a1b8d563d58fdb91aa32a73e3b21420d986c8e5415c9f80280f lib/codeql/rust/elements/internal/MacroTypeConstructor.qll 0a23573a6f69b38f3d7470050b16197601d67bdd5a4b1a43a155b0b99ccdf6b5 19b623962e8e1f73e55e3ed9712d2a3fe84b9510b99062173902feb2458ec12a lib/codeql/rust/elements/internal/MacroTypeImpl.qll b8711279f09f521b05bb67568c089271b7913f863ee64dfdeec2c502de2cbdc8 51bd9d3a2fb2065bce7b193b485e225ca5c8ba2029e60cab427d43a90baf0880 lib/codeql/rust/elements/internal/MatchArmConstructor.qll b41c1d5822d54127ce376ef62c6a5fa60e11697319fc7d9c9c54fd313d784a93 96cca80e5684e5893c0e9c0dff365ef8ad9e15ff648c9969ba42d91f95abea05 @@ -512,8 +518,10 @@ lib/codeql/rust/elements/internal/generated/LoopExpr.qll 22b755dfaf238ecea722c0c lib/codeql/rust/elements/internal/generated/MacroCall.qll 8b49d44e6aeac26dc2fc4b9ba03c482c65ebf0cba089d16f9d65e784e48ccbb0 9ecf6e278007adcbdc42ed1c10e7b1c0652b6c64738b780d256c9326afa3b393 lib/codeql/rust/elements/internal/generated/MacroDef.qll e9b3f07ba41aa12a8e0bd6ec1437b26a6c363065ce134b6d059478e96c2273a6 87470dea99da1a6afb3a19565291f9382e851ba864b50a995ac6f29589efbd70 lib/codeql/rust/elements/internal/generated/MacroExpr.qll 03a1daa41866f51e479ac20f51f8406d04e9946b24f3875e3cf75a6b172c3d35 1ae8ca0ee96bd2be32575d87c07cc999a6ff7770151b66c0e3406f9454153786 +lib/codeql/rust/elements/internal/generated/MacroItems.qll ec02912230762f2759c3ed97ff52fded62ed14fb68d0807c8085a85152a5d4b1 c9cc4f8f0a1d63787995dde173f1bc8ac25351faa66b1d323e2ac1c894c9be85 lib/codeql/rust/elements/internal/generated/MacroPat.qll 9e927e09d47029a3025eaad271c975e73479a80ea933c921381b6c9d751f2866 bdf5c58ca27743eb2e2dae2aeea3f3fc21f8a4f98fe1001598876455c88e8f69 lib/codeql/rust/elements/internal/generated/MacroRules.qll 4fbd94f22b5ee0f3e5aaae39c2b9a5e9b7bf878a1017811ca589942f6de92843 49fb69543ee867bae196febea6918e621f335afdf4d3ccbf219965b37c7537b1 +lib/codeql/rust/elements/internal/generated/MacroStmts.qll 502cf5490259edaefeda30d00371a9d58872e8bfcd82fa4a30a2a1c510662949 91672ea8c4c0e1e8ef6c9628e21169dfc873da4424aaf544a3cb2b9a2c523b28 lib/codeql/rust/elements/internal/generated/MacroType.qll c462824df4a002956c036966d15cd0bce206e664888f8d0c7834dedb38b3c0bf 947480f07c40128ef3d00ad4c3a29a685472b3e20a661680c22f6bb318205ed1 lib/codeql/rust/elements/internal/generated/MatchArm.qll 8fb740a0f2e308782d9cf390672969cd7cf6e698e5b847fb02ae3fa6c205646f 42bfe8dd94fc24ec925fbd44016df111600f99d1216c9a698631373bb6048830 lib/codeql/rust/elements/internal/generated/MatchArmList.qll 13362680c037fe83fef4653562cc10a4429078316b5ec7c47b076336cf4aca2e 41c674293c13eceaca62134ae0c6778541f6a5201cbc5c146f0ba01b898dc267 @@ -533,7 +541,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll c808c9d84dd7800573832b lib/codeql/rust/elements/internal/generated/ParenExpr.qll bc0731505bfe88516205ec360582a4222d2681d11342c93e15258590ddee82f2 d4bd6e0c80cf1d63746c88d4bcb3a01d4c75732e5da09e3ebd9437ced227fb60 lib/codeql/rust/elements/internal/generated/ParenPat.qll ce24b8f8ecbf0f204af200317405724063887257460c80cf250c39b2fdf37185 e7c87d37e1a0ca7ea03840017e1aa9ddb7f927f1f3b6396c0305b46aeee33db6 lib/codeql/rust/elements/internal/generated/ParenType.qll 9cc954d73f8330dcac7b475f97748b63af5c8766dee9d2f2872c0a7e4c903537 c07534c8a9c683c4a9b11d490095647e420de0a0bfc23273eaf6f31b00244273 -lib/codeql/rust/elements/internal/generated/ParentChild.qll ad728d69b3ef9555d71db2274b04a5ba99b4f815120c55032c57d077e0c954ca 64c6406626a14ed3052d3996cc47fc91e435175bd982440d948416cf878400fd +lib/codeql/rust/elements/internal/generated/ParentChild.qll 3a14261d30beea704042dea144ef1972a93b8384eb258c6f8ff6c8254264c0e2 9fbf1176a5822728097e4c33dfefc057e381c662058b339007bea7273b6b27c6 lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll 299abce24762a5ab023f3cf1ab9718b83047e171aed42a8092e7a155914b1657 db1a23d18640c548f08c9f94823838b5e019ac85877c7b15df2d1493d1846572 lib/codeql/rust/elements/internal/generated/PathExpr.qll 17cdb0a7393258a207450f08e37178fc9d35d167f064ba6015be94246f3dc933 a75fdd280aff6d87e083a92030e041c2eb52b57cf7151d4a6989fcd31d6a64bf @@ -545,7 +553,7 @@ lib/codeql/rust/elements/internal/generated/PtrType.qll 5f12b6ad29b4e5ce51c205e2 lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll dc03515d678ba052c2ff2dd9f0883e0bce54cac740ba9a15e5173f292c1b6971 dc03515d678ba052c2ff2dd9f0883e0bce54cac740ba9a15e5173f292c1b6971 lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll efd93730de217cf50dcba5875595263a5eadf9f7e4e1272401342a094d158614 229b251b3d118932e31e78ac4dfb75f48b766f240f20d436062785606d44467b -lib/codeql/rust/elements/internal/generated/Raw.qll 783c3d04b798c0a5281baf88aa3ada406492e6e6b8ff41dac658d52c88f95c46 e69891409fc89f0a3a199feb6f1a734bfdd862239a5f6794de0ee811e69fab04 +lib/codeql/rust/elements/internal/generated/Raw.qll 32faaa3ad1bd2e1bc0d588caed9ef629f1bd3f2cef3d43a2edea7b3c7d14467d a64b8cf08ef39876a7b3e33555c3305cba320d80acc8dead5ec8be6dd1fe225f lib/codeql/rust/elements/internal/generated/RecordExpr.qll eb6cb662e463f9260efae1a6ce874fa781172063b916ef1963f861e9942d308d 1a21cbccc8f3799ff13281e822818ebfb21d81591720a427cac3625512cb9d40 lib/codeql/rust/elements/internal/generated/RecordExprField.qll 7e9f8663d3b74ebbc9603b10c9912f082febba6bd73d344b100bbd3edf837802 fbe6b578e7fd5d5a6f21bbb8c388957ab7210a6a249ec71510a50fb35b319ea1 lib/codeql/rust/elements/internal/generated/RecordExprFieldList.qll 179a97211fe7aa6265085d4d54115cdbc0e1cd7c9b2135591e8f36d6432f13d3 dd44bbbc1e83a1ed3a587afb729d7debf7aeb7b63245de181726af13090e50c0 @@ -570,8 +578,8 @@ lib/codeql/rust/elements/internal/generated/Static.qll cae5313e08e4af44c46b25802 lib/codeql/rust/elements/internal/generated/Stmt.qll 8473ff532dd5cc9d7decaddcd174b94d610f6ca0aec8e473cc051dad9f3db917 6ef7d2b5237c2dbdcacbf7d8b39109d4dc100229f2b28b5c9e3e4fbf673ba72b lib/codeql/rust/elements/internal/generated/StmtList.qll a667193e32341e17400867c6e359878c4e645ef9f5f4d97676afc0283a33a026 a320ed678ee359302e2fc1b70a9476705cd616fcfa44a499d32f0c7715627f73 lib/codeql/rust/elements/internal/generated/Struct.qll 4d57f0db12dc7ad3e31e750a24172ef1505406b4dab16386af0674bd18bf8f4b 1a73c83df926b996f629316f74c61ea775be04532ab61b56af904223354f033e -lib/codeql/rust/elements/internal/generated/Synth.qll 99fa143232f2cfb1ef3f6ed6a51afa634c336361105e37719ce11ca6c74de8ee b3b77e1bdea36022b3be7cef000e7113059eb8b2b1afec26ae1d62e84259143b -lib/codeql/rust/elements/internal/generated/SynthConstructors.qll 518b68ccf6d0791bc0c141486261108bb1723e37743fc7f8e4167a1d61660531 518b68ccf6d0791bc0c141486261108bb1723e37743fc7f8e4167a1d61660531 +lib/codeql/rust/elements/internal/generated/Synth.qll 2ab340e385c8c759132040f8317480e29b881fc06652d9ac79d3a6c7ba226e43 a302504aff25f9c8da4aa6a0d83eb7daa7a18496cf71654be925dda460c28b61 +lib/codeql/rust/elements/internal/generated/SynthConstructors.qll 5d30b6d4f36791637f250734ee38820102c64f196454e20f79e30097da1a8e20 5d30b6d4f36791637f250734ee38820102c64f196454e20f79e30097da1a8e20 lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b lib/codeql/rust/elements/internal/generated/TokenTree.qll 8577c2b097c1be2f0f7daa5acfcf146f78674a424d99563e08a84dd3e6d91b46 d2f30764e84dbfc0a6a5d3d8a5f935cd432413688cb32da9c94e420fbc10665c lib/codeql/rust/elements/internal/generated/Trait.qll 32bdbb4dc9f03488195a90320a947013135cd2fae1b9d62b4f71ed9a4e39a967 5dab0fbec64698bf3cdae04879d3d1665cf82386b7b030ed69e6b20776ffa9fc @@ -605,7 +613,7 @@ lib/codeql/rust/elements/internal/generated/WhileExpr.qll fec8a9211b82a80601bf73 lib/codeql/rust/elements/internal/generated/WildcardPat.qll d74b70b57a0a66bfae017a329352a5b27a6b9e73dd5521d627f680e810c6c59e 4b913b548ba27ff3c82fcd32cf996ff329cb57d176d3bebd0fcef394486ea499 lib/codeql/rust/elements/internal/generated/YeetExpr.qll cac328200872a35337b4bcb15c851afb4743f82c080f9738d295571eb01d7392 94af734eea08129b587fed849b643e7572800e8330c0b57d727d41abda47930b lib/codeql/rust/elements/internal/generated/YieldExpr.qll 37e5f0c1e373a22bbc53d8b7f2c0e1f476e5be5080b8437c5e964f4e83fad79a 4a9a68643401637bf48e5c2b2f74a6bf0ddcb4ff76f6bffb61d436b685621e85 -lib/codeql/rust/elements.qll 926e6e5f994ef7fcd04854c4d69004d7bfd81950e132c9d3d501b4b2420db222 926e6e5f994ef7fcd04854c4d69004d7bfd81950e132c9d3d501b4b2420db222 +lib/codeql/rust/elements.qll c4c6906be828eb2fa9cc5dcaf4df197a45c8e1c606f8665ca9e58c24715fd077 c4c6906be828eb2fa9cc5dcaf4df197a45c8e1c606f8665ca9e58c24715fd077 test/extractor-tests/generated/Abi/Abi.ql 7f6e7dc4af86eca3ebdc79b10373988cd0871bd78b51997d3cffd969105e5fdd 2f936b6ca005c6157c755121584410c03e4a3949c23bee302fbe05ee10ce118f test/extractor-tests/generated/Abi/Abi_getAbiString.ql a496762fcec5a0887b87023bbf93e9b650f02e20113e25c44d6e4281ae8f5335 14109c7ce11ba25e3cd6e7f1b3fcb4cb00622f2a4eac91bfe43145c5f366bc52 test/extractor-tests/generated/ArgList/ArgList.ql e412927756e72165d0e7c5c9bd3fca89d08197bbf760db8fb7683c64bb2229bc 043dba8506946fbb87753e22c387987d7eded6ddb963aa067f9e60ef9024d684 @@ -820,6 +828,7 @@ test/extractor-tests/generated/MacroDef/MacroDef_getName.ql 6bc8a17804f23782e98f test/extractor-tests/generated/MacroDef/MacroDef_getVisibility.ql d858ccaab381432c529bf4a621afc82ea5e4b810b463f2b1f551de79908e14e7 83a85c4f90417ab44570a862642d8f8fc9208e62ba20ca69b32d39a3190381aa test/extractor-tests/generated/MacroExpr/MacroExpr.ql 69445cf24f5bec5c3f11f0ebf13604891bb2c0dffe715612628e5572587c7a6c 5434db79d94e437c86126d9cf20bf1e86e5537f462a57b9bf6b22a2caa95cc40 test/extractor-tests/generated/MacroExpr/MacroExpr_getMacroCall.ql 8859743e23b987225a6a1933054a1ed8f5f1442b61a769599e2efd143f4feb9e d2d336135ff4d2ea65e79430dee8d0f69f9d7818a674f5446903d986f3948b92 +test/extractor-tests/generated/MacroItems/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 test/extractor-tests/generated/MacroPat/MacroPat.ql d9ec72d4d6a7342ee2d9aa7e90227faa31792ca5842fe948d7fdf22597a123b7 74b0f21ef2bb6c13aae74dba1eea97451755110909a083360e2c56cfbc76fd91 test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.ql 398996f0d0f2aa6d3b58d80b26c7d1185b5094d455c6c5c7f075f6d414150aa6 b4662e57cac36ed0e692201f53ba46c3d0826bba99c5cc6dfcb302b44dd2154b test/extractor-tests/generated/MacroRules/MacroRules.ql 0742faf18179fa34e0f43361e9e4b807bfc242d232f6b3664a35e138a47d39c5 10e1cf45f32a27cb46bd61f5dd45416e2c0c9f25e880f6d213597a7d96e19103 @@ -827,6 +836,7 @@ test/extractor-tests/generated/MacroRules/MacroRules_getAttr.ql 7de501c724e34655 test/extractor-tests/generated/MacroRules/MacroRules_getName.ql 591606e3accae8b8fb49e1218c4867a42724ac209cf99786db0e5d7ea0bf55d5 d2936ef5aa4bbf024372516dde3de578990aafb2b8675bbbf0f72e8b54eb82a8 test/extractor-tests/generated/MacroRules/MacroRules_getTokenTree.ql 7598d33c3d86f9ad8629219b90667b2b65e3a1e18c6b0887291df9455a319cab 69d90446743e78e851145683c17677497fe42ed02f61f2b2974e216dc6e05b01 test/extractor-tests/generated/MacroRules/MacroRules_getVisibility.ql 5306cc85f470d21ebcbe6e98436334b0bf5ba819a0ae186569ba7e88c31636c6 fcbf5c54e5a904767a6f4d37d853072aa0040738e622c49c9a02dec8739d6587 +test/extractor-tests/generated/MacroStmts/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 test/extractor-tests/generated/MacroType/MacroType.ql 408327fdb4d7cf096536457401cc280f83cd7e4f6fa9aebd65e64031f6c119cf 0c502d25194ab96eb068a85e3f57a9217510a951fa923e9d7a20fd75412bd6da test/extractor-tests/generated/MacroType/MacroType_getMacroCall.ql 565be7a72670218d7999d3f6cec4e704b754c217186243f1b24c334589fa82e2 ba413c712783320188800e2a78738b09c40fe9a6305c08d9e67e971a8fca96ee test/extractor-tests/generated/MatchArm/MatchArm.ql 512aa404c94ba40b859564f07e9dffe6a5e687fafb039556e9145f4f3742981c 529f96e38cede8a26054f8981d4ba1d189c17d14d0f92d622eb20acd8f3d7e5d diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index e69d7ea5791b..495ea8eff4c7 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -69,8 +69,10 @@ /lib/codeql/rust/elements/MacroCall.qll linguist-generated /lib/codeql/rust/elements/MacroDef.qll linguist-generated /lib/codeql/rust/elements/MacroExpr.qll linguist-generated +/lib/codeql/rust/elements/MacroItems.qll linguist-generated /lib/codeql/rust/elements/MacroPat.qll linguist-generated /lib/codeql/rust/elements/MacroRules.qll linguist-generated +/lib/codeql/rust/elements/MacroStmts.qll linguist-generated /lib/codeql/rust/elements/MacroType.qll linguist-generated /lib/codeql/rust/elements/MatchArm.qll linguist-generated /lib/codeql/rust/elements/MatchArmList.qll linguist-generated @@ -276,10 +278,14 @@ /lib/codeql/rust/elements/internal/MacroDefImpl.qll linguist-generated /lib/codeql/rust/elements/internal/MacroExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/MacroExprImpl.qll linguist-generated +/lib/codeql/rust/elements/internal/MacroItemsConstructor.qll linguist-generated +/lib/codeql/rust/elements/internal/MacroItemsImpl.qll linguist-generated /lib/codeql/rust/elements/internal/MacroPatConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/MacroPatImpl.qll linguist-generated /lib/codeql/rust/elements/internal/MacroRulesConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/MacroRulesImpl.qll linguist-generated +/lib/codeql/rust/elements/internal/MacroStmtsConstructor.qll linguist-generated +/lib/codeql/rust/elements/internal/MacroStmtsImpl.qll linguist-generated /lib/codeql/rust/elements/internal/MacroTypeConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/MacroTypeImpl.qll linguist-generated /lib/codeql/rust/elements/internal/MatchArmConstructor.qll linguist-generated @@ -514,8 +520,10 @@ /lib/codeql/rust/elements/internal/generated/MacroCall.qll linguist-generated /lib/codeql/rust/elements/internal/generated/MacroDef.qll linguist-generated /lib/codeql/rust/elements/internal/generated/MacroExpr.qll linguist-generated +/lib/codeql/rust/elements/internal/generated/MacroItems.qll linguist-generated /lib/codeql/rust/elements/internal/generated/MacroPat.qll linguist-generated /lib/codeql/rust/elements/internal/generated/MacroRules.qll linguist-generated +/lib/codeql/rust/elements/internal/generated/MacroStmts.qll linguist-generated /lib/codeql/rust/elements/internal/generated/MacroType.qll linguist-generated /lib/codeql/rust/elements/internal/generated/MatchArm.qll linguist-generated /lib/codeql/rust/elements/internal/generated/MatchArmList.qll linguist-generated @@ -822,6 +830,7 @@ /test/extractor-tests/generated/MacroDef/MacroDef_getVisibility.ql linguist-generated /test/extractor-tests/generated/MacroExpr/MacroExpr.ql linguist-generated /test/extractor-tests/generated/MacroExpr/MacroExpr_getMacroCall.ql linguist-generated +/test/extractor-tests/generated/MacroItems/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/MacroPat/MacroPat.ql linguist-generated /test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.ql linguist-generated /test/extractor-tests/generated/MacroRules/MacroRules.ql linguist-generated @@ -829,6 +838,7 @@ /test/extractor-tests/generated/MacroRules/MacroRules_getName.ql linguist-generated /test/extractor-tests/generated/MacroRules/MacroRules_getTokenTree.ql linguist-generated /test/extractor-tests/generated/MacroRules/MacroRules_getVisibility.ql linguist-generated +/test/extractor-tests/generated/MacroStmts/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/MacroType/MacroType.ql linguist-generated /test/extractor-tests/generated/MacroType/MacroType_getMacroCall.ql linguist-generated /test/extractor-tests/generated/MatchArm/MatchArm.ql linguist-generated diff --git a/rust/ql/lib/codeql/rust/elements.qll b/rust/ql/lib/codeql/rust/elements.qll index 4abbb0b4148c..2e4c30b48a6a 100644 --- a/rust/ql/lib/codeql/rust/elements.qll +++ b/rust/ql/lib/codeql/rust/elements.qll @@ -72,8 +72,10 @@ import codeql.rust.elements.LoopExpr import codeql.rust.elements.MacroCall import codeql.rust.elements.MacroDef import codeql.rust.elements.MacroExpr +import codeql.rust.elements.MacroItems import codeql.rust.elements.MacroPat import codeql.rust.elements.MacroRules +import codeql.rust.elements.MacroStmts import codeql.rust.elements.MacroType import codeql.rust.elements.MatchArm import codeql.rust.elements.MatchArmList diff --git a/rust/ql/lib/codeql/rust/elements/MacroItems.qll b/rust/ql/lib/codeql/rust/elements/MacroItems.qll new file mode 100644 index 000000000000..621c9884a57d --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/MacroItems.qll @@ -0,0 +1,10 @@ +// generated by codegen, do not edit +/** + * This module provides the public class `MacroItems`. + */ + +private import internal.MacroItemsImpl +import codeql.rust.elements.AstNode +import codeql.rust.elements.Item + +final class MacroItems = Impl::MacroItems; diff --git a/rust/ql/lib/codeql/rust/elements/MacroStmts.qll b/rust/ql/lib/codeql/rust/elements/MacroStmts.qll new file mode 100644 index 000000000000..a47f35ddeba5 --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/MacroStmts.qll @@ -0,0 +1,11 @@ +// generated by codegen, do not edit +/** + * This module provides the public class `MacroStmts`. + */ + +private import internal.MacroStmtsImpl +import codeql.rust.elements.AstNode +import codeql.rust.elements.Expr +import codeql.rust.elements.Stmt + +final class MacroStmts = Impl::MacroStmts; diff --git a/rust/ql/lib/codeql/rust/elements/internal/MacroItemsConstructor.qll b/rust/ql/lib/codeql/rust/elements/internal/MacroItemsConstructor.qll new file mode 100644 index 000000000000..90c37c4f2788 --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/MacroItemsConstructor.qll @@ -0,0 +1,14 @@ +// generated by codegen, remove this comment if you wish to edit this file +/** + * This module defines the hook used internally to tweak the characteristic predicate of + * `MacroItems` synthesized instances. + * INTERNAL: Do not use. + */ + +private import codeql.rust.elements.internal.generated.Raw + +/** + * The characteristic predicate of `MacroItems` synthesized instances. + * INTERNAL: Do not use. + */ +predicate constructMacroItems(Raw::MacroItems id) { any() } diff --git a/rust/ql/lib/codeql/rust/elements/internal/MacroItemsImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MacroItemsImpl.qll new file mode 100644 index 000000000000..9d04aff8b24e --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/MacroItemsImpl.qll @@ -0,0 +1,16 @@ +// generated by codegen, remove this comment if you wish to edit this file +/** + * This module provides a hand-modifiable wrapper around the generated class `MacroItems`. + * + * INTERNAL: Do not use. + */ + +private import codeql.rust.elements.internal.generated.MacroItems + +/** + * INTERNAL: This module contains the customizable definition of `MacroItems` and should not + * be referenced directly. + */ +module Impl { + class MacroItems extends Generated::MacroItems { } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/MacroStmtsConstructor.qll b/rust/ql/lib/codeql/rust/elements/internal/MacroStmtsConstructor.qll new file mode 100644 index 000000000000..6f5889551252 --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/MacroStmtsConstructor.qll @@ -0,0 +1,14 @@ +// generated by codegen, remove this comment if you wish to edit this file +/** + * This module defines the hook used internally to tweak the characteristic predicate of + * `MacroStmts` synthesized instances. + * INTERNAL: Do not use. + */ + +private import codeql.rust.elements.internal.generated.Raw + +/** + * The characteristic predicate of `MacroStmts` synthesized instances. + * INTERNAL: Do not use. + */ +predicate constructMacroStmts(Raw::MacroStmts id) { any() } diff --git a/rust/ql/lib/codeql/rust/elements/internal/MacroStmtsImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MacroStmtsImpl.qll new file mode 100644 index 000000000000..432a28e66ced --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/MacroStmtsImpl.qll @@ -0,0 +1,16 @@ +// generated by codegen, remove this comment if you wish to edit this file +/** + * This module provides a hand-modifiable wrapper around the generated class `MacroStmts`. + * + * INTERNAL: Do not use. + */ + +private import codeql.rust.elements.internal.generated.MacroStmts + +/** + * INTERNAL: This module contains the customizable definition of `MacroStmts` and should not + * be referenced directly. + */ +module Impl { + class MacroStmts extends Generated::MacroStmts { } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroItems.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroItems.qll new file mode 100644 index 000000000000..b9c802be8433 --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroItems.qll @@ -0,0 +1,44 @@ +// generated by codegen, do not edit +/** + * This module provides the generated definition of `MacroItems`. + * INTERNAL: Do not import directly. + */ + +private import codeql.rust.elements.internal.generated.Synth +private import codeql.rust.elements.internal.generated.Raw +import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl +import codeql.rust.elements.Item + +/** + * INTERNAL: This module contains the fully generated definition of `MacroItems` and should not + * be referenced directly. + */ +module Generated { + /** + * INTERNAL: Do not reference the `Generated::MacroItems` class directly. + * Use the subclass `MacroItems`, where the following predicates are available. + */ + class MacroItems extends Synth::TMacroItems, AstNodeImpl::AstNode { + override string getAPrimaryQlClass() { result = "MacroItems" } + + /** + * Gets the `index`th item of this macro items (0-based). + */ + Item getItem(int index) { + result = + Synth::convertItemFromRaw(Synth::convertMacroItemsToRaw(this) + .(Raw::MacroItems) + .getItem(index)) + } + + /** + * Gets any of the items of this macro items. + */ + final Item getAnItem() { result = this.getItem(_) } + + /** + * Gets the number of items of this macro items. + */ + final int getNumberOfItems() { result = count(int i | exists(this.getItem(i))) } + } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroStmts.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroStmts.qll new file mode 100644 index 000000000000..331277241fa5 --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroStmts.qll @@ -0,0 +1,58 @@ +// generated by codegen, do not edit +/** + * This module provides the generated definition of `MacroStmts`. + * INTERNAL: Do not import directly. + */ + +private import codeql.rust.elements.internal.generated.Synth +private import codeql.rust.elements.internal.generated.Raw +import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl +import codeql.rust.elements.Expr +import codeql.rust.elements.Stmt + +/** + * INTERNAL: This module contains the fully generated definition of `MacroStmts` and should not + * be referenced directly. + */ +module Generated { + /** + * INTERNAL: Do not reference the `Generated::MacroStmts` class directly. + * Use the subclass `MacroStmts`, where the following predicates are available. + */ + class MacroStmts extends Synth::TMacroStmts, AstNodeImpl::AstNode { + override string getAPrimaryQlClass() { result = "MacroStmts" } + + /** + * Gets the expression of this macro statements, if it exists. + */ + Expr getExpr() { + result = + Synth::convertExprFromRaw(Synth::convertMacroStmtsToRaw(this).(Raw::MacroStmts).getExpr()) + } + + /** + * Holds if `getExpr()` exists. + */ + final predicate hasExpr() { exists(this.getExpr()) } + + /** + * Gets the `index`th statement of this macro statements (0-based). + */ + Stmt getStatement(int index) { + result = + Synth::convertStmtFromRaw(Synth::convertMacroStmtsToRaw(this) + .(Raw::MacroStmts) + .getStatement(index)) + } + + /** + * Gets any of the statements of this macro statements. + */ + final Stmt getAStatement() { result = this.getStatement(_) } + + /** + * Gets the number of statements of this macro statements. + */ + final int getNumberOfStatements() { result = count(int i | exists(this.getStatement(i))) } + } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll index a5c77c02914f..88a02d60fa71 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -398,6 +398,43 @@ private module Impl { ) } + private Element getImmediateChildOfMacroItems(MacroItems e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n, int nItem | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + nItem = n + 1 + max(int i | i = -1 or exists(e.getItem(i)) | i) and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or + result = e.getItem(index - n) and + partialPredicateCall = "Item(" + (index - n).toString() + ")" + ) + ) + } + + private Element getImmediateChildOfMacroStmts(MacroStmts e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n, int nExpr, int nStatement | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + nExpr = n + 1 and + nStatement = nExpr + 1 + max(int i | i = -1 or exists(e.getStatement(i)) | i) and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or + index = n and result = e.getExpr() and partialPredicateCall = "Expr()" + or + result = e.getStatement(index - nExpr) and + partialPredicateCall = "Statement(" + (index - nExpr).toString() + ")" + ) + ) + } + private Element getImmediateChildOfMatchArm(MatchArm e, int index, string partialPredicateCall) { exists(int b, int bAstNode, int n, int nAttr, int nExpr, int nGuard, int nPat | b = 0 and @@ -3435,6 +3472,10 @@ private module Impl { or result = getImmediateChildOfLifetime(e, index, partialAccessor) or + result = getImmediateChildOfMacroItems(e, index, partialAccessor) + or + result = getImmediateChildOfMacroStmts(e, index, partialAccessor) + or result = getImmediateChildOfMatchArm(e, index, partialAccessor) or result = getImmediateChildOfMatchArmList(e, index, partialAccessor) diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index 4726ec0fd391..6ebc715567c9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -329,6 +329,35 @@ module Raw { string getText() { lifetime_texts(this, result) } } + /** + * INTERNAL: Do not use. + */ + class MacroItems extends @macro_items, AstNode { + override string toString() { result = "MacroItems" } + + /** + * Gets the `index`th item of this macro items (0-based). + */ + Item getItem(int index) { macro_items_items(this, index, result) } + } + + /** + * INTERNAL: Do not use. + */ + class MacroStmts extends @macro_stmts, AstNode { + override string toString() { result = "MacroStmts" } + + /** + * Gets the expression of this macro statements, if it exists. + */ + Expr getExpr() { macro_stmts_exprs(this, result) } + + /** + * Gets the `index`th statement of this macro statements (0-based). + */ + Stmt getStatement(int index) { macro_stmts_statements(this, index, result) } + } + /** * INTERNAL: Do not use. * A match arm. For example: diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll index 891da3025dbe..53fa252f306d 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll @@ -250,6 +250,10 @@ module Synth { * INTERNAL: Do not use. */ TMacroExpr(Raw::MacroExpr id) { constructMacroExpr(id) } or + /** + * INTERNAL: Do not use. + */ + TMacroItems(Raw::MacroItems id) { constructMacroItems(id) } or /** * INTERNAL: Do not use. */ @@ -258,6 +262,10 @@ module Synth { * INTERNAL: Do not use. */ TMacroRules(Raw::MacroRules id) { constructMacroRules(id) } or + /** + * INTERNAL: Do not use. + */ + TMacroStmts(Raw::MacroStmts id) { constructMacroStmts(id) } or /** * INTERNAL: Do not use. */ @@ -595,13 +603,13 @@ module Synth { TAbi or TArgList or TAssocItem or TAssocItemList or TAttr or TClosureBinder or TExpr or TExternItem or TExternItemList or TFieldList or TFormatArgsArg or TGenericArg or TGenericArgList or TGenericParam or TGenericParamList or TItemList or TLabel or TLetElse or - TLifetime or TMatchArm or TMatchArmList or TMatchGuard or TMeta or TName or TNameRef or - TParam or TParamList or TPat or TPath or TPathSegment or TRecordExprField or - TRecordExprFieldList or TRecordField or TRecordPatField or TRecordPatFieldList or TRename or - TRetType or TReturnTypeSyntax or TSelfParam or TSourceFile or TStmt or TStmtList or - TToken or TTokenTree or TTupleField or TTypeBound or TTypeBoundList or TTypeRef or - TUseTree or TUseTreeList or TVariant or TVariantList or TVisibility or TWhereClause or - TWherePred; + TLifetime or TMacroItems or TMacroStmts or TMatchArm or TMatchArmList or TMatchGuard or + TMeta or TName or TNameRef or TParam or TParamList or TPat or TPath or TPathSegment or + TRecordExprField or TRecordExprFieldList or TRecordField or TRecordPatField or + TRecordPatFieldList or TRename or TRetType or TReturnTypeSyntax or TSelfParam or + TSourceFile or TStmt or TStmtList or TToken or TTokenTree or TTupleField or TTypeBound or + TTypeBoundList or TTypeRef or TUseTree or TUseTreeList or TVariant or TVariantList or + TVisibility or TWhereClause or TWherePred; /** * INTERNAL: Do not use. @@ -1032,6 +1040,12 @@ module Synth { */ TMacroExpr convertMacroExprFromRaw(Raw::Element e) { result = TMacroExpr(e) } + /** + * INTERNAL: Do not use. + * Converts a raw element to a synthesized `TMacroItems`, if possible. + */ + TMacroItems convertMacroItemsFromRaw(Raw::Element e) { result = TMacroItems(e) } + /** * INTERNAL: Do not use. * Converts a raw element to a synthesized `TMacroPat`, if possible. @@ -1044,6 +1058,12 @@ module Synth { */ TMacroRules convertMacroRulesFromRaw(Raw::Element e) { result = TMacroRules(e) } + /** + * INTERNAL: Do not use. + * Converts a raw element to a synthesized `TMacroStmts`, if possible. + */ + TMacroStmts convertMacroStmtsFromRaw(Raw::Element e) { result = TMacroStmts(e) } + /** * INTERNAL: Do not use. * Converts a raw element to a synthesized `TMacroType`, if possible. @@ -1591,6 +1611,10 @@ module Synth { or result = convertLifetimeFromRaw(e) or + result = convertMacroItemsFromRaw(e) + or + result = convertMacroStmtsFromRaw(e) + or result = convertMatchArmFromRaw(e) or result = convertMatchArmListFromRaw(e) @@ -2302,6 +2326,12 @@ module Synth { */ Raw::Element convertMacroExprToRaw(TMacroExpr e) { e = TMacroExpr(result) } + /** + * INTERNAL: Do not use. + * Converts a synthesized `TMacroItems` to a raw DB element, if possible. + */ + Raw::Element convertMacroItemsToRaw(TMacroItems e) { e = TMacroItems(result) } + /** * INTERNAL: Do not use. * Converts a synthesized `TMacroPat` to a raw DB element, if possible. @@ -2314,6 +2344,12 @@ module Synth { */ Raw::Element convertMacroRulesToRaw(TMacroRules e) { e = TMacroRules(result) } + /** + * INTERNAL: Do not use. + * Converts a synthesized `TMacroStmts` to a raw DB element, if possible. + */ + Raw::Element convertMacroStmtsToRaw(TMacroStmts e) { e = TMacroStmts(result) } + /** * INTERNAL: Do not use. * Converts a synthesized `TMacroType` to a raw DB element, if possible. @@ -2861,6 +2897,10 @@ module Synth { or result = convertLifetimeToRaw(e) or + result = convertMacroItemsToRaw(e) + or + result = convertMacroStmtsToRaw(e) + or result = convertMatchArmToRaw(e) or result = convertMatchArmListToRaw(e) diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/SynthConstructors.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/SynthConstructors.qll index 7462e41379cc..3d02f199e78e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/SynthConstructors.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/SynthConstructors.qll @@ -62,8 +62,10 @@ import codeql.rust.elements.internal.LoopExprConstructor import codeql.rust.elements.internal.MacroCallConstructor import codeql.rust.elements.internal.MacroDefConstructor import codeql.rust.elements.internal.MacroExprConstructor +import codeql.rust.elements.internal.MacroItemsConstructor import codeql.rust.elements.internal.MacroPatConstructor import codeql.rust.elements.internal.MacroRulesConstructor +import codeql.rust.elements.internal.MacroStmtsConstructor import codeql.rust.elements.internal.MacroTypeConstructor import codeql.rust.elements.internal.MatchArmConstructor import codeql.rust.elements.internal.MatchArmListConstructor diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index 831141fef1dd..17fd9f3d5177 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -153,6 +153,8 @@ locatable_locations( | @label | @let_else | @lifetime +| @macro_items +| @macro_stmts | @match_arm | @match_arm_list | @match_guard @@ -433,6 +435,34 @@ lifetime_texts( string text: string ref ); +macro_items( + unique int id: @macro_items +); + +#keyset[id, index] +macro_items_items( + int id: @macro_items ref, + int index: int ref, + int item: @item ref +); + +macro_stmts( + unique int id: @macro_stmts +); + +#keyset[id] +macro_stmts_exprs( + int id: @macro_stmts ref, + int expr: @expr ref +); + +#keyset[id, index] +macro_stmts_statements( + int id: @macro_stmts ref, + int index: int ref, + int statement: @stmt ref +); + match_arms( unique int id: @match_arm ); diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/MISSING_SOURCE.txt b/rust/ql/test/extractor-tests/generated/MacroItems/MISSING_SOURCE.txt new file mode 100644 index 000000000000..7f96b17b1f3c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroItems/MISSING_SOURCE.txt @@ -0,0 +1,4 @@ +// generated by codegen, do not edit + +After a source file is added in this directory and codegen is run again, test queries +will appear and this file will be deleted diff --git a/rust/ql/test/extractor-tests/generated/MacroStmts/MISSING_SOURCE.txt b/rust/ql/test/extractor-tests/generated/MacroStmts/MISSING_SOURCE.txt new file mode 100644 index 000000000000..7f96b17b1f3c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroStmts/MISSING_SOURCE.txt @@ -0,0 +1,4 @@ +// generated by codegen, do not edit + +After a source file is added in this directory and codegen is run again, test queries +will appear and this file will be deleted From cad2b7413764b67fe18e4653e325081e8f55be12 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Tue, 24 Sep 2024 10:12:55 +0200 Subject: [PATCH 046/217] Rust: integrate Rust Analyzer's Semantic module into extractor --- Cargo.lock | 2 + rust/ast-generator/src/main.rs | 2 +- rust/extractor/Cargo.toml | 2 + rust/extractor/src/main.rs | 71 +++-------- rust/extractor/src/rust_analyzer.rs | 144 ++++++++++++++++++++++ rust/extractor/src/translate/base.rs | 15 ++- rust/extractor/src/translate/generated.rs | 2 +- 7 files changed, 176 insertions(+), 62 deletions(-) create mode 100644 rust/extractor/src/rust_analyzer.rs diff --git a/Cargo.lock b/Cargo.lock index 07176705783f..327f62e7935b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -390,11 +390,13 @@ dependencies = [ "ra_ap_base_db", "ra_ap_hir", "ra_ap_hir_def", + "ra_ap_hir_expand", "ra_ap_ide_db", "ra_ap_load-cargo", "ra_ap_parser", "ra_ap_paths", "ra_ap_project_model", + "ra_ap_span", "ra_ap_syntax", "ra_ap_vfs", "rust-extractor-macros", diff --git a/rust/ast-generator/src/main.rs b/rust/ast-generator/src/main.rs index 043848e902c8..3a248df4a190 100644 --- a/rust/ast-generator/src/main.rs +++ b/rust/ast-generator/src/main.rs @@ -428,7 +428,7 @@ use ra_ap_syntax::ast::{{ }}; use ra_ap_syntax::{{ast, AstNode}}; -impl Translator {{ +impl Translator<'_> {{ fn emit_else_branch(&mut self, node: ast::ElseBranch) -> Label {{ match node {{ ast::ElseBranch::IfExpr(inner) => self.emit_if_expr(inner).into(), diff --git a/rust/extractor/Cargo.toml b/rust/extractor/Cargo.toml index 71ad6d8ac452..2a7112912582 100644 --- a/rust/extractor/Cargo.toml +++ b/rust/extractor/Cargo.toml @@ -13,12 +13,14 @@ ra_ap_base_db = "0.0.232" ra_ap_hir = "0.0.232" ra_ap_hir_def = "0.0.232" ra_ap_ide_db = "0.0.232" +ra_ap_hir_expand = "0.0.232" ra_ap_load-cargo = "0.0.232" ra_ap_paths = "0.0.232" ra_ap_project_model = "0.0.232" ra_ap_syntax = "0.0.232" ra_ap_vfs = "0.0.232" ra_ap_parser = "0.0.232" +ra_ap_span = "0.0.232" serde = "1.0.209" serde_with = "3.9.0" stderrlog = "0.6.0" diff --git a/rust/extractor/src/main.rs b/rust/extractor/src/main.rs index 81032636ceb0..2d79fedebf3a 100644 --- a/rust/extractor/src/main.rs +++ b/rust/extractor/src/main.rs @@ -1,76 +1,28 @@ use anyhow::Context; use ra_ap_ide_db::line_index::LineIndex; -use ra_ap_parser::Edition; -use std::borrow::Cow; mod archive; mod config; pub mod generated; +mod rust_analyzer; mod translate; pub mod trap; -use ra_ap_syntax::ast::SourceFile; -use ra_ap_syntax::{AstNode, SyntaxError, TextRange, TextSize}; - -fn from_utf8_lossy(v: &[u8]) -> (Cow<'_, str>, Option) { - let mut iter = v.utf8_chunks(); - let (first_valid, first_invalid) = if let Some(chunk) = iter.next() { - let valid = chunk.valid(); - let invalid = chunk.invalid(); - if invalid.is_empty() { - debug_assert_eq!(valid.len(), v.len()); - return (Cow::Borrowed(valid), None); - } - (valid, invalid) - } else { - return (Cow::Borrowed(""), None); - }; - - const REPLACEMENT: &str = "\u{FFFD}"; - let error_start = first_valid.len() as u32; - let error_end = error_start + first_invalid.len() as u32; - let error_range = TextRange::new(TextSize::new(error_start), TextSize::new(error_end)); - let error = SyntaxError::new("invalid utf-8 sequence".to_owned(), error_range); - let mut res = String::with_capacity(v.len()); - res.push_str(first_valid); - - res.push_str(REPLACEMENT); - - for chunk in iter { - res.push_str(chunk.valid()); - if !chunk.invalid().is_empty() { - res.push_str(REPLACEMENT); - } - } - - (Cow::Owned(res), Some(error)) -} fn extract( - archiver: &archive::Archiver, + rust_analyzer: &rust_analyzer::RustAnalyzer, traps: &trap::TrapFileProvider, file: std::path::PathBuf, ) -> anyhow::Result<()> { - let file = std::path::absolute(&file).unwrap_or(file); - let file = std::fs::canonicalize(&file).unwrap_or(file); - archiver.archive(&file); - let input = std::fs::read(&file)?; - let (input, err) = from_utf8_lossy(&input); - let line_index = LineIndex::new(&input); + let (ast, input, parse_errors, semi) = rust_analyzer.parse(&file); + let line_index = LineIndex::new(input.as_ref()); let display_path = file.to_string_lossy(); let mut trap = traps.create("source", &file); let label = trap.emit_file(&file); - let mut translator = translate::Translator::new(trap, label, line_index); - if let Some(err) = err { - translator.emit_parse_error(display_path.as_ref(), err); - } - let parse = ra_ap_syntax::ast::SourceFile::parse(&input, Edition::CURRENT); - for err in parse.errors() { + let mut translator = translate::Translator::new(trap, label, line_index, semi); + + for err in parse_errors { translator.emit_parse_error(display_path.as_ref(), err); } - if let Some(ast) = SourceFile::cast(parse.syntax_node()) { - translator.emit_source_file(ast); - } else { - log::warn!("Skipped {}", display_path); - } + translator.emit_source_file(ast); translator.trap.commit()?; Ok(()) } @@ -81,12 +33,17 @@ fn main() -> anyhow::Result<()> { .verbosity(2 + cfg.verbose as usize) .init()?; log::info!("{cfg:?}"); + let rust_analyzer = rust_analyzer::RustAnalyzer::new(&cfg)?; + let traps = trap::TrapFileProvider::new(&cfg).context("failed to set up trap files")?; let archiver = archive::Archiver { root: cfg.source_archive_dir, }; for file in cfg.inputs { - extract(&archiver, &traps, file)?; + let file = std::path::absolute(&file).unwrap_or(file); + let file = std::fs::canonicalize(&file).unwrap_or(file); + archiver.archive(&file); + extract(&rust_analyzer, &traps, file)?; } Ok(()) diff --git a/rust/extractor/src/rust_analyzer.rs b/rust/extractor/src/rust_analyzer.rs new file mode 100644 index 000000000000..e1d818dc3801 --- /dev/null +++ b/rust/extractor/src/rust_analyzer.rs @@ -0,0 +1,144 @@ +use crate::config::Config; +use anyhow::Context; +use itertools::Itertools; +use log::info; +use ra_ap_base_db::SourceDatabase; +use ra_ap_hir::Semantics; +use ra_ap_ide_db::RootDatabase; +use ra_ap_load_cargo::{load_workspace_at, LoadCargoConfig, ProcMacroServerChoice}; +use ra_ap_paths::Utf8PathBuf; +use ra_ap_project_model::CargoConfig; +use ra_ap_project_model::RustLibSource; +use ra_ap_span::Edition; +use ra_ap_span::EditionedFileId; +use ra_ap_span::TextRange; +use ra_ap_span::TextSize; +use ra_ap_syntax::SourceFile; +use ra_ap_syntax::SyntaxError; +use ra_ap_vfs::AbsPathBuf; +use ra_ap_vfs::Vfs; +use ra_ap_vfs::VfsPath; +use std::borrow::Cow; +use std::collections::HashMap; +use std::path::{Path, PathBuf}; +use triomphe::Arc; +pub struct RustAnalyzer { + workspace: HashMap, +} + +impl RustAnalyzer { + pub fn new(cfg: &Config) -> anyhow::Result { + let mut workspace = HashMap::new(); + let config = CargoConfig { + sysroot: Some(RustLibSource::Discover), + target_dir: ra_ap_paths::Utf8PathBuf::from_path_buf(cfg.scratch_dir.to_path_buf()) + .map(|x| x.join("target")) + .ok(), + ..Default::default() + }; + let progress = |t| (log::info!("progress: {}", t)); + let load_config = LoadCargoConfig { + load_out_dirs_from_check: true, + with_proc_macro_server: ProcMacroServerChoice::Sysroot, + prefill_caches: false, + }; + let projects = find_project_manifests(&cfg.inputs).context("loading inputs")?; + for project in projects { + let manifest = project.manifest_path(); + let (db, vfs, _macro_server) = + load_workspace_at(manifest.as_ref(), &config, &load_config, &progress)?; + let path: &Path = manifest.parent().as_ref(); + workspace.insert(path.to_path_buf(), (vfs, db)); + } + Ok(RustAnalyzer { workspace }) + } + pub fn parse( + &self, + path: &PathBuf, + ) -> ( + SourceFile, + Arc, + Vec, + Option>, + ) { + let mut p = path.as_path(); + while let Some(parent) = p.parent() { + p = parent; + if let Some((vfs, db)) = self.workspace.get(parent) { + if let Some(file_id) = Utf8PathBuf::from_path_buf(path.to_path_buf()) + .ok() + .and_then(|x| AbsPathBuf::try_from(x).ok()) + .map(VfsPath::from) + .and_then(|x| vfs.file_id(&x)) + { + let semi = Semantics::new(db); + let file_id = EditionedFileId::current_edition(file_id); + + return ( + semi.parse(file_id), + db.file_text(file_id.into()), + db.parse_errors(file_id) + .map(|x| x.to_vec()) + .unwrap_or_default(), + Some(semi), + ); + } + } + } + let input = std::fs::read(&path).unwrap(); + let (input, err) = from_utf8_lossy(&input); + let parse = ra_ap_syntax::ast::SourceFile::parse(&input, Edition::CURRENT); + let mut errors = parse.errors(); + errors.extend(err.into_iter()); + (parse.tree(), input.as_ref().into(), errors, None) + } +} + +fn find_project_manifests( + files: &[PathBuf], +) -> anyhow::Result> { + let current = std::env::current_dir()?; + let abs_files: Vec<_> = files + .iter() + .map(|path| AbsPathBuf::assert_utf8(current.join(path))) + .collect(); + let ret = ra_ap_project_model::ProjectManifest::discover_all(&abs_files); + info!( + "found manifests: {}", + ret.iter().map(|m| format!("{m}")).join(", ") + ); + Ok(ret) +} +fn from_utf8_lossy(v: &[u8]) -> (Cow<'_, str>, Option) { + let mut iter = v.utf8_chunks(); + let (first_valid, first_invalid) = if let Some(chunk) = iter.next() { + let valid = chunk.valid(); + let invalid = chunk.invalid(); + if invalid.is_empty() { + debug_assert_eq!(valid.len(), v.len()); + return (Cow::Borrowed(valid), None); + } + (valid, invalid) + } else { + return (Cow::Borrowed(""), None); + }; + + const REPLACEMENT: &str = "\u{FFFD}"; + let error_start = first_valid.len() as u32; + let error_end = error_start + first_invalid.len() as u32; + let error_range = TextRange::new(TextSize::new(error_start), TextSize::new(error_end)); + let error = SyntaxError::new("invalid utf-8 sequence".to_owned(), error_range); + let mut res = String::with_capacity(v.len()); + res.push_str(first_valid); + + res.push_str(REPLACEMENT); + + for chunk in iter { + res.push_str(chunk.valid()); + if !chunk.invalid().is_empty() { + res.push_str(REPLACEMENT); + } + } + + (Cow::Owned(res), Some(error)) +} diff --git a/rust/extractor/src/translate/base.rs b/rust/extractor/src/translate/base.rs index 0c10150882ea..96d6cb0b007e 100644 --- a/rust/extractor/src/translate/base.rs +++ b/rust/extractor/src/translate/base.rs @@ -2,7 +2,9 @@ use crate::generated::{self, AstNode}; use crate::trap::{DiagnosticSeverity, TrapFile, TrapId}; use crate::trap::{Label, TrapClass}; use codeql_extractor::trap::{self}; +use ra_ap_hir::Semantics; use ra_ap_ide_db::line_index::{LineCol, LineIndex}; +use ra_ap_ide_db::RootDatabase; use ra_ap_parser::SyntaxKind; use ra_ap_syntax::ast::RangeItem; use ra_ap_syntax::{ast, NodeOrToken, SyntaxElementChildren, SyntaxError, SyntaxToken, TextRange}; @@ -56,18 +58,25 @@ impl TextValue for ast::RangePat { self.op_token().map(|x| x.text().to_string()) } } -pub struct Translator { +pub struct Translator<'a> { pub trap: TrapFile, label: trap::Label, line_index: LineIndex, + semi: Option>, } -impl Translator { - pub fn new(trap: TrapFile, label: trap::Label, line_index: LineIndex) -> Translator { +impl Translator<'_> { + pub fn new( + trap: TrapFile, + label: trap::Label, + line_index: LineIndex, + semi: Option>, + ) -> Translator { Translator { trap, label, line_index, + semi, } } pub fn location(&self, range: TextRange) -> (LineCol, LineCol) { diff --git a/rust/extractor/src/translate/generated.rs b/rust/extractor/src/translate/generated.rs index 9725bbfa6b64..45d1c540602a 100644 --- a/rust/extractor/src/translate/generated.rs +++ b/rust/extractor/src/translate/generated.rs @@ -11,7 +11,7 @@ use ra_ap_syntax::ast::{ }; use ra_ap_syntax::{ast, AstNode}; -impl Translator { +impl Translator<'_> { fn emit_else_branch(&mut self, node: ast::ElseBranch) -> Label { match node { ast::ElseBranch::IfExpr(inner) => self.emit_if_expr(inner).into(), From 0b3b95ab543a6c992dea76d32e9804a93a3e1b2c Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Fri, 27 Sep 2024 16:20:34 +0200 Subject: [PATCH 047/217] Rust: macro expansion --- rust/extractor/src/generated/.generated.list | 2 +- rust/extractor/src/generated/top.rs | 6 + rust/extractor/src/main.rs | 17 +- rust/extractor/src/rust_analyzer.rs | 16 +- rust/extractor/src/translate/base.rs | 159 ++++++++++++-- rust/extractor/src/translate/generated.rs | 1 + rust/extractor/src/trap.rs | 2 +- rust/ql/.generated.list | 11 +- rust/ql/.gitattributes | 1 + .../ql/lib/codeql/rust/elements/MacroCall.qll | 1 + .../elements/internal/generated/MacroCall.qll | 16 ++ .../internal/generated/ParentChild.qll | 6 +- .../rust/elements/internal/generated/Raw.qll | 5 + rust/ql/lib/rust.dbscheme | 6 + .../generated/MacroCall/MacroCall.ql | 8 +- .../MacroCall/MacroCall_getExpanded.ql | 7 + rust/schema/annotations.py | 194 ++++++++++++++++++ 17 files changed, 427 insertions(+), 31 deletions(-) create mode 100644 rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.ql diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index 7ae321e9a1a0..e215cdc425c7 100644 --- a/rust/extractor/src/generated/.generated.list +++ b/rust/extractor/src/generated/.generated.list @@ -1,2 +1,2 @@ mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 -top.rs 00321b829ffca674c66daa86c003b9d5f8c64fef42873d03fa677cfa479039a2 00321b829ffca674c66daa86c003b9d5f8c64fef42873d03fa677cfa479039a2 +top.rs bbb8453f35cce3f2afa86b32c01296f78a24c19f504f9416aa049d256d11d23a bbb8453f35cce3f2afa86b32c01296f78a24c19f504f9416aa049d256d11d23a diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index 372760d5c133..bb21051d7bb9 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -8631,6 +8631,12 @@ impl trap::TrapEntry for MacroCall { } } +impl MacroCall { + pub fn emit_expanded(id: trap::Label, value: trap::Label, out: &mut trap::Writer) { + out.add_tuple("macro_call_expandeds", vec![id.into(), value.into()]); + } +} + impl trap::TrapClass for MacroCall { fn class_name() -> &'static str { "MacroCall" } } diff --git a/rust/extractor/src/main.rs b/rust/extractor/src/main.rs index 2d79fedebf3a..701b2f0b38ea 100644 --- a/rust/extractor/src/main.rs +++ b/rust/extractor/src/main.rs @@ -1,5 +1,5 @@ use anyhow::Context; -use ra_ap_ide_db::line_index::LineIndex; +use ra_ap_ide_db::line_index::{LineCol, LineIndex}; mod archive; mod config; pub mod generated; @@ -17,10 +17,21 @@ fn extract( let display_path = file.to_string_lossy(); let mut trap = traps.create("source", &file); let label = trap.emit_file(&file); - let mut translator = translate::Translator::new(trap, label, line_index, semi); + let mut translator = + translate::Translator::new(trap, display_path.as_ref(), label, line_index, semi); for err in parse_errors { - translator.emit_parse_error(display_path.as_ref(), err); + translator.emit_parse_error(&err); + } + let no_location = (LineCol { line: 0, col: 0 }, LineCol { line: 0, col: 0 }); + if translator.semi.is_none() { + translator.emit_diagnostic( + trap::DiagnosticSeverity::Warning, + "semantics".to_owned(), + "semantic analyzer unavailable".to_owned(), + "semantic analyzer unavailable: macro expansion, call graph, and type inference will be skipped.".to_owned(), + no_location, + ); } translator.emit_source_file(ast); translator.trap.commit()?; diff --git a/rust/extractor/src/rust_analyzer.rs b/rust/extractor/src/rust_analyzer.rs index e1d818dc3801..67d43755ec40 100644 --- a/rust/extractor/src/rust_analyzer.rs +++ b/rust/extractor/src/rust_analyzer.rs @@ -85,11 +85,21 @@ impl RustAnalyzer { } } } - let input = std::fs::read(&path).unwrap(); + let mut errors = Vec::new(); + let input = match std::fs::read(path) { + Ok(data) => data, + Err(e) => { + errors.push(SyntaxError::new( + format!("Could not read {}: {}", path.to_string_lossy(), e), + TextRange::empty(TextSize::default()), + )); + vec![] + } + }; let (input, err) = from_utf8_lossy(&input); let parse = ra_ap_syntax::ast::SourceFile::parse(&input, Edition::CURRENT); - let mut errors = parse.errors(); - errors.extend(err.into_iter()); + errors.extend(parse.errors()); + errors.extend(err); (parse.tree(), input.as_ref().into(), errors, None) } } diff --git a/rust/extractor/src/translate/base.rs b/rust/extractor/src/translate/base.rs index 96d6cb0b007e..5a99561149ca 100644 --- a/rust/extractor/src/translate/base.rs +++ b/rust/extractor/src/translate/base.rs @@ -1,13 +1,18 @@ -use crate::generated::{self, AstNode}; +use crate::generated::MacroCall; +use crate::generated::{self}; use crate::trap::{DiagnosticSeverity, TrapFile, TrapId}; use crate::trap::{Label, TrapClass}; use codeql_extractor::trap::{self}; +use log::Level; +use ra_ap_hir::db::ExpandDatabase; use ra_ap_hir::Semantics; use ra_ap_ide_db::line_index::{LineCol, LineIndex}; use ra_ap_ide_db::RootDatabase; use ra_ap_parser::SyntaxKind; use ra_ap_syntax::ast::RangeItem; -use ra_ap_syntax::{ast, NodeOrToken, SyntaxElementChildren, SyntaxError, SyntaxToken, TextRange}; +use ra_ap_syntax::{ + ast, AstNode, NodeOrToken, SyntaxElementChildren, SyntaxError, SyntaxToken, TextRange, +}; pub trait TextValue { fn try_get_text(&self) -> Option; } @@ -60,32 +65,35 @@ impl TextValue for ast::RangePat { } pub struct Translator<'a> { pub trap: TrapFile, + path: &'a str, label: trap::Label, line_index: LineIndex, - semi: Option>, + pub semi: Option>, } -impl Translator<'_> { +impl<'a> Translator<'a> { pub fn new( trap: TrapFile, + path: &'a str, label: trap::Label, line_index: LineIndex, - semi: Option>, - ) -> Translator { + semi: Option>, + ) -> Translator<'a> { Translator { trap, + path, label, line_index, semi, } } - pub fn location(&self, range: TextRange) -> (LineCol, LineCol) { + fn location(&self, range: TextRange) -> (LineCol, LineCol) { let start = self.line_index.line_col(range.start()); let range_end = range.end(); // QL end positions are inclusive, while TextRange offsets are exclusive and point at the position // right after the last character of the range. We need to shift the end offset one character to the left to // get the right inclusive QL position. Unfortunately, simply subtracting `1` from the end-offset may cause - // the offset to point in the middle of a mult-byte character, resulting in a `panic`. Therefore we use `try_line_col` + // the offset to point in the middle of a multi-byte character, resulting in a `panic`. Therefore we use `try_line_col` // with decreasing offsets to find the start of the last character included in the range. for i in 1..4 { if let Some(end) = range_end @@ -98,20 +106,60 @@ impl Translator<'_> { let end = self.line_index.line_col(range_end); (start, end) } + + pub fn text_range_for_node(&mut self, node: &impl ast::AstNode) -> TextRange { + if let Some(semi) = self.semi.as_ref() { + let file_range = semi.original_range(node.syntax()); + file_range.range + } else { + node.syntax().text_range() + } + } pub fn emit_location(&mut self, label: Label, node: &impl ast::AstNode) { - let (start, end) = self.location(node.syntax().text_range()); + let range = self.text_range_for_node(node); + let (start, end) = self.location(range); self.trap.emit_location(self.label, label, start, end) } pub fn emit_location_token(&mut self, label: Label, token: &SyntaxToken) { let (start, end) = self.location(token.text_range()); self.trap.emit_location(self.label, label, start, end) } - pub fn emit_parse_error(&mut self, path: &str, err: SyntaxError) { - let (start, end) = self.location(err.range()); - log::warn!("{}:{}:{}: {}", path, start.line + 1, start.col + 1, err); - let message = err.to_string(); + pub fn emit_diagnostic( + &mut self, + severity: DiagnosticSeverity, + error_tag: String, + error_message: String, + full_error_message: String, + location: (LineCol, LineCol), + ) { + let (start, end) = location; + let level = match severity { + DiagnosticSeverity::Debug => Level::Debug, + DiagnosticSeverity::Info => Level::Info, + DiagnosticSeverity::Warning => Level::Warn, + DiagnosticSeverity::Error => Level::Error, + }; + log::log!( + level, + "{}:{}:{}: {}", + self.path, + start.line + 1, + start.col + 1, + &error_message + ); let location = self.trap.emit_location_label(self.label, start, end); self.trap.emit_diagnostic( + severity, + error_tag, + error_message, + full_error_message, + location, + ); + } + pub fn emit_parse_error(&mut self, err: &SyntaxError) { + let location = self.location(err.range()); + let message = err.to_string(); + self.emit_diagnostic( DiagnosticSeverity::Warning, "parse_error".to_owned(), message.clone(), @@ -119,7 +167,11 @@ impl Translator<'_> { location, ); } - pub fn emit_tokens(&mut self, parent: Label, children: SyntaxElementChildren) { + pub fn emit_tokens( + &mut self, + parent: Label, + children: SyntaxElementChildren, + ) { for child in children { if let NodeOrToken::Token(token) = child { if token.kind() == SyntaxKind::COMMENT { @@ -133,4 +185,83 @@ impl Translator<'_> { } } } + pub(crate) fn extract_macro_call_expanded( + &mut self, + mcall: &ast::MacroCall, + label: Label, + ) { + if let Some(semi) = &self.semi { + if let Some(expanded) = semi.expand(mcall) { + if let Some(value) = + semi.hir_file_for(&expanded) + .macro_file() + .and_then(|macro_file| { + semi.db + .parse_macro_expansion_error(macro_file.macro_call_id) + }) + { + if let Some(err) = &value.err { + let (message, _error) = err.render_to_string(semi.db); + + if err.span().anchor.file_id == semi.hir_file_for(mcall.syntax()) { + let location = err.span().range + + semi + .db + .ast_id_map(err.span().anchor.file_id.into()) + .get_erased(err.span().anchor.ast_id) + .text_range() + .start(); + self.emit_parse_error(&SyntaxError::new(message, location)); + }; + } + for err in value.value.iter() { + self.emit_parse_error(err); + } + } + let expand_to = ra_ap_hir_expand::ExpandTo::from_call_site(mcall); + let kind = expanded.kind(); + let value: Option> = match expand_to { + ra_ap_hir_expand::ExpandTo::Statements => { + ast::MacroStmts::cast(expanded).map(|x| self.emit_macro_stmts(x).into()) + } + ra_ap_hir_expand::ExpandTo::Items => { + ast::MacroItems::cast(expanded).map(|x| self.emit_macro_items(x).into()) + } + + ra_ap_hir_expand::ExpandTo::Pattern => { + ast::Pat::cast(expanded).map(|x| self.emit_pat(x).into()) + } + ra_ap_hir_expand::ExpandTo::Type => { + ast::Type::cast(expanded).map(|x| self.emit_type(x).into()) + } + ra_ap_hir_expand::ExpandTo::Expr => { + ast::Expr::cast(expanded).map(|x| self.emit_expr(x).into()) + } + }; + if let Some(value) = value { + MacroCall::emit_expanded(label, value, &mut self.trap.writer); + } else { + let range = self.text_range_for_node(mcall); + self.emit_parse_error(&SyntaxError::new( + format!( + "macro expansion failed: the macro '{}' expands to {:?} but a {:?} was expected", + mcall.path().map(|p| p.to_string()).unwrap_or_default(), + kind, expand_to + ), + range, + )); + } + } else { + let range = self.text_range_for_node(mcall); + + self.emit_parse_error(&SyntaxError::new( + format!( + "macro expansion failed: could not resolve macro '{}'", + mcall.path().map(|p| p.to_string()).unwrap_or_default() + ), + range, + )); + } + } + } } diff --git a/rust/extractor/src/translate/generated.rs b/rust/extractor/src/translate/generated.rs index 45d1c540602a..b969abd4771a 100644 --- a/rust/extractor/src/translate/generated.rs +++ b/rust/extractor/src/translate/generated.rs @@ -970,6 +970,7 @@ impl Translator<'_> { token_tree, }); self.emit_location(label, &node); + self.extract_macro_call_expanded(&node, label); self.emit_tokens(label.into(), node.syntax().children_with_tokens()); label } diff --git a/rust/extractor/src/trap.rs b/rust/extractor/src/trap.rs index 7422c3a93b2b..ed75010fcae7 100644 --- a/rust/extractor/src/trap.rs +++ b/rust/extractor/src/trap.rs @@ -124,7 +124,7 @@ impl From> for trap::Arg { pub struct TrapFile { path: PathBuf, - writer: Writer, + pub writer: Writer, compression: Compression, } diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index d18865bbf1ff..fd5d3f743d1e 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -64,7 +64,7 @@ lib/codeql/rust/elements/LiteralExpr.qll 40b67404b7c2b81e5afabc53a2a93e0a503f687 lib/codeql/rust/elements/LiteralPat.qll daffb5f380a47543669c8cc92628b0e0de478c3ac82685802c63e8d75a206bed adfe9796598cf6ca4a9170c89ffd871e117f1cea6dd7dd80ecbbb947327a1a5d lib/codeql/rust/elements/Locatable.qll 2855efa4a469b54e0ca85daa89309a8b991cded6f3f10db361010831ba1e11d3 00c3406d14603f90abea11bf074eaf2c0b623a30e29cf6afc3a247cb58b92f0f lib/codeql/rust/elements/LoopExpr.qll 58ade0bc4a01a1cc361363682fde3ea56f4c5fbb4b28f5723ceff52ebaf897d7 fa299162c742bcf3b2211dc20821b312e3c133350c288a050eb26e6f8b5a5c78 -lib/codeql/rust/elements/MacroCall.qll 16933db15c6c0dbb717ef442f751ad8f63c444f36a12f8d56b8a05a3e5f71d1b ac05cbf50e4b06f39f58817cddbeac6f804c2d1e4f60956a960d63d495e7183d +lib/codeql/rust/elements/MacroCall.qll a39a11d387355f59af3007dcbab3282e2b9e3289c1f8f4c6b96154ddb802f8c3 88d4575e462af2aa780219ba1338a790547fdfc1d267c4b84f1b929f4bc08d05 lib/codeql/rust/elements/MacroDef.qll acb39275a1a3257084314a46ad4d8477946130f57e401c70c5949ad6aafc5c5f 6a8a8db12a3ec345fede51ca36e8c6acbdce58c5144388bb94f0706416fa152a lib/codeql/rust/elements/MacroExpr.qll ea9fed13f610bab1a2c4541c994510e0cb806530b60beef0d0c36b23e3b620f0 ad11a6bbd3a229ad97a16049cc6b0f3c8740f9f75ea61bbf4eebb072db9b12d2 lib/codeql/rust/elements/MacroItems.qll 4acf8e5ab8f84dc8fae442d52a29266be2f1e7160120bb1dd52238b3d62b4cab 0d6e25bbf1f3082b739bb846d7c3ef21a58c79e6a65b72272a00cffc3d32aa47 @@ -515,7 +515,7 @@ lib/codeql/rust/elements/internal/generated/LiteralExpr.qll f3a564d0a3ed0d915f5a lib/codeql/rust/elements/internal/generated/LiteralPat.qll ecc2bfe559abfce1be873fbf7b61b5728897c9afc3bb3f69551d8320d273da71 42196fb6a4a0ff9b570fd0bdbc920f24744b3f46772efbb46648af7fbfe1fbda lib/codeql/rust/elements/internal/generated/Locatable.qll c897dc1bdd4dfcb6ded83a4a93332ca3d8f421bae02493ea2a0555023071775e b32d242f8c9480dc9b53c1e13a5cb8dcfce575b0373991c082c1db460a3e37b8 lib/codeql/rust/elements/internal/generated/LoopExpr.qll 22b755dfaf238ecea722c0c94c399992014e23481ec6fdd61f803bbec012b6f9 08731630c2dc05aa1e0ada222a6057752d9ce737329c62076708828247a358be -lib/codeql/rust/elements/internal/generated/MacroCall.qll 8b49d44e6aeac26dc2fc4b9ba03c482c65ebf0cba089d16f9d65e784e48ccbb0 9ecf6e278007adcbdc42ed1c10e7b1c0652b6c64738b780d256c9326afa3b393 +lib/codeql/rust/elements/internal/generated/MacroCall.qll fc8988696493992cc4fdce8c0e5610c54ee92ea52ebb05262338f8b612353f50 188a2d7a484bd402a521787371e64f6e00e928306c8d437e6b19bf890a7aa14e lib/codeql/rust/elements/internal/generated/MacroDef.qll e9b3f07ba41aa12a8e0bd6ec1437b26a6c363065ce134b6d059478e96c2273a6 87470dea99da1a6afb3a19565291f9382e851ba864b50a995ac6f29589efbd70 lib/codeql/rust/elements/internal/generated/MacroExpr.qll 03a1daa41866f51e479ac20f51f8406d04e9946b24f3875e3cf75a6b172c3d35 1ae8ca0ee96bd2be32575d87c07cc999a6ff7770151b66c0e3406f9454153786 lib/codeql/rust/elements/internal/generated/MacroItems.qll ec02912230762f2759c3ed97ff52fded62ed14fb68d0807c8085a85152a5d4b1 c9cc4f8f0a1d63787995dde173f1bc8ac25351faa66b1d323e2ac1c894c9be85 @@ -541,7 +541,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll c808c9d84dd7800573832b lib/codeql/rust/elements/internal/generated/ParenExpr.qll bc0731505bfe88516205ec360582a4222d2681d11342c93e15258590ddee82f2 d4bd6e0c80cf1d63746c88d4bcb3a01d4c75732e5da09e3ebd9437ced227fb60 lib/codeql/rust/elements/internal/generated/ParenPat.qll ce24b8f8ecbf0f204af200317405724063887257460c80cf250c39b2fdf37185 e7c87d37e1a0ca7ea03840017e1aa9ddb7f927f1f3b6396c0305b46aeee33db6 lib/codeql/rust/elements/internal/generated/ParenType.qll 9cc954d73f8330dcac7b475f97748b63af5c8766dee9d2f2872c0a7e4c903537 c07534c8a9c683c4a9b11d490095647e420de0a0bfc23273eaf6f31b00244273 -lib/codeql/rust/elements/internal/generated/ParentChild.qll 3a14261d30beea704042dea144ef1972a93b8384eb258c6f8ff6c8254264c0e2 9fbf1176a5822728097e4c33dfefc057e381c662058b339007bea7273b6b27c6 +lib/codeql/rust/elements/internal/generated/ParentChild.qll 8df70abc5ebf6bd1439976404a002b457a006ca677645c970f7e8a23c31b2884 887cf53d918c0825f60b7e7824eefb61f3b7d48a15d73116c42bb67b362cd376 lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll 299abce24762a5ab023f3cf1ab9718b83047e171aed42a8092e7a155914b1657 db1a23d18640c548f08c9f94823838b5e019ac85877c7b15df2d1493d1846572 lib/codeql/rust/elements/internal/generated/PathExpr.qll 17cdb0a7393258a207450f08e37178fc9d35d167f064ba6015be94246f3dc933 a75fdd280aff6d87e083a92030e041c2eb52b57cf7151d4a6989fcd31d6a64bf @@ -553,7 +553,7 @@ lib/codeql/rust/elements/internal/generated/PtrType.qll 5f12b6ad29b4e5ce51c205e2 lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll dc03515d678ba052c2ff2dd9f0883e0bce54cac740ba9a15e5173f292c1b6971 dc03515d678ba052c2ff2dd9f0883e0bce54cac740ba9a15e5173f292c1b6971 lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll efd93730de217cf50dcba5875595263a5eadf9f7e4e1272401342a094d158614 229b251b3d118932e31e78ac4dfb75f48b766f240f20d436062785606d44467b -lib/codeql/rust/elements/internal/generated/Raw.qll 32faaa3ad1bd2e1bc0d588caed9ef629f1bd3f2cef3d43a2edea7b3c7d14467d a64b8cf08ef39876a7b3e33555c3305cba320d80acc8dead5ec8be6dd1fe225f +lib/codeql/rust/elements/internal/generated/Raw.qll 37d705750dbbcddc20f86d03e98c0b9d381dfe7c050dd48587591ee5e94c7043 5db207a0a9a3b6d537f7ae2829913a5bc7c0fdb5fcc34bd3b3d1b80b748e8c67 lib/codeql/rust/elements/internal/generated/RecordExpr.qll eb6cb662e463f9260efae1a6ce874fa781172063b916ef1963f861e9942d308d 1a21cbccc8f3799ff13281e822818ebfb21d81591720a427cac3625512cb9d40 lib/codeql/rust/elements/internal/generated/RecordExprField.qll 7e9f8663d3b74ebbc9603b10c9912f082febba6bd73d344b100bbd3edf837802 fbe6b578e7fd5d5a6f21bbb8c388957ab7210a6a249ec71510a50fb35b319ea1 lib/codeql/rust/elements/internal/generated/RecordExprFieldList.qll 179a97211fe7aa6265085d4d54115cdbc0e1cd7c9b2135591e8f36d6432f13d3 dd44bbbc1e83a1ed3a587afb729d7debf7aeb7b63245de181726af13090e50c0 @@ -816,8 +816,9 @@ test/extractor-tests/generated/LoopExpr/LoopExpr.ql 636c28bff5f8c1ca0fb834f614b3 test/extractor-tests/generated/LoopExpr/LoopExpr_getAttr.ql d557c1a34ae8762b32702d6b50e79c25bc506275c33a896b6b94bbbe73d04c49 34846c9eefa0219f4a16e28b518b2afa23f372d0aa03b08d042c5a35375e0cd6 test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.ql 0b77b9d9fb5903d37bce5a2c0d6b276e6269da56fcb37b83cd931872fb88490f c7f09c526e59dcadec13ec9719980d68b8619d630caab2c26b8368b06c1f2cc0 test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.ql 0267f54077640f3dfeb38524577e4a1229115eeb1c839398d0c5f460c1d65129 96ec876635b8c561f7add19e57574444f630eae3df9ab9bc33ac180e61f3a7b8 -test/extractor-tests/generated/MacroCall/MacroCall.ql d8b71880ffbfa0f9efa56c598a9bdd3f91e85129e0f8f2b30be6862556f87fcd 682736663ad11f9fdde165904324a8b2f3cdc59f91196a1accb1cd4cf5fb70d4 +test/extractor-tests/generated/MacroCall/MacroCall.ql 9eca338d7bc42dcfc3cfcd7953484d724d4f06b1182c01a426925d9963820e37 25fe9e90c38d3bd0c92c70bf2af01b034e3c375f3dbd1c1b8aab1fc1aae09547 test/extractor-tests/generated/MacroCall/MacroCall_getAttr.ql c22a2a29d705e85b03a6586d1eda1a2f4f99f95f7dfeb4e6908ec3188b5ad0ad 9b8d9dcc2116a123c15c520a880efab73ade20e08197c64bc3ed0c50902c4672 +test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.ql 757c4a4c32888e4604044c798a3180aa6d4f73381eec9bc28ba9dc71ffcbd03a 27d5edaa2c1096a24c86744aaad0f006da20d5caa28ccfd8528e7c98aa1bead1 test/extractor-tests/generated/MacroCall/MacroCall_getPath.ql 160edc6a001a2d946da6049ffb21a84b9a3756e85f9a2fb0a4d85058124b399a 1e25dd600f19ef89a99f328f86603bce12190220168387c5a88bfb9926da56d9 test/extractor-tests/generated/MacroCall/MacroCall_getTokenTree.ql 1cbf6b1ac7fa0910ff299b939743153fc00ad7e28a9a70c69a8297c6841e8238 570380c0dc4b20fe25c0499378569720a6da14bdb058e73d757e174bdd62d0c0 test/extractor-tests/generated/MacroDef/MacroDef.ql dde2df9196800d9af9645fe21786e30245bff6cfa58117900582ce1f5c0b859d 6b87bec4e4df8e9b6ed09f18e7b7c20204c39c8d249494cc66d3a06ae39791e4 diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index 495ea8eff4c7..b64b089a2f21 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -820,6 +820,7 @@ /test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.ql linguist-generated /test/extractor-tests/generated/MacroCall/MacroCall.ql linguist-generated /test/extractor-tests/generated/MacroCall/MacroCall_getAttr.ql linguist-generated +/test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.ql linguist-generated /test/extractor-tests/generated/MacroCall/MacroCall_getPath.ql linguist-generated /test/extractor-tests/generated/MacroCall/MacroCall_getTokenTree.ql linguist-generated /test/extractor-tests/generated/MacroDef/MacroDef.ql linguist-generated diff --git a/rust/ql/lib/codeql/rust/elements/MacroCall.qll b/rust/ql/lib/codeql/rust/elements/MacroCall.qll index 5399f1f2a872..b0985ea3fed8 100644 --- a/rust/ql/lib/codeql/rust/elements/MacroCall.qll +++ b/rust/ql/lib/codeql/rust/elements/MacroCall.qll @@ -5,6 +5,7 @@ private import internal.MacroCallImpl import codeql.rust.elements.AssocItem +import codeql.rust.elements.AstNode import codeql.rust.elements.Attr import codeql.rust.elements.ExternItem import codeql.rust.elements.Item diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroCall.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroCall.qll index 30717a1a3919..d95a29cd3029 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroCall.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroCall.qll @@ -7,6 +7,7 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.internal.AssocItemImpl::Impl as AssocItemImpl +import codeql.rust.elements.AstNode import codeql.rust.elements.Attr import codeql.rust.elements.internal.ExternItemImpl::Impl as ExternItemImpl import codeql.rust.elements.internal.ItemImpl::Impl as ItemImpl @@ -76,5 +77,20 @@ module Generated { * Holds if `getTokenTree()` exists. */ final predicate hasTokenTree() { exists(this.getTokenTree()) } + + /** + * Gets the expanded of this macro call, if it exists. + */ + AstNode getExpanded() { + result = + Synth::convertAstNodeFromRaw(Synth::convertMacroCallToRaw(this) + .(Raw::MacroCall) + .getExpanded()) + } + + /** + * Holds if `getExpanded()` exists. + */ + final predicate hasExpanded() { exists(this.getExpanded()) } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll index 88a02d60fa71..67d3a2523949 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -3048,7 +3048,8 @@ private module Impl { private Element getImmediateChildOfMacroCall(MacroCall e, int index, string partialPredicateCall) { exists( - int b, int bAssocItem, int bExternItem, int bItem, int n, int nAttr, int nPath, int nTokenTree + int b, int bAssocItem, int bExternItem, int bItem, int n, int nAttr, int nPath, + int nTokenTree, int nExpanded | b = 0 and bAssocItem = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAssocItem(e, i, _)) | i) and @@ -3059,6 +3060,7 @@ private module Impl { nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nPath = nAttr + 1 and nTokenTree = nPath + 1 and + nExpanded = nTokenTree + 1 and ( none() or @@ -3074,6 +3076,8 @@ private module Impl { index = nAttr and result = e.getPath() and partialPredicateCall = "Path()" or index = nPath and result = e.getTokenTree() and partialPredicateCall = "TokenTree()" + or + index = nTokenTree and result = e.getExpanded() and partialPredicateCall = "Expanded()" ) ) } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index 6ebc715567c9..aa426bd92aef 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -3294,6 +3294,11 @@ module Raw { * Gets the token tree of this macro call, if it exists. */ TokenTree getTokenTree() { macro_call_token_trees(this, result) } + + /** + * Gets the expanded of this macro call, if it exists. + */ + AstNode getExpanded() { macro_call_expandeds(this, result) } } /** diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index 17fd9f3d5177..ab7460435995 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -2753,6 +2753,12 @@ macro_call_token_trees( int token_tree: @token_tree ref ); +#keyset[id] +macro_call_expandeds( + int id: @macro_call ref, + int expanded: @ast_node ref +); + macro_defs( unique int id: @macro_def ); diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql index 6ae14827e5ad..ed7bd1246b52 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql @@ -2,11 +2,13 @@ import codeql.rust.elements import TestUtils -from MacroCall x, int getNumberOfAttrs, string hasPath, string hasTokenTree +from MacroCall x, int getNumberOfAttrs, string hasPath, string hasTokenTree, string hasExpanded where toBeTested(x) and not x.isUnknown() and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasPath() then hasPath = "yes" else hasPath = "no") and - if x.hasTokenTree() then hasTokenTree = "yes" else hasTokenTree = "no" -select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasPath:", hasPath, "hasTokenTree:", hasTokenTree + (if x.hasTokenTree() then hasTokenTree = "yes" else hasTokenTree = "no") and + if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasPath:", hasPath, "hasTokenTree:", hasTokenTree, + "hasExpanded:", hasExpanded diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.ql b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.ql new file mode 100644 index 000000000000..be63430c9edc --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroCall x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpanded() diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index b4c647f2654b..8fc7d3e59c31 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -24,12 +24,14 @@ class _: The base class for expressions. """ + @annotate(Pat) class _: """ The base class for patterns. """ + @annotate(Label) class _: """ @@ -49,6 +51,7 @@ class _: The base class for statements. """ + @annotate(TypeRef) class _: """ @@ -60,6 +63,7 @@ class _: ``` """ + @annotate(Path) class _: """ @@ -69,6 +73,7 @@ class _: ``` """ + @annotate(GenericArgList) class _: """ @@ -78,6 +83,7 @@ class _: ``` """ + @annotate(Function) @rust.doc_test_signature(None) class _: @@ -535,6 +541,7 @@ class _: ``` """ + @annotate(UnderscoreExpr) class _: """ @@ -544,6 +551,7 @@ class _: ``` """ + @annotate(OffsetOfExpr) class _: """ @@ -604,6 +612,7 @@ class _: ``` """ + @annotate(TuplePat) class _: """ @@ -774,6 +783,8 @@ class _: }; ``` """ + + @annotate(Abi) class _: """ @@ -782,6 +793,8 @@ class _: todo!() ``` """ + + @annotate(ArgList) class _: """ @@ -790,6 +803,8 @@ class _: todo!() ``` """ + + @annotate(ArrayType) class _: """ @@ -798,6 +813,8 @@ class _: todo!() ``` """ + + @annotate(AssocItem) class _: """ @@ -806,6 +823,8 @@ class _: todo!() ``` """ + + @annotate(AssocItemList) class _: """ @@ -814,6 +833,8 @@ class _: todo!() ``` """ + + @annotate(AssocTypeArg) class _: """ @@ -822,6 +843,8 @@ class _: todo!() ``` """ + + @annotate(Attr) class _: """ @@ -830,6 +853,8 @@ class _: todo!() ``` """ + + @annotate(ClosureBinder) class _: """ @@ -838,6 +863,8 @@ class _: todo!() ``` """ + + @annotate(Const) class _: """ @@ -846,6 +873,8 @@ class _: todo!() ``` """ + + @annotate(ConstArg) class _: """ @@ -854,6 +883,8 @@ class _: todo!() ``` """ + + @annotate(ConstParam) class _: """ @@ -862,6 +893,8 @@ class _: todo!() ``` """ + + @annotate(DynTraitType) class _: """ @@ -870,6 +903,8 @@ class _: todo!() ``` """ + + @annotate(Enum) class _: """ @@ -878,6 +913,8 @@ class _: todo!() ``` """ + + @annotate(ExternBlock) class _: """ @@ -886,6 +923,8 @@ class _: todo!() ``` """ + + @annotate(ExternCrate) class _: """ @@ -894,6 +933,8 @@ class _: todo!() ``` """ + + @annotate(ExternItem) class _: """ @@ -902,6 +943,8 @@ class _: todo!() ``` """ + + @annotate(ExternItemList) class _: """ @@ -910,6 +953,8 @@ class _: todo!() ``` """ + + @annotate(FieldList) class _: """ @@ -918,6 +963,8 @@ class _: todo!() ``` """ + + @annotate(FnPtrType) class _: """ @@ -926,6 +973,8 @@ class _: todo!() ``` """ + + @annotate(ForExpr) class _: """ @@ -934,6 +983,8 @@ class _: todo!() ``` """ + + @annotate(ForType) class _: """ @@ -942,6 +993,8 @@ class _: todo!() ``` """ + + @annotate(FormatArgsArg) class _: """ @@ -950,6 +1003,8 @@ class _: todo!() ``` """ + + @annotate(FormatArgsExpr) class _: """ @@ -958,6 +1013,8 @@ class _: todo!() ``` """ + + @annotate(GenericArg) class _: """ @@ -966,6 +1023,8 @@ class _: todo!() ``` """ + + @annotate(GenericParam) class _: """ @@ -974,6 +1033,8 @@ class _: todo!() ``` """ + + @annotate(GenericParamList) class _: """ @@ -982,6 +1043,8 @@ class _: todo!() ``` """ + + @annotate(Impl) class _: """ @@ -990,6 +1053,8 @@ class _: todo!() ``` """ + + @annotate(ImplTraitType) class _: """ @@ -998,6 +1063,8 @@ class _: todo!() ``` """ + + @annotate(InferType) class _: """ @@ -1006,6 +1073,8 @@ class _: todo!() ``` """ + + @annotate(Item) class _: """ @@ -1014,6 +1083,8 @@ class _: todo!() ``` """ + + @annotate(ItemList) class _: """ @@ -1022,6 +1093,8 @@ class _: todo!() ``` """ + + @annotate(LetElse) class _: """ @@ -1030,6 +1103,8 @@ class _: todo!() ``` """ + + @annotate(Lifetime) class _: """ @@ -1038,6 +1113,8 @@ class _: todo!() ``` """ + + @annotate(LifetimeArg) class _: """ @@ -1046,6 +1123,8 @@ class _: todo!() ``` """ + + @annotate(LifetimeParam) class _: """ @@ -1054,6 +1133,8 @@ class _: todo!() ``` """ + + @annotate(MacroCall) class _: """ @@ -1062,6 +1143,9 @@ class _: todo!() ``` """ + expanded: optional[AstNode] | child | rust.detach + + @annotate(MacroDef) class _: """ @@ -1070,6 +1154,8 @@ class _: todo!() ``` """ + + @annotate(MacroExpr) class _: """ @@ -1078,6 +1164,8 @@ class _: todo!() ``` """ + + @annotate(MacroPat) class _: """ @@ -1086,6 +1174,8 @@ class _: todo!() ``` """ + + @annotate(MacroRules) class _: """ @@ -1094,6 +1184,8 @@ class _: todo!() ``` """ + + @annotate(MacroType) class _: """ @@ -1102,6 +1194,8 @@ class _: todo!() ``` """ + + @annotate(MatchArmList) class _: """ @@ -1110,6 +1204,8 @@ class _: todo!() ``` """ + + @annotate(MatchGuard) class _: """ @@ -1118,6 +1214,8 @@ class _: todo!() ``` """ + + @annotate(Meta) class _: """ @@ -1126,6 +1224,8 @@ class _: todo!() ``` """ + + @annotate(Name) class _: """ @@ -1134,6 +1234,8 @@ class _: todo!() ``` """ + + @annotate(NameRef) class _: """ @@ -1142,6 +1244,8 @@ class _: todo!() ``` """ + + @annotate(NeverType) class _: """ @@ -1150,6 +1254,8 @@ class _: todo!() ``` """ + + @annotate(Param) class _: """ @@ -1158,6 +1264,8 @@ class _: todo!() ``` """ + + @annotate(ParamList) class _: """ @@ -1166,6 +1274,8 @@ class _: todo!() ``` """ + + @annotate(ParenExpr) class _: """ @@ -1174,6 +1284,8 @@ class _: todo!() ``` """ + + @annotate(ParenPat) class _: """ @@ -1182,6 +1294,8 @@ class _: todo!() ``` """ + + @annotate(ParenType) class _: """ @@ -1190,6 +1304,8 @@ class _: todo!() ``` """ + + @annotate(PathSegment) class _: """ @@ -1198,6 +1314,8 @@ class _: todo!() ``` """ + + @annotate(PathType) class _: """ @@ -1206,6 +1324,8 @@ class _: todo!() ``` """ + + @annotate(PtrType) class _: """ @@ -1214,6 +1334,8 @@ class _: todo!() ``` """ + + @annotate(RecordExprFieldList) class _: """ @@ -1222,6 +1344,8 @@ class _: todo!() ``` """ + + @annotate(RecordField) class _: """ @@ -1230,6 +1354,8 @@ class _: todo!() ``` """ + + @annotate(RecordFieldList) class _: """ @@ -1238,6 +1364,8 @@ class _: todo!() ``` """ + + @annotate(RecordPatFieldList) class _: """ @@ -1246,6 +1374,8 @@ class _: todo!() ``` """ + + @annotate(RefType) class _: """ @@ -1254,6 +1384,8 @@ class _: todo!() ``` """ + + @annotate(Rename) class _: """ @@ -1262,6 +1394,8 @@ class _: todo!() ``` """ + + @annotate(RestPat) class _: """ @@ -1270,6 +1404,8 @@ class _: todo!() ``` """ + + @annotate(RetType) class _: """ @@ -1278,6 +1414,8 @@ class _: todo!() ``` """ + + @annotate(ReturnTypeSyntax) class _: """ @@ -1286,6 +1424,8 @@ class _: todo!() ``` """ + + @annotate(SelfParam) class _: """ @@ -1294,6 +1434,8 @@ class _: todo!() ``` """ + + @annotate(SliceType) class _: """ @@ -1302,6 +1444,8 @@ class _: todo!() ``` """ + + @annotate(SourceFile) class _: """ @@ -1310,6 +1454,8 @@ class _: todo!() ``` """ + + @annotate(Static) class _: """ @@ -1318,6 +1464,8 @@ class _: todo!() ``` """ + + @annotate(StmtList) class _: """ @@ -1326,6 +1474,8 @@ class _: todo!() ``` """ + + @annotate(Struct) class _: """ @@ -1334,6 +1484,8 @@ class _: todo!() ``` """ + + @annotate(TokenTree) class _: """ @@ -1342,6 +1494,8 @@ class _: todo!() ``` """ + + @annotate(Trait) class _: """ @@ -1350,6 +1504,8 @@ class _: todo!() ``` """ + + @annotate(TraitAlias) class _: """ @@ -1358,6 +1514,8 @@ class _: todo!() ``` """ + + @annotate(TryExpr) class _: """ @@ -1366,6 +1524,8 @@ class _: todo!() ``` """ + + @annotate(TupleField) class _: """ @@ -1374,6 +1534,8 @@ class _: todo!() ``` """ + + @annotate(TupleFieldList) class _: """ @@ -1382,6 +1544,8 @@ class _: todo!() ``` """ + + @annotate(TupleType) class _: """ @@ -1390,6 +1554,8 @@ class _: todo!() ``` """ + + @annotate(TypeAlias) class _: """ @@ -1398,6 +1564,8 @@ class _: todo!() ``` """ + + @annotate(TypeArg) class _: """ @@ -1406,6 +1574,8 @@ class _: todo!() ``` """ + + @annotate(TypeBound) class _: """ @@ -1414,6 +1584,8 @@ class _: todo!() ``` """ + + @annotate(TypeBoundList) class _: """ @@ -1422,6 +1594,8 @@ class _: todo!() ``` """ + + @annotate(TypeParam) class _: """ @@ -1430,6 +1604,8 @@ class _: todo!() ``` """ + + @annotate(Union) class _: """ @@ -1438,6 +1614,8 @@ class _: todo!() ``` """ + + @annotate(Use) class _: """ @@ -1446,6 +1624,8 @@ class _: todo!() ``` """ + + @annotate(UseTree) class _: """ @@ -1454,6 +1634,8 @@ class _: todo!() ``` """ + + @annotate(UseTreeList) class _: """ @@ -1462,6 +1644,8 @@ class _: todo!() ``` """ + + @annotate(Variant) class _: """ @@ -1470,6 +1654,8 @@ class _: todo!() ``` """ + + @annotate(VariantList) class _: """ @@ -1478,6 +1664,8 @@ class _: todo!() ``` """ + + @annotate(Visibility) class _: """ @@ -1486,6 +1674,8 @@ class _: todo!() ``` """ + + @annotate(WhereClause) class _: """ @@ -1494,6 +1684,8 @@ class _: todo!() ``` """ + + @annotate(WherePred) class _: """ @@ -1502,6 +1694,8 @@ class _: todo!() ``` """ + + @annotate(WhileExpr) class _: """ From 796da126b8f41605f82d6ab48983c48945c67750 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Thu, 3 Oct 2024 17:00:46 +0200 Subject: [PATCH 048/217] Rust: update expected output --- .../generated/ArgList/ArgList.expected | 1 + .../generated/ArgList/ArgList_getArg.expected | 1 + .../generated/MacroCall/MacroCall.expected | 2 +- .../MacroCall/MacroCall_getExpanded.expected | 1 + .../generated/NameRef/NameRef.expected | 3 +++ .../NameRef/NameRef_getText.expected | 3 +++ .../PathSegment/PathSegment.expected | 3 +++ .../PathSegment_getNameRef.expected | 3 +++ .../ExtractionConsistency.expected | 1 + .../variables/variables.expected | 4 ++++ .../test/library-tests/variables/variables.rs | 8 +++---- .../ExtractionConsistency.expected | 1 + .../diagnostics/ExtractionErrors.expected | 1 + .../diagnostics/SummaryStats.expected | 2 +- .../unusedentities/UnreachableCode.expected | 24 +++++++++++++++++++ .../unusedentities/UnusedVariable.expected | 3 --- 16 files changed, 52 insertions(+), 9 deletions(-) create mode 100644 rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.expected diff --git a/rust/ql/test/extractor-tests/generated/ArgList/ArgList.expected b/rust/ql/test/extractor-tests/generated/ArgList/ArgList.expected index e69de29bb2d1..883d8f2a698c 100644 --- a/rust/ql/test/extractor-tests/generated/ArgList/ArgList.expected +++ b/rust/ql/test/extractor-tests/generated/ArgList/ArgList.expected @@ -0,0 +1 @@ +| gen_arg_list.rs:5:5:5:11 | ArgList | getNumberOfArgs: | 1 | diff --git a/rust/ql/test/extractor-tests/generated/ArgList/ArgList_getArg.expected b/rust/ql/test/extractor-tests/generated/ArgList/ArgList_getArg.expected index e69de29bb2d1..9bbaa63495cd 100644 --- a/rust/ql/test/extractor-tests/generated/ArgList/ArgList_getArg.expected +++ b/rust/ql/test/extractor-tests/generated/ArgList/ArgList_getArg.expected @@ -0,0 +1 @@ +| gen_arg_list.rs:5:5:5:11 | ArgList | 0 | gen_arg_list.rs:5:5:5:11 | "not yet implemented" | diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected index bbe8097850f0..0aaee585a350 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected @@ -1 +1 @@ -| gen_macro_call.rs:5:5:5:11 | MacroCall | getNumberOfAttrs: | 0 | hasPath: | yes | hasTokenTree: | yes | +| gen_macro_call.rs:5:5:5:11 | MacroCall | getNumberOfAttrs: | 0 | hasPath: | yes | hasTokenTree: | yes | hasExpanded: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.expected new file mode 100644 index 000000000000..7bdb564985f8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.expected @@ -0,0 +1 @@ +| gen_macro_call.rs:5:5:5:11 | MacroCall | gen_macro_call.rs:5:5:5:11 | MacroStmts | diff --git a/rust/ql/test/extractor-tests/generated/NameRef/NameRef.expected b/rust/ql/test/extractor-tests/generated/NameRef/NameRef.expected index d4215cca0724..d28b8224609f 100644 --- a/rust/ql/test/extractor-tests/generated/NameRef/NameRef.expected +++ b/rust/ql/test/extractor-tests/generated/NameRef/NameRef.expected @@ -1 +1,4 @@ | gen_name_ref.rs:5:5:5:8 | NameRef | hasText: | yes | +| gen_name_ref.rs:5:5:5:11 | NameRef | hasText: | yes | +| gen_name_ref.rs:5:5:5:11 | NameRef | hasText: | yes | +| gen_name_ref.rs:5:5:5:11 | NameRef | hasText: | yes | diff --git a/rust/ql/test/extractor-tests/generated/NameRef/NameRef_getText.expected b/rust/ql/test/extractor-tests/generated/NameRef/NameRef_getText.expected index 23cbafe4d304..8b41037f56d2 100644 --- a/rust/ql/test/extractor-tests/generated/NameRef/NameRef_getText.expected +++ b/rust/ql/test/extractor-tests/generated/NameRef/NameRef_getText.expected @@ -1 +1,4 @@ | gen_name_ref.rs:5:5:5:8 | NameRef | todo | +| gen_name_ref.rs:5:5:5:11 | NameRef | $crate | +| gen_name_ref.rs:5:5:5:11 | NameRef | panic | +| gen_name_ref.rs:5:5:5:11 | NameRef | panicking | diff --git a/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment.expected b/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment.expected index da8b58acd2d6..d3edb17d535b 100644 --- a/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment.expected +++ b/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment.expected @@ -1 +1,4 @@ | gen_path_segment.rs:5:5:5:8 | PathSegment | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_segment.rs:5:5:5:11 | PathSegment | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_segment.rs:5:5:5:11 | PathSegment | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_segment.rs:5:5:5:11 | PathSegment | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | diff --git a/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getNameRef.expected b/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getNameRef.expected index e81802b78635..38207ad29282 100644 --- a/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getNameRef.expected +++ b/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getNameRef.expected @@ -1 +1,4 @@ | gen_path_segment.rs:5:5:5:8 | PathSegment | gen_path_segment.rs:5:5:5:8 | NameRef | +| gen_path_segment.rs:5:5:5:11 | PathSegment | gen_path_segment.rs:5:5:5:11 | NameRef | +| gen_path_segment.rs:5:5:5:11 | PathSegment | gen_path_segment.rs:5:5:5:11 | NameRef | +| gen_path_segment.rs:5:5:5:11 | PathSegment | gen_path_segment.rs:5:5:5:11 | NameRef | diff --git a/rust/ql/test/extractor-tests/utf8/CONSISTENCY/ExtractionConsistency.expected b/rust/ql/test/extractor-tests/utf8/CONSISTENCY/ExtractionConsistency.expected index 23b423a489a1..54fb69c68140 100644 --- a/rust/ql/test/extractor-tests/utf8/CONSISTENCY/ExtractionConsistency.expected +++ b/rust/ql/test/extractor-tests/utf8/CONSISTENCY/ExtractionConsistency.expected @@ -1,4 +1,5 @@ | lib.rs:3:9:3:8 | expected `;` or `{` | | lib.rs:3:9:3:8 | expected an item | +| lib.rs:3:10:3:21 | macro expansion failed: could not resolve macro 'identifiers' | | lib.rs:3:21:3:20 | expected BANG | | lib.rs:3:21:3:20 | expected `{`, `[`, `(` | diff --git a/rust/ql/test/library-tests/variables/variables.expected b/rust/ql/test/library-tests/variables/variables.expected index d5256eeea899..7751d42911b4 100644 --- a/rust/ql/test/library-tests/variables/variables.expected +++ b/rust/ql/test/library-tests/variables/variables.expected @@ -76,6 +76,8 @@ variable | variables.rs:366:13:366:13 | x | | variables.rs:367:13:367:15 | cap | variableAccess +| variables.rs:4:20:4:20 | s | variables.rs:3:14:3:14 | s | +| variables.rs:8:20:8:20 | i | variables.rs:7:14:7:14 | i | | variables.rs:13:15:13:16 | x1 | variables.rs:12:9:12:10 | x1 | | variables.rs:18:15:18:16 | x2 | variables.rs:17:13:17:14 | x2 | | variables.rs:19:5:19:6 | x2 | variables.rs:17:13:17:14 | x2 | @@ -183,6 +185,8 @@ variableWriteAccess | variables.rs:278:9:278:10 | b4 | variables.rs:269:13:269:14 | b4 | | variables.rs:279:9:279:11 | a10 | variables.rs:268:13:268:15 | a10 | variableReadAccess +| variables.rs:4:20:4:20 | s | variables.rs:3:14:3:14 | s | +| variables.rs:8:20:8:20 | i | variables.rs:7:14:7:14 | i | | variables.rs:13:15:13:16 | x1 | variables.rs:12:9:12:10 | x1 | | variables.rs:18:15:18:16 | x2 | variables.rs:17:13:17:14 | x2 | | variables.rs:20:15:20:16 | x2 | variables.rs:17:13:17:14 | x2 | diff --git a/rust/ql/test/library-tests/variables/variables.rs b/rust/ql/test/library-tests/variables/variables.rs index bf3491dff613..dbc3fd4cab5c 100644 --- a/rust/ql/test/library-tests/variables/variables.rs +++ b/rust/ql/test/library-tests/variables/variables.rs @@ -1,11 +1,11 @@ use std::ops::AddAssign; -fn print_str(s: &str) { - println!("{}", s); +fn print_str(s: &str) { // s + println!("{}", s); // $ read_access=s } -fn print_i64(i: i64) { - println!("{}", i); +fn print_i64(i: i64) { // i + println!("{}", i); // $ read_access=i } fn immutable_variable() { diff --git a/rust/ql/test/query-tests/diagnostics/CONSISTENCY/ExtractionConsistency.expected b/rust/ql/test/query-tests/diagnostics/CONSISTENCY/ExtractionConsistency.expected index 157aafc87852..39125607e963 100644 --- a/rust/ql/test/query-tests/diagnostics/CONSISTENCY/ExtractionConsistency.expected +++ b/rust/ql/test/query-tests/diagnostics/CONSISTENCY/ExtractionConsistency.expected @@ -4,3 +4,4 @@ | does_not_compile.rs:2:21:2:20 | expected SEMICOLON | | does_not_compile.rs:2:26:2:25 | expected SEMICOLON | | does_not_compile.rs:2:32:2:31 | expected field name or number | +| error.rs:2:5:2:17 | An error! | diff --git a/rust/ql/test/query-tests/diagnostics/ExtractionErrors.expected b/rust/ql/test/query-tests/diagnostics/ExtractionErrors.expected index b6aaf7b6d373..84fc94c78d17 100644 --- a/rust/ql/test/query-tests/diagnostics/ExtractionErrors.expected +++ b/rust/ql/test/query-tests/diagnostics/ExtractionErrors.expected @@ -4,3 +4,4 @@ | does_not_compile.rs:2:21:2:20 | expected SEMICOLON | Extraction failed in does_not_compile.rs with error expected SEMICOLON | 2 | | does_not_compile.rs:2:26:2:25 | expected SEMICOLON | Extraction failed in does_not_compile.rs with error expected SEMICOLON | 2 | | does_not_compile.rs:2:32:2:31 | expected field name or number | Extraction failed in does_not_compile.rs with error expected field name or number | 2 | +| error.rs:2:5:2:17 | An error! | Extraction failed in error.rs with error An error! | 2 | diff --git a/rust/ql/test/query-tests/diagnostics/SummaryStats.expected b/rust/ql/test/query-tests/diagnostics/SummaryStats.expected index d9142bcadfed..8367d199669e 100644 --- a/rust/ql/test/query-tests/diagnostics/SummaryStats.expected +++ b/rust/ql/test/query-tests/diagnostics/SummaryStats.expected @@ -1,4 +1,4 @@ -| Elements extracted | 290 | +| Elements extracted | 380 | | Elements unextracted | 0 | | Files extracted | 7 | | Lines of code extracted | 61 | diff --git a/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected b/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected index 02c2998f1de2..dac61fb99462 100644 --- a/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected +++ b/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected @@ -1,10 +1,34 @@ +| main.rs:14:14:14:24 | ExprStmt | This code is never reached. | +| main.rs:17:18:17:28 | ExprStmt | This code is never reached. | +| main.rs:20:14:20:24 | ExprStmt | This code is never reached. | +| main.rs:21:5:21:19 | ExprStmt | This code is never reached. | +| main.rs:21:5:21:19 | ExprStmt | This code is never reached. | +| main.rs:39:14:39:24 | ExprStmt | This code is never reached. | +| main.rs:48:14:48:24 | ExprStmt | This code is never reached. | +| main.rs:56:14:56:24 | ExprStmt | This code is never reached. | +| main.rs:60:14:60:24 | ExprStmt | This code is never reached. | +| main.rs:68:14:68:24 | ExprStmt | This code is never reached. | +| main.rs:94:14:94:45 | ExprStmt | This code is never reached. | +| main.rs:97:14:97:38 | ExprStmt | This code is never reached. | +| main.rs:99:14:99:38 | ExprStmt | This code is never reached. | +| main.rs:112:14:112:32 | ExprStmt | This code is never reached. | +| main.rs:117:18:117:33 | ExprStmt | This code is never reached. | +| main.rs:171:18:171:29 | ExprStmt | This code is never reached. | +| main.rs:176:9:176:24 | ExprStmt | This code is never reached. | +| main.rs:176:9:176:24 | ExprStmt | This code is never reached. | +| main.rs:332:11:332:51 | ExprStmt | This code is never reached. | | unreachable.rs:12:3:12:17 | ExprStmt | This code is never reached. | | unreachable.rs:20:3:20:17 | ExprStmt | This code is never reached. | | unreachable.rs:32:3:32:17 | ExprStmt | This code is never reached. | | unreachable.rs:39:3:39:17 | ExprStmt | This code is never reached. | | unreachable.rs:60:2:60:16 | ExprStmt | This code is never reached. | +| unreachable.rs:66:10:66:19 | ExprStmt | This code is never reached. | +| unreachable.rs:100:16:100:23 | ExprStmt | This code is never reached. | | unreachable.rs:101:3:101:17 | ExprStmt | This code is never reached. | +| unreachable.rs:102:16:102:23 | ExprStmt | This code is never reached. | +| unreachable.rs:108:15:108:22 | ExprStmt | This code is never reached. | | unreachable.rs:109:3:109:17 | ExprStmt | This code is never reached. | +| unreachable.rs:110:15:110:22 | ExprStmt | This code is never reached. | | unreachable.rs:124:2:124:16 | ExprStmt | This code is never reached. | | unreachable.rs:134:2:134:16 | ExprStmt | This code is never reached. | | unreachable.rs:141:3:141:17 | ExprStmt | This code is never reached. | diff --git a/rust/ql/test/query-tests/unusedentities/UnusedVariable.expected b/rust/ql/test/query-tests/unusedentities/UnusedVariable.expected index ee59aefde2c5..8203501f3a23 100644 --- a/rust/ql/test/query-tests/unusedentities/UnusedVariable.expected +++ b/rust/ql/test/query-tests/unusedentities/UnusedVariable.expected @@ -1,10 +1,7 @@ | main.rs:25:9:25:9 | a | Variable is not used. | | main.rs:90:13:90:13 | d | Variable is not used. | -| main.rs:114:9:114:9 | k | Variable is not used. | | main.rs:141:5:141:5 | y | Variable is not used. | | main.rs:164:9:164:9 | x | Variable is not used. | -| main.rs:169:9:169:9 | x | Variable is not used. | -| main.rs:174:9:174:9 | x | Variable is not used. | | main.rs:202:17:202:17 | a | Variable is not used. | | main.rs:210:20:210:22 | val | Variable is not used. | | main.rs:223:14:223:16 | val | Variable is not used. | From 0c10f083cbf86c313f3c8e691b04fdce26851e07 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Fri, 4 Oct 2024 10:42:58 +0200 Subject: [PATCH 049/217] Rust: set RUST_BACKTRACE=1 --- rust/tools/autobuild.sh | 1 + rust/tools/index-files.sh | 1 + 2 files changed, 2 insertions(+) diff --git a/rust/tools/autobuild.sh b/rust/tools/autobuild.sh index fdea6e80e52a..9d30ff1b3c34 100755 --- a/rust/tools/autobuild.sh +++ b/rust/tools/autobuild.sh @@ -1,5 +1,6 @@ #!/bin/bash +export RUST_BACKTRACE=1 exec "${CODEQL_DIST}/codeql" database index-files \ --working-dir=. --language=rust --include-extension=.rs \ "${CODEQL_EXTRACTOR_RUST_WIP_DATABASE}" diff --git a/rust/tools/index-files.sh b/rust/tools/index-files.sh index f3d93fbaf4a9..bb8d665adfcc 100755 --- a/rust/tools/index-files.sh +++ b/rust/tools/index-files.sh @@ -2,4 +2,5 @@ set -eu +export RUST_BACKTRACE=1 exec "$CODEQL_EXTRACTOR_RUST_ROOT/tools/$CODEQL_PLATFORM/extractor" @"$1" From faa168993cc4393a525e836d98fcd02fb8cf26e0 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Fri, 4 Oct 2024 11:13:06 +0200 Subject: [PATCH 050/217] Rust: reduce log output --- rust/extractor/src/main.rs | 1 - rust/extractor/src/rust_analyzer.rs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/rust/extractor/src/main.rs b/rust/extractor/src/main.rs index 701b2f0b38ea..5e21e4f65ac4 100644 --- a/rust/extractor/src/main.rs +++ b/rust/extractor/src/main.rs @@ -43,7 +43,6 @@ fn main() -> anyhow::Result<()> { .module(module_path!()) .verbosity(2 + cfg.verbose as usize) .init()?; - log::info!("{cfg:?}"); let rust_analyzer = rust_analyzer::RustAnalyzer::new(&cfg)?; let traps = trap::TrapFileProvider::new(&cfg).context("failed to set up trap files")?; diff --git a/rust/extractor/src/rust_analyzer.rs b/rust/extractor/src/rust_analyzer.rs index 67d43755ec40..2c269d472ccf 100644 --- a/rust/extractor/src/rust_analyzer.rs +++ b/rust/extractor/src/rust_analyzer.rs @@ -36,7 +36,7 @@ impl RustAnalyzer { .ok(), ..Default::default() }; - let progress = |t| (log::info!("progress: {}", t)); + let progress = |t| (log::trace!("progress: {}", t)); let load_config = LoadCargoConfig { load_out_dirs_from_check: true, with_proc_macro_server: ProcMacroServerChoice::Sysroot, From ae19b2fd890bd8e0ab100345329fb0268a6853c3 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Fri, 4 Oct 2024 14:38:11 +0200 Subject: [PATCH 051/217] Rust: check that TextRanges are for the correct file --- rust/extractor/src/main.rs | 12 +++++++--- rust/extractor/src/rust_analyzer.rs | 4 +++- rust/extractor/src/translate/base.rs | 35 +++++++++++++++++++++------- 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/rust/extractor/src/main.rs b/rust/extractor/src/main.rs index 5e21e4f65ac4..d9bb94f17a21 100644 --- a/rust/extractor/src/main.rs +++ b/rust/extractor/src/main.rs @@ -12,13 +12,19 @@ fn extract( traps: &trap::TrapFileProvider, file: std::path::PathBuf, ) -> anyhow::Result<()> { - let (ast, input, parse_errors, semi) = rust_analyzer.parse(&file); + let (ast, input, parse_errors, file_id, semi) = rust_analyzer.parse(&file); let line_index = LineIndex::new(input.as_ref()); let display_path = file.to_string_lossy(); let mut trap = traps.create("source", &file); let label = trap.emit_file(&file); - let mut translator = - translate::Translator::new(trap, display_path.as_ref(), label, line_index, semi); + let mut translator = translate::Translator::new( + trap, + display_path.as_ref(), + label, + line_index, + file_id, + semi, + ); for err in parse_errors { translator.emit_parse_error(&err); diff --git a/rust/extractor/src/rust_analyzer.rs b/rust/extractor/src/rust_analyzer.rs index 2c269d472ccf..caeeae6c443c 100644 --- a/rust/extractor/src/rust_analyzer.rs +++ b/rust/extractor/src/rust_analyzer.rs @@ -59,6 +59,7 @@ impl RustAnalyzer { SourceFile, Arc, Vec, + Option, Option>, ) { let mut p = path.as_path(); @@ -80,6 +81,7 @@ impl RustAnalyzer { db.parse_errors(file_id) .map(|x| x.to_vec()) .unwrap_or_default(), + Some(file_id), Some(semi), ); } @@ -100,7 +102,7 @@ impl RustAnalyzer { let parse = ra_ap_syntax::ast::SourceFile::parse(&input, Edition::CURRENT); errors.extend(parse.errors()); errors.extend(err); - (parse.tree(), input.as_ref().into(), errors, None) + (parse.tree(), input.as_ref().into(), errors, None, None) } } diff --git a/rust/extractor/src/translate/base.rs b/rust/extractor/src/translate/base.rs index 5a99561149ca..36d39d203841 100644 --- a/rust/extractor/src/translate/base.rs +++ b/rust/extractor/src/translate/base.rs @@ -9,6 +9,7 @@ use ra_ap_hir::Semantics; use ra_ap_ide_db::line_index::{LineCol, LineIndex}; use ra_ap_ide_db::RootDatabase; use ra_ap_parser::SyntaxKind; +use ra_ap_span::{EditionedFileId, TextSize}; use ra_ap_syntax::ast::RangeItem; use ra_ap_syntax::{ ast, AstNode, NodeOrToken, SyntaxElementChildren, SyntaxError, SyntaxToken, TextRange, @@ -63,11 +64,13 @@ impl TextValue for ast::RangePat { self.op_token().map(|x| x.text().to_string()) } } + pub struct Translator<'a> { pub trap: TrapFile, path: &'a str, label: trap::Label, line_index: LineIndex, + file_id: Option, pub semi: Option>, } @@ -77,6 +80,7 @@ impl<'a> Translator<'a> { path: &'a str, label: trap::Label, line_index: LineIndex, + file_id: Option, semi: Option>, ) -> Translator<'a> { Translator { @@ -84,6 +88,7 @@ impl<'a> Translator<'a> { path, label, line_index, + file_id, semi, } } @@ -107,18 +112,32 @@ impl<'a> Translator<'a> { (start, end) } - pub fn text_range_for_node(&mut self, node: &impl ast::AstNode) -> TextRange { + pub fn text_range_for_node(&mut self, node: &impl ast::AstNode) -> Option { if let Some(semi) = self.semi.as_ref() { let file_range = semi.original_range(node.syntax()); - file_range.range + let file_id = self.file_id?; + if file_id == file_range.file_id { + Some(file_range.range) + } else { + None + } } else { - node.syntax().text_range() + Some(node.syntax().text_range()) } } pub fn emit_location(&mut self, label: Label, node: &impl ast::AstNode) { - let range = self.text_range_for_node(node); - let (start, end) = self.location(range); - self.trap.emit_location(self.label, label, start, end) + if let Some(range) = self.text_range_for_node(node) { + let (start, end) = self.location(range); + self.trap.emit_location(self.label, label, start, end) + } else { + self.emit_diagnostic( + DiagnosticSeverity::Info, + "locations".to_owned(), + "missing location for AstNode".to_owned(), + "missing location for AstNode".to_owned(), + (LineCol { line: 0, col: 0 }, LineCol { line: 0, col: 0 }), + ); + } } pub fn emit_location_token(&mut self, label: Label, token: &SyntaxToken) { let (start, end) = self.location(token.text_range()); @@ -248,7 +267,7 @@ impl<'a> Translator<'a> { mcall.path().map(|p| p.to_string()).unwrap_or_default(), kind, expand_to ), - range, + range.unwrap_or_else(|| TextRange::empty(TextSize::from(0))), )); } } else { @@ -259,7 +278,7 @@ impl<'a> Translator<'a> { "macro expansion failed: could not resolve macro '{}'", mcall.path().map(|p| p.to_string()).unwrap_or_default() ), - range, + range.unwrap_or_else(|| TextRange::empty(TextSize::from(0))), )); } } From 3e877ffaacff25f33d6a510603b015368cf49d65 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Fri, 4 Oct 2024 15:09:22 +0200 Subject: [PATCH 052/217] Rust: do not fail on bad Cargo.toml files --- rust/extractor/src/rust_analyzer.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/rust/extractor/src/rust_analyzer.rs b/rust/extractor/src/rust_analyzer.rs index caeeae6c443c..4c8a76639954 100644 --- a/rust/extractor/src/rust_analyzer.rs +++ b/rust/extractor/src/rust_analyzer.rs @@ -45,10 +45,16 @@ impl RustAnalyzer { let projects = find_project_manifests(&cfg.inputs).context("loading inputs")?; for project in projects { let manifest = project.manifest_path(); - let (db, vfs, _macro_server) = - load_workspace_at(manifest.as_ref(), &config, &load_config, &progress)?; - let path: &Path = manifest.parent().as_ref(); - workspace.insert(path.to_path_buf(), (vfs, db)); + + match load_workspace_at(manifest.as_ref(), &config, &load_config, &progress) { + Ok((db, vfs, _macro_server)) => { + let path: &Path = manifest.parent().as_ref(); + workspace.insert(path.to_path_buf(), (vfs, db)); + } + Err(err) => { + log::error!("failed to load workspace for {}: {}", manifest, err); + } + } } Ok(RustAnalyzer { workspace }) } From 1135bf6bcd012e37b8fbddaac49f1b503ec5cd6d Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Sun, 6 Oct 2024 13:13:55 +0200 Subject: [PATCH 053/217] Rust: improve QL test script --- .../generated/Module/Module.expected | 1 - .../generated/Module/Module_getName.expected | 1 - .../extractor-tests/generated/Name/Name.expected | 1 - .../generated/Name/Name_getText.expected | 1 - .../generated/SourceFile/SourceFile.expected | 2 +- .../SourceFile/SourceFile_getItem.expected | 3 +-- .../CONSISTENCY/ExtractionConsistency.expected | 10 +++++----- rust/ql/test/extractor-tests/utf8/ast.expected | 14 ++++++-------- .../query-tests/diagnostics/LinesOfCode.expected | 2 +- .../diagnostics/LinesOfUserCode.expected | 2 +- .../diagnostics/LinesOfUserCodeInFiles.expected | 2 +- .../query-tests/diagnostics/SummaryStats.expected | 6 +++--- rust/tools/qltest.sh | 15 ++++++++++++++- 13 files changed, 33 insertions(+), 27 deletions(-) diff --git a/rust/ql/test/extractor-tests/generated/Module/Module.expected b/rust/ql/test/extractor-tests/generated/Module/Module.expected index eceff2ab4f4b..2020ab72dc17 100644 --- a/rust/ql/test/extractor-tests/generated/Module/Module.expected +++ b/rust/ql/test/extractor-tests/generated/Module/Module.expected @@ -1,4 +1,3 @@ | gen_module.rs:3:1:4:8 | Module | getNumberOfAttrs: | 0 | hasItemList: | no | hasName: | yes | hasVisibility: | no | | gen_module.rs:5:1:7:1 | Module | getNumberOfAttrs: | 0 | hasItemList: | yes | hasName: | yes | hasVisibility: | no | | lib.rs:2:1:2:15 | Module | getNumberOfAttrs: | 0 | hasItemList: | no | hasName: | yes | hasVisibility: | no | -| lib.rs:3:1:3:8 | Module | getNumberOfAttrs: | 0 | hasItemList: | no | hasName: | yes | hasVisibility: | no | diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getName.expected b/rust/ql/test/extractor-tests/generated/Module/Module_getName.expected index eefe68515f02..3a8692beec65 100644 --- a/rust/ql/test/extractor-tests/generated/Module/Module_getName.expected +++ b/rust/ql/test/extractor-tests/generated/Module/Module_getName.expected @@ -1,4 +1,3 @@ | gen_module.rs:3:1:4:8 | Module | gen_module.rs:4:5:4:7 | Name | | gen_module.rs:5:1:7:1 | Module | gen_module.rs:5:5:5:7 | Name | | lib.rs:2:1:2:15 | Module | lib.rs:2:5:2:14 | Name | -| lib.rs:3:1:3:8 | Module | lib.rs:3:5:3:7 | Name | diff --git a/rust/ql/test/extractor-tests/generated/Name/Name.expected b/rust/ql/test/extractor-tests/generated/Name/Name.expected index 5a4e3270939b..556c1dff2dde 100644 --- a/rust/ql/test/extractor-tests/generated/Name/Name.expected +++ b/rust/ql/test/extractor-tests/generated/Name/Name.expected @@ -1,3 +1,2 @@ | gen_name.rs:3:4:3:12 | Name | hasText: | yes | | lib.rs:2:5:2:12 | Name | hasText: | yes | -| lib.rs:3:5:3:7 | Name | hasText: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Name/Name_getText.expected b/rust/ql/test/extractor-tests/generated/Name/Name_getText.expected index 70cc00fa56bf..89623f2108e4 100644 --- a/rust/ql/test/extractor-tests/generated/Name/Name_getText.expected +++ b/rust/ql/test/extractor-tests/generated/Name/Name_getText.expected @@ -1,3 +1,2 @@ | gen_name.rs:3:4:3:12 | Name | test_name | | lib.rs:2:5:2:12 | Name | gen_name | -| lib.rs:3:5:3:7 | Name | lib | diff --git a/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile.expected b/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile.expected index 4abf0fd0df11..5c1ad52bfc39 100644 --- a/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile.expected +++ b/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile.expected @@ -1,2 +1,2 @@ | gen_source_file.rs:1:1:6:2 | SourceFile | getNumberOfAttrs: | 0 | getNumberOfItems: | 1 | -| lib.rs:1:1:3:9 | SourceFile | getNumberOfAttrs: | 0 | getNumberOfItems: | 2 | +| lib.rs:1:1:2:21 | SourceFile | getNumberOfAttrs: | 0 | getNumberOfItems: | 1 | diff --git a/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getItem.expected b/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getItem.expected index 10429cbab437..aba10e75baa9 100644 --- a/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getItem.expected +++ b/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getItem.expected @@ -1,3 +1,2 @@ | gen_source_file.rs:1:1:6:2 | SourceFile | 0 | gen_source_file.rs:3:1:6:1 | test_source_file | -| lib.rs:1:1:3:9 | SourceFile | 0 | lib.rs:2:1:2:20 | Module | -| lib.rs:1:1:3:9 | SourceFile | 1 | lib.rs:3:1:3:8 | Module | +| lib.rs:1:1:2:21 | SourceFile | 0 | lib.rs:2:1:2:20 | Module | diff --git a/rust/ql/test/extractor-tests/utf8/CONSISTENCY/ExtractionConsistency.expected b/rust/ql/test/extractor-tests/utf8/CONSISTENCY/ExtractionConsistency.expected index 54fb69c68140..44971e7dcf36 100644 --- a/rust/ql/test/extractor-tests/utf8/CONSISTENCY/ExtractionConsistency.expected +++ b/rust/ql/test/extractor-tests/utf8/CONSISTENCY/ExtractionConsistency.expected @@ -1,5 +1,5 @@ -| lib.rs:3:9:3:8 | expected `;` or `{` | -| lib.rs:3:9:3:8 | expected an item | -| lib.rs:3:10:3:21 | macro expansion failed: could not resolve macro 'identifiers' | -| lib.rs:3:21:3:20 | expected BANG | -| lib.rs:3:21:3:20 | expected `{`, `[`, `(` | +| lib.rs:2:9:2:8 | expected `;` or `{` | +| lib.rs:2:9:2:8 | expected an item | +| lib.rs:2:10:2:21 | macro expansion failed: could not resolve macro 'identifiers' | +| lib.rs:2:21:2:20 | expected BANG | +| lib.rs:2:21:2:20 | expected `{`, `[`, `(` | diff --git a/rust/ql/test/extractor-tests/utf8/ast.expected b/rust/ql/test/extractor-tests/utf8/ast.expected index 5f353287fbb1..39fb19f1b04e 100644 --- a/rust/ql/test/extractor-tests/utf8/ast.expected +++ b/rust/ql/test/extractor-tests/utf8/ast.expected @@ -1,12 +1,10 @@ -| lib.rs:1:1:3:22 | SourceFile | +| lib.rs:1:1:2:22 | SourceFile | | lib.rs:2:1:2:8 | Module | -| lib.rs:2:5:2:7 | Name | -| lib.rs:3:1:3:8 | Module | -| lib.rs:3:5:3:8 | Name | -| lib.rs:3:10:3:20 | NameRef | -| lib.rs:3:10:3:20 | Path | -| lib.rs:3:10:3:20 | PathSegment | -| lib.rs:3:10:3:21 | MacroCall | +| lib.rs:2:5:2:8 | Name | +| lib.rs:2:10:2:20 | NameRef | +| lib.rs:2:10:2:20 | Path | +| lib.rs:2:10:2:20 | PathSegment | +| lib.rs:2:10:2:21 | MacroCall | | utf8-identifiers.rs:1:1:4:6 | foo | | utf8-identifiers.rs:1:1:12:2 | SourceFile | | utf8-identifiers.rs:1:4:1:6 | Name | diff --git a/rust/ql/test/query-tests/diagnostics/LinesOfCode.expected b/rust/ql/test/query-tests/diagnostics/LinesOfCode.expected index bf709e1ddc4d..6facd293859d 100644 --- a/rust/ql/test/query-tests/diagnostics/LinesOfCode.expected +++ b/rust/ql/test/query-tests/diagnostics/LinesOfCode.expected @@ -1 +1 @@ -| 61 | +| 59 | diff --git a/rust/ql/test/query-tests/diagnostics/LinesOfUserCode.expected b/rust/ql/test/query-tests/diagnostics/LinesOfUserCode.expected index bf709e1ddc4d..6facd293859d 100644 --- a/rust/ql/test/query-tests/diagnostics/LinesOfUserCode.expected +++ b/rust/ql/test/query-tests/diagnostics/LinesOfUserCode.expected @@ -1 +1 @@ -| 61 | +| 59 | diff --git a/rust/ql/test/query-tests/diagnostics/LinesOfUserCodeInFiles.expected b/rust/ql/test/query-tests/diagnostics/LinesOfUserCodeInFiles.expected index b93473f7e04a..fe63f68abd8b 100644 --- a/rust/ql/test/query-tests/diagnostics/LinesOfUserCodeInFiles.expected +++ b/rust/ql/test/query-tests/diagnostics/LinesOfUserCodeInFiles.expected @@ -1,7 +1,7 @@ | my_struct.rs:0:0:0:0 | my_struct.rs | 20 | | comments.rs:0:0:0:0 | comments.rs | 13 | | main.rs:0:0:0:0 | main.rs | 8 | -| lib.rs:0:0:0:0 | lib.rs | 7 | | my_macro.rs:0:0:0:0 | my_macro.rs | 7 | +| lib.rs:0:0:0:0 | lib.rs | 5 | | does_not_compile.rs:0:0:0:0 | does_not_compile.rs | 3 | | error.rs:0:0:0:0 | error.rs | 3 | diff --git a/rust/ql/test/query-tests/diagnostics/SummaryStats.expected b/rust/ql/test/query-tests/diagnostics/SummaryStats.expected index 8367d199669e..03f12b16d8dc 100644 --- a/rust/ql/test/query-tests/diagnostics/SummaryStats.expected +++ b/rust/ql/test/query-tests/diagnostics/SummaryStats.expected @@ -1,5 +1,5 @@ -| Elements extracted | 380 | +| Elements extracted | 376 | | Elements unextracted | 0 | | Files extracted | 7 | -| Lines of code extracted | 61 | -| Lines of user code extracted | 61 | +| Lines of code extracted | 59 | +| Lines of user code extracted | 59 | diff --git a/rust/tools/qltest.sh b/rust/tools/qltest.sh index 09c3c9ab1312..58c08a41e01e 100755 --- a/rust/tools/qltest.sh +++ b/rust/tools/qltest.sh @@ -9,7 +9,13 @@ QLTEST_LOG="$CODEQL_EXTRACTOR_RUST_LOG_DIR"/qltest.log EXTRACTOR="$CODEQL_EXTRACTOR_RUST_ROOT/tools/$CODEQL_PLATFORM/extractor" echo > lib.rs for src in *.rs; do - echo "mod ${src%.rs};" >> lib.rs + if [[ "$src" == "lib.rs" ]]; then + continue + elif [[ "$src" == "main.rs" ]]; then + continue + else + echo "mod ${src%.rs};" >> lib.rs + fi done cat > Cargo.toml << EOF [workspace] @@ -20,6 +26,13 @@ edition="2021" [lib] path="lib.rs" EOF +if [[ -f "main.rs" ]]; then +cat >> Cargo.toml << EOF +[[bin]] +name = "main" +path = "main.rs" +EOF +fi "$EXTRACTOR" *.rs >> "$QLTEST_LOG" if [[ "$?" != 0 ]]; then cat "$QLTEST_LOG" # Show compiler errors on extraction failure From f70f8a3536dd1a3542ba852bd20dce20508a0b89 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Sun, 6 Oct 2024 13:58:07 +0200 Subject: [PATCH 054/217] Rust: fix utf8 test --- .../ExtractionConsistency.expected | 5 -- .../ql/test/extractor-tests/utf8/ast.expected | 68 +++++++++---------- ...tf8-identifiers.rs => utf8_identifiers.rs} | 0 3 files changed, 32 insertions(+), 41 deletions(-) delete mode 100644 rust/ql/test/extractor-tests/utf8/CONSISTENCY/ExtractionConsistency.expected rename rust/ql/test/extractor-tests/utf8/{utf8-identifiers.rs => utf8_identifiers.rs} (100%) diff --git a/rust/ql/test/extractor-tests/utf8/CONSISTENCY/ExtractionConsistency.expected b/rust/ql/test/extractor-tests/utf8/CONSISTENCY/ExtractionConsistency.expected deleted file mode 100644 index 44971e7dcf36..000000000000 --- a/rust/ql/test/extractor-tests/utf8/CONSISTENCY/ExtractionConsistency.expected +++ /dev/null @@ -1,5 +0,0 @@ -| lib.rs:2:9:2:8 | expected `;` or `{` | -| lib.rs:2:9:2:8 | expected an item | -| lib.rs:2:10:2:21 | macro expansion failed: could not resolve macro 'identifiers' | -| lib.rs:2:21:2:20 | expected BANG | -| lib.rs:2:21:2:20 | expected `{`, `[`, `(` | diff --git a/rust/ql/test/extractor-tests/utf8/ast.expected b/rust/ql/test/extractor-tests/utf8/ast.expected index 39fb19f1b04e..b0a4dfe00912 100644 --- a/rust/ql/test/extractor-tests/utf8/ast.expected +++ b/rust/ql/test/extractor-tests/utf8/ast.expected @@ -1,37 +1,33 @@ | lib.rs:1:1:2:22 | SourceFile | -| lib.rs:2:1:2:8 | Module | -| lib.rs:2:5:2:8 | Name | -| lib.rs:2:10:2:20 | NameRef | -| lib.rs:2:10:2:20 | Path | -| lib.rs:2:10:2:20 | PathSegment | -| lib.rs:2:10:2:21 | MacroCall | -| utf8-identifiers.rs:1:1:4:6 | foo | -| utf8-identifiers.rs:1:1:12:2 | SourceFile | -| utf8-identifiers.rs:1:4:1:6 | Name | -| utf8-identifiers.rs:1:7:4:1 | GenericParamList | -| utf8-identifiers.rs:2:5:2:6 | Lifetime | -| utf8-identifiers.rs:2:5:2:6 | LifetimeParam | -| utf8-identifiers.rs:3:5:3:5 | Name | -| utf8-identifiers.rs:3:5:3:5 | TypeParam | -| utf8-identifiers.rs:4:2:4:3 | ParamList | -| utf8-identifiers.rs:4:5:4:6 | BlockExpr | -| utf8-identifiers.rs:4:5:4:6 | StmtList | -| utf8-identifiers.rs:6:1:8:1 | Struct | -| utf8-identifiers.rs:6:8:6:8 | Name | -| utf8-identifiers.rs:6:10:8:1 | RecordFieldList | -| utf8-identifiers.rs:7:5:7:5 | Name | -| utf8-identifiers.rs:7:5:7:13 | RecordField | -| utf8-identifiers.rs:7:9:7:13 | NameRef | -| utf8-identifiers.rs:7:9:7:13 | Path | -| utf8-identifiers.rs:7:9:7:13 | PathSegment | -| utf8-identifiers.rs:7:9:7:13 | PathType | -| utf8-identifiers.rs:10:1:10:3 | Visibility | -| utf8-identifiers.rs:10:1:12:1 | main | -| utf8-identifiers.rs:10:8:10:11 | Name | -| utf8-identifiers.rs:10:12:10:13 | ParamList | -| utf8-identifiers.rs:10:15:12:1 | BlockExpr | -| utf8-identifiers.rs:10:15:12:1 | StmtList | -| utf8-identifiers.rs:11:5:11:24 | LetStmt | -| utf8-identifiers.rs:11:9:11:9 | Name | -| utf8-identifiers.rs:11:9:11:9 | \u03b1 | -| utf8-identifiers.rs:11:14:11:23 | 0.00001f64 | +| lib.rs:2:1:2:21 | Module | +| lib.rs:2:5:2:20 | Name | +| utf8_identifiers.rs:1:1:4:6 | foo | +| utf8_identifiers.rs:1:1:12:2 | SourceFile | +| utf8_identifiers.rs:1:4:1:6 | Name | +| utf8_identifiers.rs:1:7:4:1 | GenericParamList | +| utf8_identifiers.rs:2:5:2:6 | Lifetime | +| utf8_identifiers.rs:2:5:2:6 | LifetimeParam | +| utf8_identifiers.rs:3:5:3:5 | Name | +| utf8_identifiers.rs:3:5:3:5 | TypeParam | +| utf8_identifiers.rs:4:2:4:3 | ParamList | +| utf8_identifiers.rs:4:5:4:6 | BlockExpr | +| utf8_identifiers.rs:4:5:4:6 | StmtList | +| utf8_identifiers.rs:6:1:8:1 | Struct | +| utf8_identifiers.rs:6:8:6:8 | Name | +| utf8_identifiers.rs:6:10:8:1 | RecordFieldList | +| utf8_identifiers.rs:7:5:7:5 | Name | +| utf8_identifiers.rs:7:5:7:13 | RecordField | +| utf8_identifiers.rs:7:9:7:13 | NameRef | +| utf8_identifiers.rs:7:9:7:13 | Path | +| utf8_identifiers.rs:7:9:7:13 | PathSegment | +| utf8_identifiers.rs:7:9:7:13 | PathType | +| utf8_identifiers.rs:10:1:10:3 | Visibility | +| utf8_identifiers.rs:10:1:12:1 | main | +| utf8_identifiers.rs:10:8:10:11 | Name | +| utf8_identifiers.rs:10:12:10:13 | ParamList | +| utf8_identifiers.rs:10:15:12:1 | BlockExpr | +| utf8_identifiers.rs:10:15:12:1 | StmtList | +| utf8_identifiers.rs:11:5:11:24 | LetStmt | +| utf8_identifiers.rs:11:9:11:9 | Name | +| utf8_identifiers.rs:11:9:11:9 | \u03b1 | +| utf8_identifiers.rs:11:14:11:23 | 0.00001f64 | diff --git a/rust/ql/test/extractor-tests/utf8/utf8-identifiers.rs b/rust/ql/test/extractor-tests/utf8/utf8_identifiers.rs similarity index 100% rename from rust/ql/test/extractor-tests/utf8/utf8-identifiers.rs rename to rust/ql/test/extractor-tests/utf8/utf8_identifiers.rs From 58d2c71c209048699623b35ea64f7b606810d150 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Mon, 7 Oct 2024 17:57:49 +0200 Subject: [PATCH 055/217] Rust: load files from disk ourselves This avoids problems with files containing invalid utf-8 data, which may cause panic's like: ``` thread 'main' panicked at external/rules_rust~~_crate~ql~~r~r__ra_ap_salsa-0.0.232/src/input.rs:91:32: no value set for CompressedFileTextQuery(FileId(2429)) stack backtrace: 0: rust_begin_unwind at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panicking.rs:665:5 1: core::panicking::panic_fmt at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/core/src/panicking.rs:74:14 2: as salsa::plumbing::QueryStorageOps>::fetch 3: ::compressed_file_text::__shim 4: ::execute 5: salsa::Cycle::catch 6: salsa::derived_lru::slot::Slot::execute 7: salsa::derived_lru::slot::Slot::read 8: as salsa::plumbing::QueryStorageOps>::fetch 9: ::file_text::__shim 10: ::file_text 11: ::execute 12: salsa::Cycle::catch 13: salsa::derived_lru::slot::Slot::execute 14: salsa::derived_lru::slot::Slot::read 15: as salsa::plumbing::QueryStorageOps>::fetch 16: ::parse::__shim 17: ::parse 18: ra_ap_hir::semantics::SemanticsImpl::parse 19: single_arch_extractor::main ``` --- rust/extractor/src/main.rs | 6 ++-- rust/extractor/src/rust_analyzer.rs | 50 +++++++++++++++++------------ 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/rust/extractor/src/main.rs b/rust/extractor/src/main.rs index d9bb94f17a21..f59650b26eb2 100644 --- a/rust/extractor/src/main.rs +++ b/rust/extractor/src/main.rs @@ -8,7 +8,7 @@ mod translate; pub mod trap; fn extract( - rust_analyzer: &rust_analyzer::RustAnalyzer, + rust_analyzer: &mut rust_analyzer::RustAnalyzer, traps: &trap::TrapFileProvider, file: std::path::PathBuf, ) -> anyhow::Result<()> { @@ -49,7 +49,7 @@ fn main() -> anyhow::Result<()> { .module(module_path!()) .verbosity(2 + cfg.verbose as usize) .init()?; - let rust_analyzer = rust_analyzer::RustAnalyzer::new(&cfg)?; + let mut rust_analyzer = rust_analyzer::RustAnalyzer::new(&cfg)?; let traps = trap::TrapFileProvider::new(&cfg).context("failed to set up trap files")?; let archiver = archive::Archiver { @@ -59,7 +59,7 @@ fn main() -> anyhow::Result<()> { let file = std::path::absolute(&file).unwrap_or(file); let file = std::fs::canonicalize(&file).unwrap_or(file); archiver.archive(&file); - extract(&rust_analyzer, &traps, file)?; + extract(&mut rust_analyzer, &traps, file)?; } Ok(()) diff --git a/rust/extractor/src/rust_analyzer.rs b/rust/extractor/src/rust_analyzer.rs index 4c8a76639954..3c07e5000f72 100644 --- a/rust/extractor/src/rust_analyzer.rs +++ b/rust/extractor/src/rust_analyzer.rs @@ -3,6 +3,7 @@ use anyhow::Context; use itertools::Itertools; use log::info; use ra_ap_base_db::SourceDatabase; +use ra_ap_base_db::SourceDatabaseFileInputExt; use ra_ap_hir::Semantics; use ra_ap_ide_db::RootDatabase; use ra_ap_load_cargo::{load_workspace_at, LoadCargoConfig, ProcMacroServerChoice}; @@ -59,7 +60,7 @@ impl RustAnalyzer { Ok(RustAnalyzer { workspace }) } pub fn parse( - &self, + &mut self, path: &PathBuf, ) -> ( SourceFile, @@ -68,43 +69,52 @@ impl RustAnalyzer { Option, Option>, ) { + let mut errors = Vec::new(); + let input = match std::fs::read(path) { + Ok(data) => data, + Err(e) => { + errors.push(SyntaxError::new( + format!("Could not read {}: {}", path.to_string_lossy(), e), + TextRange::empty(TextSize::default()), + )); + vec![] + } + }; + let (input, err) = from_utf8_lossy(&input); + let mut p = path.as_path(); while let Some(parent) = p.parent() { p = parent; - if let Some((vfs, db)) = self.workspace.get(parent) { + if self.workspace.contains_key(parent) { + let (vfs, db) = self.workspace.get_mut(parent).unwrap(); if let Some(file_id) = Utf8PathBuf::from_path_buf(path.to_path_buf()) .ok() .and_then(|x| AbsPathBuf::try_from(x).ok()) .map(VfsPath::from) .and_then(|x| vfs.file_id(&x)) { + db.set_file_text(file_id, &input); let semi = Semantics::new(db); - let file_id = EditionedFileId::current_edition(file_id); - return ( - semi.parse(file_id), - db.file_text(file_id.into()), + let file_id = EditionedFileId::current_edition(file_id); + let source_file = semi.parse(file_id); + errors.extend( db.parse_errors(file_id) - .map(|x| x.to_vec()) - .unwrap_or_default(), + .into_iter() + .flat_map(|x| x.to_vec()), + ); + return ( + source_file, + input.as_ref().into(), + errors, Some(file_id), Some(semi), ); + } else { + break; } } } - let mut errors = Vec::new(); - let input = match std::fs::read(path) { - Ok(data) => data, - Err(e) => { - errors.push(SyntaxError::new( - format!("Could not read {}: {}", path.to_string_lossy(), e), - TextRange::empty(TextSize::default()), - )); - vec![] - } - }; - let (input, err) = from_utf8_lossy(&input); let parse = ra_ap_syntax::ast::SourceFile::parse(&input, Edition::CURRENT); errors.extend(parse.errors()); errors.extend(err); From 8372a2e562a9251c521afe5a1c5586c74284b60c Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Mon, 7 Oct 2024 18:32:20 +0200 Subject: [PATCH 056/217] Rust: ensure error and token locations are valid The locations are "clipped" to the ranges of the parent node of a token, and the root node of the parse tree for errors. --- rust/ast-generator/src/main.rs | 2 +- rust/extractor/src/main.rs | 2 +- rust/extractor/src/translate/base.rs | 75 ++++-- rust/extractor/src/translate/generated.rs | 282 +++++++++++----------- 4 files changed, 193 insertions(+), 168 deletions(-) diff --git a/rust/ast-generator/src/main.rs b/rust/ast-generator/src/main.rs index 3a248df4a190..44c067a18bcd 100644 --- a/rust/ast-generator/src/main.rs +++ b/rust/ast-generator/src/main.rs @@ -522,7 +522,7 @@ impl Translator<'_> {{ writeln!(buf, " self.emit_location(label, &node);")?; writeln!( buf, - " self.emit_tokens(label.into(), node.syntax().children_with_tokens());" + " self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens());" )?; writeln!(buf, " label")?; diff --git a/rust/extractor/src/main.rs b/rust/extractor/src/main.rs index f59650b26eb2..56d84176c8c5 100644 --- a/rust/extractor/src/main.rs +++ b/rust/extractor/src/main.rs @@ -27,7 +27,7 @@ fn extract( ); for err in parse_errors { - translator.emit_parse_error(&err); + translator.emit_parse_error(&ast, &err); } let no_location = (LineCol { line: 0, col: 0 }, LineCol { line: 0, col: 0 }); if translator.semi.is_none() { diff --git a/rust/extractor/src/translate/base.rs b/rust/extractor/src/translate/base.rs index 36d39d203841..ce0732c7c45e 100644 --- a/rust/extractor/src/translate/base.rs +++ b/rust/extractor/src/translate/base.rs @@ -139,9 +139,21 @@ impl<'a> Translator<'a> { ); } } - pub fn emit_location_token(&mut self, label: Label, token: &SyntaxToken) { - let (start, end) = self.location(token.text_range()); - self.trap.emit_location(self.label, label, start, end) + pub fn emit_location_token( + &mut self, + label: Label, + parent: &impl ast::AstNode, + token: &SyntaxToken, + ) { + let parent_range = parent.syntax().text_range(); + let token_range = token.text_range(); + if let Some(clipped_range) = token_range.intersect(parent_range) { + if let Some(parent_range2) = self.text_range_for_node(parent) { + let token_range = clipped_range + parent_range2.start() - parent_range.start(); + let (start, end) = self.location(token_range); + self.trap.emit_location(self.label, label, start, end) + } + } } pub fn emit_diagnostic( &mut self, @@ -175,20 +187,30 @@ impl<'a> Translator<'a> { location, ); } - pub fn emit_parse_error(&mut self, err: &SyntaxError) { - let location = self.location(err.range()); - let message = err.to_string(); - self.emit_diagnostic( - DiagnosticSeverity::Warning, - "parse_error".to_owned(), - message.clone(), - message, - location, - ); + pub fn emit_parse_error(&mut self, owner: &impl ast::AstNode, err: &SyntaxError) { + let owner_range: TextRange = owner.syntax().text_range(); + let err_range = err.range(); + if let Some(owner_range2) = self.text_range_for_node(owner) { + let location = if let Some(clipped_range) = err_range.intersect(owner_range) { + let err_range = clipped_range + owner_range2.start() - owner_range.start(); + self.location(err_range) + } else { + self.location(owner_range2) + }; + let message = err.to_string(); + self.emit_diagnostic( + DiagnosticSeverity::Warning, + "parse_error".to_owned(), + message.clone(), + message, + location, + ); + } } pub fn emit_tokens( &mut self, - parent: Label, + parent_node: &impl ast::AstNode, + parent_label: Label, children: SyntaxElementChildren, ) { for child in children { @@ -196,10 +218,10 @@ impl<'a> Translator<'a> { if token.kind() == SyntaxKind::COMMENT { let label = self.trap.emit(generated::Comment { id: TrapId::Star, - parent, + parent: parent_label, text: token.text().to_owned(), }); - self.emit_location_token(label.into(), &token); + self.emit_location_token(label.into(), parent_node, &token); } } } @@ -230,11 +252,11 @@ impl<'a> Translator<'a> { .get_erased(err.span().anchor.ast_id) .text_range() .start(); - self.emit_parse_error(&SyntaxError::new(message, location)); + self.emit_parse_error(mcall, &SyntaxError::new(message, location)); }; } for err in value.value.iter() { - self.emit_parse_error(err); + self.emit_parse_error(mcall, err); } } let expand_to = ra_ap_hir_expand::ExpandTo::from_call_site(mcall); @@ -261,7 +283,7 @@ impl<'a> Translator<'a> { MacroCall::emit_expanded(label, value, &mut self.trap.writer); } else { let range = self.text_range_for_node(mcall); - self.emit_parse_error(&SyntaxError::new( + self.emit_parse_error(mcall, &SyntaxError::new( format!( "macro expansion failed: the macro '{}' expands to {:?} but a {:?} was expected", mcall.path().map(|p| p.to_string()).unwrap_or_default(), @@ -273,13 +295,16 @@ impl<'a> Translator<'a> { } else { let range = self.text_range_for_node(mcall); - self.emit_parse_error(&SyntaxError::new( - format!( - "macro expansion failed: could not resolve macro '{}'", - mcall.path().map(|p| p.to_string()).unwrap_or_default() + self.emit_parse_error( + mcall, + &SyntaxError::new( + format!( + "macro expansion failed: could not resolve macro '{}'", + mcall.path().map(|p| p.to_string()).unwrap_or_default() + ), + range.unwrap_or_else(|| TextRange::empty(TextSize::from(0))), ), - range.unwrap_or_else(|| TextRange::empty(TextSize::from(0))), - )); + ); } } } diff --git a/rust/extractor/src/translate/generated.rs b/rust/extractor/src/translate/generated.rs index b969abd4771a..8aaba113e6da 100644 --- a/rust/extractor/src/translate/generated.rs +++ b/rust/extractor/src/translate/generated.rs @@ -179,7 +179,7 @@ impl Translator<'_> { abi_string, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -190,7 +190,7 @@ impl Translator<'_> { args, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -203,7 +203,7 @@ impl Translator<'_> { exprs, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -216,7 +216,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -229,7 +229,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -242,7 +242,7 @@ impl Translator<'_> { attrs, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -267,7 +267,7 @@ impl Translator<'_> { type_bound_list, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -278,7 +278,7 @@ impl Translator<'_> { meta, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -291,7 +291,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -304,7 +304,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -321,7 +321,7 @@ impl Translator<'_> { rhs, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -336,7 +336,7 @@ impl Translator<'_> { stmt_list, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -347,7 +347,7 @@ impl Translator<'_> { pat, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -362,7 +362,7 @@ impl Translator<'_> { lifetime, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -377,7 +377,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -392,7 +392,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -403,7 +403,7 @@ impl Translator<'_> { generic_param_list, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -422,7 +422,7 @@ impl Translator<'_> { ret_type, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -441,7 +441,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -452,7 +452,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -463,7 +463,7 @@ impl Translator<'_> { block_expr, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -480,7 +480,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -493,7 +493,7 @@ impl Translator<'_> { lifetime, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -504,7 +504,7 @@ impl Translator<'_> { type_bound_list, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -525,7 +525,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -536,7 +536,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -551,7 +551,7 @@ impl Translator<'_> { extern_item_list, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -568,7 +568,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -581,7 +581,7 @@ impl Translator<'_> { extern_items, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -596,7 +596,7 @@ impl Translator<'_> { name_ref, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -623,7 +623,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -638,7 +638,7 @@ impl Translator<'_> { ret_type, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -657,7 +657,7 @@ impl Translator<'_> { pat, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -670,7 +670,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -683,7 +683,7 @@ impl Translator<'_> { name, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -698,7 +698,7 @@ impl Translator<'_> { template, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -709,7 +709,7 @@ impl Translator<'_> { generic_args, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -720,7 +720,7 @@ impl Translator<'_> { generic_params, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -735,7 +735,7 @@ impl Translator<'_> { pat, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -752,7 +752,7 @@ impl Translator<'_> { then, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -775,7 +775,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -786,7 +786,7 @@ impl Translator<'_> { type_bound_list, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -801,7 +801,7 @@ impl Translator<'_> { index, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -810,7 +810,7 @@ impl Translator<'_> { id: TrapId::Star, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -823,7 +823,7 @@ impl Translator<'_> { items, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -834,7 +834,7 @@ impl Translator<'_> { lifetime, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -845,7 +845,7 @@ impl Translator<'_> { block_expr, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -860,7 +860,7 @@ impl Translator<'_> { pat, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -879,7 +879,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -890,7 +890,7 @@ impl Translator<'_> { text, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -901,7 +901,7 @@ impl Translator<'_> { lifetime, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -916,7 +916,7 @@ impl Translator<'_> { type_bound_list, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -929,7 +929,7 @@ impl Translator<'_> { text_value, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -940,7 +940,7 @@ impl Translator<'_> { literal, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -955,7 +955,7 @@ impl Translator<'_> { loop_body, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -971,7 +971,7 @@ impl Translator<'_> { }); self.emit_location(label, &node); self.extract_macro_call_expanded(&node, label); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -990,7 +990,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1001,7 +1001,7 @@ impl Translator<'_> { macro_call, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1012,7 +1012,7 @@ impl Translator<'_> { items, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1023,7 +1023,7 @@ impl Translator<'_> { macro_call, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1040,7 +1040,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1053,7 +1053,7 @@ impl Translator<'_> { statements, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1064,7 +1064,7 @@ impl Translator<'_> { macro_call, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1081,7 +1081,7 @@ impl Translator<'_> { pat, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1094,7 +1094,7 @@ impl Translator<'_> { attrs, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1109,7 +1109,7 @@ impl Translator<'_> { match_arm_list, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1120,7 +1120,7 @@ impl Translator<'_> { condition, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1135,7 +1135,7 @@ impl Translator<'_> { token_tree, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1154,7 +1154,7 @@ impl Translator<'_> { receiver, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1171,7 +1171,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1182,7 +1182,7 @@ impl Translator<'_> { text, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1193,7 +1193,7 @@ impl Translator<'_> { text, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1202,7 +1202,7 @@ impl Translator<'_> { id: TrapId::Star, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1217,7 +1217,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1228,7 +1228,7 @@ impl Translator<'_> { pats, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1243,7 +1243,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1256,7 +1256,7 @@ impl Translator<'_> { self_param, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1269,7 +1269,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1280,7 +1280,7 @@ impl Translator<'_> { pat, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1291,7 +1291,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1304,7 +1304,7 @@ impl Translator<'_> { part, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1317,7 +1317,7 @@ impl Translator<'_> { path, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1328,7 +1328,7 @@ impl Translator<'_> { path, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1351,7 +1351,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1362,7 +1362,7 @@ impl Translator<'_> { path, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1377,7 +1377,7 @@ impl Translator<'_> { operator_name, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1388,7 +1388,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1405,7 +1405,7 @@ impl Translator<'_> { start, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1420,7 +1420,7 @@ impl Translator<'_> { start, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1433,7 +1433,7 @@ impl Translator<'_> { record_expr_field_list, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1448,7 +1448,7 @@ impl Translator<'_> { name_ref, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1463,7 +1463,7 @@ impl Translator<'_> { spread, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1480,7 +1480,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1491,7 +1491,7 @@ impl Translator<'_> { fields, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1504,7 +1504,7 @@ impl Translator<'_> { record_pat_field_list, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1519,7 +1519,7 @@ impl Translator<'_> { pat, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1532,7 +1532,7 @@ impl Translator<'_> { rest_pat, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1545,7 +1545,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1556,7 +1556,7 @@ impl Translator<'_> { pat, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1569,7 +1569,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1580,7 +1580,7 @@ impl Translator<'_> { name, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1591,7 +1591,7 @@ impl Translator<'_> { attrs, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1602,7 +1602,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1615,7 +1615,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1624,7 +1624,7 @@ impl Translator<'_> { id: TrapId::Star, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1641,7 +1641,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1652,7 +1652,7 @@ impl Translator<'_> { pats, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1663,7 +1663,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1676,7 +1676,7 @@ impl Translator<'_> { items, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1695,7 +1695,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1710,7 +1710,7 @@ impl Translator<'_> { tail_expr, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1731,7 +1731,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1740,7 +1740,7 @@ impl Translator<'_> { id: TrapId::Star, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1763,7 +1763,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1784,7 +1784,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1797,7 +1797,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1810,7 +1810,7 @@ impl Translator<'_> { fields, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1825,7 +1825,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1836,7 +1836,7 @@ impl Translator<'_> { fields, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1847,7 +1847,7 @@ impl Translator<'_> { fields, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1860,7 +1860,7 @@ impl Translator<'_> { path, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1871,7 +1871,7 @@ impl Translator<'_> { fields, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1894,7 +1894,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1905,7 +1905,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1920,7 +1920,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1931,7 +1931,7 @@ impl Translator<'_> { bounds, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1948,7 +1948,7 @@ impl Translator<'_> { type_bound_list, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1959,7 +1959,7 @@ impl Translator<'_> { attrs, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1980,7 +1980,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1995,7 +1995,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -2010,7 +2010,7 @@ impl Translator<'_> { use_tree_list, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -2021,7 +2021,7 @@ impl Translator<'_> { use_trees, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -2040,7 +2040,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -2051,7 +2051,7 @@ impl Translator<'_> { variants, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -2062,7 +2062,7 @@ impl Translator<'_> { path, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -2073,7 +2073,7 @@ impl Translator<'_> { predicates, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -2090,7 +2090,7 @@ impl Translator<'_> { type_bound_list, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -2107,7 +2107,7 @@ impl Translator<'_> { loop_body, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -2116,7 +2116,7 @@ impl Translator<'_> { id: TrapId::Star, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -2129,7 +2129,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -2142,7 +2142,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); - self.emit_tokens(label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } From db28f1b29eaa7c541ddf6ea62950215e8c69f0ab Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Tue, 8 Oct 2024 10:47:40 +0200 Subject: [PATCH 057/217] Rust: use macro to inject extraction functions for detached properties --- rust/ast-generator/src/main.rs | 8 +- rust/extractor/src/translate/base.rs | 9 ++ rust/extractor/src/translate/generated.rs | 145 +++++++++++++++++++++- 3 files changed, 159 insertions(+), 3 deletions(-) diff --git a/rust/ast-generator/src/main.rs b/rust/ast-generator/src/main.rs index 44c067a18bcd..3b5a7aa8e7d4 100644 --- a/rust/ast-generator/src/main.rs +++ b/rust/ast-generator/src/main.rs @@ -419,8 +419,9 @@ fn write_extractor(grammar: &AstSrc) -> std::io::Result { "//! Generated by `ast-generator`, do not edit by hand.\n #![cfg_attr(any(), rustfmt::skip)] -use crate::generated; use super::base::{{TextValue, Translator}}; +use crate::emit_detached; +use crate::generated; use crate::trap::{{Label, TrapId}}; use ra_ap_syntax::ast::{{ HasArgList, HasAttrs, HasGenericArgs, HasGenericParams, HasLoopBody, HasModuleItem, HasName, @@ -520,6 +521,11 @@ impl Translator<'_> {{ } writeln!(buf, " }});")?; writeln!(buf, " self.emit_location(label, &node);")?; + writeln!( + buf, + " emit_detached!({}, self, node, label);", + class_name + )?; writeln!( buf, " self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens());" diff --git a/rust/extractor/src/translate/base.rs b/rust/extractor/src/translate/base.rs index ce0732c7c45e..d6467b9dc700 100644 --- a/rust/extractor/src/translate/base.rs +++ b/rust/extractor/src/translate/base.rs @@ -14,6 +14,15 @@ use ra_ap_syntax::ast::RangeItem; use ra_ap_syntax::{ ast, AstNode, NodeOrToken, SyntaxElementChildren, SyntaxError, SyntaxToken, TextRange, }; + +#[macro_export] +macro_rules! emit_detached { + (MacroCall, $self:ident, $node:ident, $label:ident) => { + $self.extract_macro_call_expanded(&$node, $label.into()); + }; + ($($_:tt)*) => {}; +} + pub trait TextValue { fn try_get_text(&self) -> Option; } diff --git a/rust/extractor/src/translate/generated.rs b/rust/extractor/src/translate/generated.rs index 8aaba113e6da..195cb59b73f5 100644 --- a/rust/extractor/src/translate/generated.rs +++ b/rust/extractor/src/translate/generated.rs @@ -2,8 +2,9 @@ #![cfg_attr(any(), rustfmt::skip)] -use crate::generated; use super::base::{TextValue, Translator}; +use crate::emit_detached; +use crate::generated; use crate::trap::{Label, TrapId}; use ra_ap_syntax::ast::{ HasArgList, HasAttrs, HasGenericArgs, HasGenericParams, HasLoopBody, HasModuleItem, HasName, @@ -179,6 +180,7 @@ impl Translator<'_> { abi_string, }); self.emit_location(label, &node); + emit_detached!(Abi, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -190,6 +192,7 @@ impl Translator<'_> { args, }); self.emit_location(label, &node); + emit_detached!(ArgList, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -203,6 +206,7 @@ impl Translator<'_> { exprs, }); self.emit_location(label, &node); + emit_detached!(ArrayExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -216,6 +220,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); + emit_detached!(ArrayType, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -229,6 +234,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); + emit_detached!(AsmExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -242,6 +248,7 @@ impl Translator<'_> { attrs, }); self.emit_location(label, &node); + emit_detached!(AssocItemList, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -267,6 +274,7 @@ impl Translator<'_> { type_bound_list, }); self.emit_location(label, &node); + emit_detached!(AssocTypeArg, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -278,6 +286,7 @@ impl Translator<'_> { meta, }); self.emit_location(label, &node); + emit_detached!(Attr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -291,6 +300,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); + emit_detached!(AwaitExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -304,6 +314,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); + emit_detached!(BecomeExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -321,6 +332,7 @@ impl Translator<'_> { rhs, }); self.emit_location(label, &node); + emit_detached!(BinaryExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -336,6 +348,7 @@ impl Translator<'_> { stmt_list, }); self.emit_location(label, &node); + emit_detached!(BlockExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -347,6 +360,7 @@ impl Translator<'_> { pat, }); self.emit_location(label, &node); + emit_detached!(BoxPat, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -362,6 +376,7 @@ impl Translator<'_> { lifetime, }); self.emit_location(label, &node); + emit_detached!(BreakExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -377,6 +392,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); + emit_detached!(CallExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -392,6 +408,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); + emit_detached!(CastExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -403,6 +420,7 @@ impl Translator<'_> { generic_param_list, }); self.emit_location(label, &node); + emit_detached!(ClosureBinder, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -422,6 +440,7 @@ impl Translator<'_> { ret_type, }); self.emit_location(label, &node); + emit_detached!(ClosureExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -441,6 +460,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, &node); + emit_detached!(Const, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -452,6 +472,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); + emit_detached!(ConstArg, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -463,6 +484,7 @@ impl Translator<'_> { block_expr, }); self.emit_location(label, &node); + emit_detached!(ConstBlockPat, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -480,6 +502,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); + emit_detached!(ConstParam, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -493,6 +516,7 @@ impl Translator<'_> { lifetime, }); self.emit_location(label, &node); + emit_detached!(ContinueExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -504,6 +528,7 @@ impl Translator<'_> { type_bound_list, }); self.emit_location(label, &node); + emit_detached!(DynTraitType, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -525,6 +550,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, &node); + emit_detached!(Enum, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -536,6 +562,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); + emit_detached!(ExprStmt, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -551,6 +578,7 @@ impl Translator<'_> { extern_item_list, }); self.emit_location(label, &node); + emit_detached!(ExternBlock, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -568,6 +596,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, &node); + emit_detached!(ExternCrate, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -581,6 +610,7 @@ impl Translator<'_> { extern_items, }); self.emit_location(label, &node); + emit_detached!(ExternItemList, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -596,6 +626,7 @@ impl Translator<'_> { name_ref, }); self.emit_location(label, &node); + emit_detached!(FieldExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -623,6 +654,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, &node); + emit_detached!(Function, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -638,6 +670,7 @@ impl Translator<'_> { ret_type, }); self.emit_location(label, &node); + emit_detached!(FnPtrType, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -657,6 +690,7 @@ impl Translator<'_> { pat, }); self.emit_location(label, &node); + emit_detached!(ForExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -670,6 +704,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); + emit_detached!(ForType, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -683,6 +718,7 @@ impl Translator<'_> { name, }); self.emit_location(label, &node); + emit_detached!(FormatArgsArg, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -698,6 +734,7 @@ impl Translator<'_> { template, }); self.emit_location(label, &node); + emit_detached!(FormatArgsExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -709,6 +746,7 @@ impl Translator<'_> { generic_args, }); self.emit_location(label, &node); + emit_detached!(GenericArgList, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -720,6 +758,7 @@ impl Translator<'_> { generic_params, }); self.emit_location(label, &node); + emit_detached!(GenericParamList, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -735,6 +774,7 @@ impl Translator<'_> { pat, }); self.emit_location(label, &node); + emit_detached!(IdentPat, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -752,6 +792,7 @@ impl Translator<'_> { then, }); self.emit_location(label, &node); + emit_detached!(IfExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -775,6 +816,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, &node); + emit_detached!(Impl, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -786,6 +828,7 @@ impl Translator<'_> { type_bound_list, }); self.emit_location(label, &node); + emit_detached!(ImplTraitType, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -801,6 +844,7 @@ impl Translator<'_> { index, }); self.emit_location(label, &node); + emit_detached!(IndexExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -810,6 +854,7 @@ impl Translator<'_> { id: TrapId::Star, }); self.emit_location(label, &node); + emit_detached!(InferType, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -823,6 +868,7 @@ impl Translator<'_> { items, }); self.emit_location(label, &node); + emit_detached!(ItemList, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -834,6 +880,7 @@ impl Translator<'_> { lifetime, }); self.emit_location(label, &node); + emit_detached!(Label, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -845,6 +892,7 @@ impl Translator<'_> { block_expr, }); self.emit_location(label, &node); + emit_detached!(LetElse, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -860,6 +908,7 @@ impl Translator<'_> { pat, }); self.emit_location(label, &node); + emit_detached!(LetExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -879,6 +928,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); + emit_detached!(LetStmt, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -890,6 +940,7 @@ impl Translator<'_> { text, }); self.emit_location(label, &node); + emit_detached!(Lifetime, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -901,6 +952,7 @@ impl Translator<'_> { lifetime, }); self.emit_location(label, &node); + emit_detached!(LifetimeArg, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -916,6 +968,7 @@ impl Translator<'_> { type_bound_list, }); self.emit_location(label, &node); + emit_detached!(LifetimeParam, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -929,6 +982,7 @@ impl Translator<'_> { text_value, }); self.emit_location(label, &node); + emit_detached!(LiteralExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -940,6 +994,7 @@ impl Translator<'_> { literal, }); self.emit_location(label, &node); + emit_detached!(LiteralPat, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -955,6 +1010,7 @@ impl Translator<'_> { loop_body, }); self.emit_location(label, &node); + emit_detached!(LoopExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -970,7 +1026,7 @@ impl Translator<'_> { token_tree, }); self.emit_location(label, &node); - self.extract_macro_call_expanded(&node, label); + emit_detached!(MacroCall, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -990,6 +1046,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, &node); + emit_detached!(MacroDef, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1001,6 +1058,7 @@ impl Translator<'_> { macro_call, }); self.emit_location(label, &node); + emit_detached!(MacroExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1012,6 +1070,7 @@ impl Translator<'_> { items, }); self.emit_location(label, &node); + emit_detached!(MacroItems, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1023,6 +1082,7 @@ impl Translator<'_> { macro_call, }); self.emit_location(label, &node); + emit_detached!(MacroPat, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1040,6 +1100,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, &node); + emit_detached!(MacroRules, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1053,6 +1114,7 @@ impl Translator<'_> { statements, }); self.emit_location(label, &node); + emit_detached!(MacroStmts, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1064,6 +1126,7 @@ impl Translator<'_> { macro_call, }); self.emit_location(label, &node); + emit_detached!(MacroType, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1081,6 +1144,7 @@ impl Translator<'_> { pat, }); self.emit_location(label, &node); + emit_detached!(MatchArm, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1094,6 +1158,7 @@ impl Translator<'_> { attrs, }); self.emit_location(label, &node); + emit_detached!(MatchArmList, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1109,6 +1174,7 @@ impl Translator<'_> { match_arm_list, }); self.emit_location(label, &node); + emit_detached!(MatchExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1120,6 +1186,7 @@ impl Translator<'_> { condition, }); self.emit_location(label, &node); + emit_detached!(MatchGuard, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1135,6 +1202,7 @@ impl Translator<'_> { token_tree, }); self.emit_location(label, &node); + emit_detached!(Meta, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1154,6 +1222,7 @@ impl Translator<'_> { receiver, }); self.emit_location(label, &node); + emit_detached!(MethodCallExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1171,6 +1240,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, &node); + emit_detached!(Module, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1182,6 +1252,7 @@ impl Translator<'_> { text, }); self.emit_location(label, &node); + emit_detached!(Name, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1193,6 +1264,7 @@ impl Translator<'_> { text, }); self.emit_location(label, &node); + emit_detached!(NameRef, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1202,6 +1274,7 @@ impl Translator<'_> { id: TrapId::Star, }); self.emit_location(label, &node); + emit_detached!(NeverType, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1217,6 +1290,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); + emit_detached!(OffsetOfExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1228,6 +1302,7 @@ impl Translator<'_> { pats, }); self.emit_location(label, &node); + emit_detached!(OrPat, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1243,6 +1318,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); + emit_detached!(Param, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1256,6 +1332,7 @@ impl Translator<'_> { self_param, }); self.emit_location(label, &node); + emit_detached!(ParamList, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1269,6 +1346,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); + emit_detached!(ParenExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1280,6 +1358,7 @@ impl Translator<'_> { pat, }); self.emit_location(label, &node); + emit_detached!(ParenPat, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1291,6 +1370,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); + emit_detached!(ParenType, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1304,6 +1384,7 @@ impl Translator<'_> { part, }); self.emit_location(label, &node); + emit_detached!(Path, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1317,6 +1398,7 @@ impl Translator<'_> { path, }); self.emit_location(label, &node); + emit_detached!(PathExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1328,6 +1410,7 @@ impl Translator<'_> { path, }); self.emit_location(label, &node); + emit_detached!(PathPat, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1351,6 +1434,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); + emit_detached!(PathSegment, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1362,6 +1446,7 @@ impl Translator<'_> { path, }); self.emit_location(label, &node); + emit_detached!(PathType, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1377,6 +1462,7 @@ impl Translator<'_> { operator_name, }); self.emit_location(label, &node); + emit_detached!(PrefixExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1388,6 +1474,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); + emit_detached!(PtrType, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1405,6 +1492,7 @@ impl Translator<'_> { start, }); self.emit_location(label, &node); + emit_detached!(RangeExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1420,6 +1508,7 @@ impl Translator<'_> { start, }); self.emit_location(label, &node); + emit_detached!(RangePat, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1433,6 +1522,7 @@ impl Translator<'_> { record_expr_field_list, }); self.emit_location(label, &node); + emit_detached!(RecordExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1448,6 +1538,7 @@ impl Translator<'_> { name_ref, }); self.emit_location(label, &node); + emit_detached!(RecordExprField, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1463,6 +1554,7 @@ impl Translator<'_> { spread, }); self.emit_location(label, &node); + emit_detached!(RecordExprFieldList, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1480,6 +1572,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, &node); + emit_detached!(RecordField, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1491,6 +1584,7 @@ impl Translator<'_> { fields, }); self.emit_location(label, &node); + emit_detached!(RecordFieldList, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1504,6 +1598,7 @@ impl Translator<'_> { record_pat_field_list, }); self.emit_location(label, &node); + emit_detached!(RecordPat, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1519,6 +1614,7 @@ impl Translator<'_> { pat, }); self.emit_location(label, &node); + emit_detached!(RecordPatField, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1532,6 +1628,7 @@ impl Translator<'_> { rest_pat, }); self.emit_location(label, &node); + emit_detached!(RecordPatFieldList, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1545,6 +1642,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); + emit_detached!(RefExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1556,6 +1654,7 @@ impl Translator<'_> { pat, }); self.emit_location(label, &node); + emit_detached!(RefPat, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1569,6 +1668,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); + emit_detached!(RefType, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1580,6 +1680,7 @@ impl Translator<'_> { name, }); self.emit_location(label, &node); + emit_detached!(Rename, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1591,6 +1692,7 @@ impl Translator<'_> { attrs, }); self.emit_location(label, &node); + emit_detached!(RestPat, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1602,6 +1704,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); + emit_detached!(RetType, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1615,6 +1718,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); + emit_detached!(ReturnExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1624,6 +1728,7 @@ impl Translator<'_> { id: TrapId::Star, }); self.emit_location(label, &node); + emit_detached!(ReturnTypeSyntax, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1641,6 +1746,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); + emit_detached!(SelfParam, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1652,6 +1758,7 @@ impl Translator<'_> { pats, }); self.emit_location(label, &node); + emit_detached!(SlicePat, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1663,6 +1770,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); + emit_detached!(SliceType, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1676,6 +1784,7 @@ impl Translator<'_> { items, }); self.emit_location(label, &node); + emit_detached!(SourceFile, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1695,6 +1804,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, &node); + emit_detached!(Static, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1710,6 +1820,7 @@ impl Translator<'_> { tail_expr, }); self.emit_location(label, &node); + emit_detached!(StmtList, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1731,6 +1842,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, &node); + emit_detached!(Struct, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1740,6 +1852,7 @@ impl Translator<'_> { id: TrapId::Star, }); self.emit_location(label, &node); + emit_detached!(TokenTree, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1763,6 +1876,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, &node); + emit_detached!(Trait, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1784,6 +1898,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, &node); + emit_detached!(TraitAlias, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1797,6 +1912,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); + emit_detached!(TryExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1810,6 +1926,7 @@ impl Translator<'_> { fields, }); self.emit_location(label, &node); + emit_detached!(TupleExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1825,6 +1942,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, &node); + emit_detached!(TupleField, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1836,6 +1954,7 @@ impl Translator<'_> { fields, }); self.emit_location(label, &node); + emit_detached!(TupleFieldList, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1847,6 +1966,7 @@ impl Translator<'_> { fields, }); self.emit_location(label, &node); + emit_detached!(TuplePat, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1860,6 +1980,7 @@ impl Translator<'_> { path, }); self.emit_location(label, &node); + emit_detached!(TupleStructPat, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1871,6 +1992,7 @@ impl Translator<'_> { fields, }); self.emit_location(label, &node); + emit_detached!(TupleType, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1894,6 +2016,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, &node); + emit_detached!(TypeAlias, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1905,6 +2028,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); + emit_detached!(TypeArg, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1920,6 +2044,7 @@ impl Translator<'_> { ty, }); self.emit_location(label, &node); + emit_detached!(TypeBound, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1931,6 +2056,7 @@ impl Translator<'_> { bounds, }); self.emit_location(label, &node); + emit_detached!(TypeBoundList, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1948,6 +2074,7 @@ impl Translator<'_> { type_bound_list, }); self.emit_location(label, &node); + emit_detached!(TypeParam, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1959,6 +2086,7 @@ impl Translator<'_> { attrs, }); self.emit_location(label, &node); + emit_detached!(UnderscoreExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1980,6 +2108,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, &node); + emit_detached!(Union, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -1995,6 +2124,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, &node); + emit_detached!(Use, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -2010,6 +2140,7 @@ impl Translator<'_> { use_tree_list, }); self.emit_location(label, &node); + emit_detached!(UseTree, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -2021,6 +2152,7 @@ impl Translator<'_> { use_trees, }); self.emit_location(label, &node); + emit_detached!(UseTreeList, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -2040,6 +2172,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, &node); + emit_detached!(Variant, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -2051,6 +2184,7 @@ impl Translator<'_> { variants, }); self.emit_location(label, &node); + emit_detached!(VariantList, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -2062,6 +2196,7 @@ impl Translator<'_> { path, }); self.emit_location(label, &node); + emit_detached!(Visibility, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -2073,6 +2208,7 @@ impl Translator<'_> { predicates, }); self.emit_location(label, &node); + emit_detached!(WhereClause, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -2090,6 +2226,7 @@ impl Translator<'_> { type_bound_list, }); self.emit_location(label, &node); + emit_detached!(WherePred, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -2107,6 +2244,7 @@ impl Translator<'_> { loop_body, }); self.emit_location(label, &node); + emit_detached!(WhileExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -2116,6 +2254,7 @@ impl Translator<'_> { id: TrapId::Star, }); self.emit_location(label, &node); + emit_detached!(WildcardPat, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -2129,6 +2268,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); + emit_detached!(YeetExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } @@ -2142,6 +2282,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, &node); + emit_detached!(YieldExpr, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); label } From ca27785acebf7678babfcbb20239c80b75e36901 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Tue, 8 Oct 2024 16:01:31 +0200 Subject: [PATCH 058/217] Rust: extract files on a per-project basis This way we have only one "project" database in-memory at a time. This should avoid running out of memory when analyzing large mono-repos. --- rust/extractor/src/main.rs | 70 +++++++++++++++++++---- rust/extractor/src/rust_analyzer.rs | 89 ++++++++++++----------------- 2 files changed, 96 insertions(+), 63 deletions(-) diff --git a/rust/extractor/src/main.rs b/rust/extractor/src/main.rs index 56d84176c8c5..4bae26416fe7 100644 --- a/rust/extractor/src/main.rs +++ b/rust/extractor/src/main.rs @@ -1,5 +1,13 @@ +use std::{ + collections::HashMap, + path::{Path, PathBuf}, +}; + use anyhow::Context; +use archive::Archiver; use ra_ap_ide_db::line_index::{LineCol, LineIndex}; +use ra_ap_project_model::ProjectManifest; +use rust_analyzer::RustAnalyzer; mod archive; mod config; pub mod generated; @@ -9,10 +17,13 @@ pub mod trap; fn extract( rust_analyzer: &mut rust_analyzer::RustAnalyzer, + archiver: &Archiver, traps: &trap::TrapFileProvider, - file: std::path::PathBuf, -) -> anyhow::Result<()> { - let (ast, input, parse_errors, file_id, semi) = rust_analyzer.parse(&file); + file: &std::path::Path, +) -> () { + archiver.archive(&file); + + let (ast, input, parse_errors, file_id, semi) = rust_analyzer.parse(file); let line_index = LineIndex::new(input.as_ref()); let display_path = file.to_string_lossy(); let mut trap = traps.create("source", &file); @@ -40,8 +51,13 @@ fn extract( ); } translator.emit_source_file(ast); - translator.trap.commit()?; - Ok(()) + translator.trap.commit().unwrap_or_else(|err| { + log::error!( + "Failed to write trap file for: {}: {}", + display_path, + err.to_string() + ) + }); } fn main() -> anyhow::Result<()> { let cfg = config::Config::extract().context("failed to load configuration")?; @@ -49,17 +65,49 @@ fn main() -> anyhow::Result<()> { .module(module_path!()) .verbosity(2 + cfg.verbose as usize) .init()?; - let mut rust_analyzer = rust_analyzer::RustAnalyzer::new(&cfg)?; let traps = trap::TrapFileProvider::new(&cfg).context("failed to set up trap files")?; let archiver = archive::Archiver { root: cfg.source_archive_dir, }; - for file in cfg.inputs { - let file = std::path::absolute(&file).unwrap_or(file); - let file = std::fs::canonicalize(&file).unwrap_or(file); - archiver.archive(&file); - extract(&mut rust_analyzer, &traps, file)?; + let files: Vec = cfg + .inputs + .iter() + .map(|file| { + let file = std::path::absolute(&file).unwrap_or(file.to_path_buf()); + std::fs::canonicalize(&file).unwrap_or(file) + }) + .collect(); + let manifests = rust_analyzer::find_project_manifests(&files)?; + let mut map: HashMap<&Path, (&ProjectManifest, Vec<&Path>)> = manifests + .iter() + .map(|x| (x.manifest_path().parent().as_ref(), (x, Vec::new()))) + .collect(); + let mut other_files = Vec::new(); + + 'outer: for file in &files { + let mut p = file.as_path(); + while let Some(parent) = p.parent() { + p = parent; + if let Some((_, files)) = map.get_mut(parent) { + files.push(file); + continue 'outer; + } + } + other_files.push(file); + } + for (manifest, files) in map.values() { + if files.is_empty() { + break; + } + let mut rust_analyzer = RustAnalyzer::new(manifest, &cfg.scratch_dir); + for file in files { + extract(&mut rust_analyzer, &archiver, &traps, file); + } + } + let mut rust_analyzer = RustAnalyzer::WithoutDatabase(); + for file in other_files { + extract(&mut rust_analyzer, &archiver, &traps, file); } Ok(()) diff --git a/rust/extractor/src/rust_analyzer.rs b/rust/extractor/src/rust_analyzer.rs index 3c07e5000f72..648b58e2169d 100644 --- a/rust/extractor/src/rust_analyzer.rs +++ b/rust/extractor/src/rust_analyzer.rs @@ -1,5 +1,3 @@ -use crate::config::Config; -use anyhow::Context; use itertools::Itertools; use log::info; use ra_ap_base_db::SourceDatabase; @@ -9,6 +7,7 @@ use ra_ap_ide_db::RootDatabase; use ra_ap_load_cargo::{load_workspace_at, LoadCargoConfig, ProcMacroServerChoice}; use ra_ap_paths::Utf8PathBuf; use ra_ap_project_model::CargoConfig; +use ra_ap_project_model::ProjectManifest; use ra_ap_project_model::RustLibSource; use ra_ap_span::Edition; use ra_ap_span::EditionedFileId; @@ -20,19 +19,18 @@ use ra_ap_vfs::AbsPathBuf; use ra_ap_vfs::Vfs; use ra_ap_vfs::VfsPath; use std::borrow::Cow; -use std::collections::HashMap; use std::path::{Path, PathBuf}; use triomphe::Arc; -pub struct RustAnalyzer { - workspace: HashMap, +pub enum RustAnalyzer { + WithDatabase { db: RootDatabase, vfs: Vfs }, + WithoutDatabase(), } impl RustAnalyzer { - pub fn new(cfg: &Config) -> anyhow::Result { - let mut workspace = HashMap::new(); + pub fn new(project: &ProjectManifest, scratch_dir: &Path) -> Self { let config = CargoConfig { sysroot: Some(RustLibSource::Discover), - target_dir: ra_ap_paths::Utf8PathBuf::from_path_buf(cfg.scratch_dir.to_path_buf()) + target_dir: ra_ap_paths::Utf8PathBuf::from_path_buf(scratch_dir.to_path_buf()) .map(|x| x.join("target")) .ok(), ..Default::default() @@ -43,25 +41,19 @@ impl RustAnalyzer { with_proc_macro_server: ProcMacroServerChoice::Sysroot, prefill_caches: false, }; - let projects = find_project_manifests(&cfg.inputs).context("loading inputs")?; - for project in projects { - let manifest = project.manifest_path(); + let manifest = project.manifest_path(); - match load_workspace_at(manifest.as_ref(), &config, &load_config, &progress) { - Ok((db, vfs, _macro_server)) => { - let path: &Path = manifest.parent().as_ref(); - workspace.insert(path.to_path_buf(), (vfs, db)); - } - Err(err) => { - log::error!("failed to load workspace for {}: {}", manifest, err); - } + match load_workspace_at(manifest.as_ref(), &config, &load_config, &progress) { + Ok((db, vfs, _macro_server)) => RustAnalyzer::WithDatabase { db, vfs }, + Err(err) => { + log::error!("failed to load workspace for {}: {}", manifest, err); + RustAnalyzer::WithoutDatabase() } } - Ok(RustAnalyzer { workspace }) } pub fn parse( &mut self, - path: &PathBuf, + path: &Path, ) -> ( SourceFile, Arc, @@ -82,37 +74,30 @@ impl RustAnalyzer { }; let (input, err) = from_utf8_lossy(&input); - let mut p = path.as_path(); - while let Some(parent) = p.parent() { - p = parent; - if self.workspace.contains_key(parent) { - let (vfs, db) = self.workspace.get_mut(parent).unwrap(); - if let Some(file_id) = Utf8PathBuf::from_path_buf(path.to_path_buf()) - .ok() - .and_then(|x| AbsPathBuf::try_from(x).ok()) - .map(VfsPath::from) - .and_then(|x| vfs.file_id(&x)) - { - db.set_file_text(file_id, &input); - let semi = Semantics::new(db); + if let RustAnalyzer::WithDatabase { vfs, db } = self { + if let Some(file_id) = Utf8PathBuf::from_path_buf(path.to_path_buf()) + .ok() + .and_then(|x| AbsPathBuf::try_from(x).ok()) + .map(VfsPath::from) + .and_then(|x| vfs.file_id(&x)) + { + db.set_file_text(file_id, &input); + let semi = Semantics::new(db); - let file_id = EditionedFileId::current_edition(file_id); - let source_file = semi.parse(file_id); - errors.extend( - db.parse_errors(file_id) - .into_iter() - .flat_map(|x| x.to_vec()), - ); - return ( - source_file, - input.as_ref().into(), - errors, - Some(file_id), - Some(semi), - ); - } else { - break; - } + let file_id = EditionedFileId::current_edition(file_id); + let source_file = semi.parse(file_id); + errors.extend( + db.parse_errors(file_id) + .into_iter() + .flat_map(|x| x.to_vec()), + ); + return ( + source_file, + input.as_ref().into(), + errors, + Some(file_id), + Some(semi), + ); } } let parse = ra_ap_syntax::ast::SourceFile::parse(&input, Edition::CURRENT); @@ -122,7 +107,7 @@ impl RustAnalyzer { } } -fn find_project_manifests( +pub fn find_project_manifests( files: &[PathBuf], ) -> anyhow::Result> { let current = std::env::current_dir()?; From 88e5ce3cf896b3ec566b841f24e2c9312cf1566a Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Tue, 8 Oct 2024 19:41:55 +0200 Subject: [PATCH 059/217] Rust: lower default verbosity to WARN --- rust/extractor/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/extractor/src/main.rs b/rust/extractor/src/main.rs index 4bae26416fe7..4b6bfd5f28d4 100644 --- a/rust/extractor/src/main.rs +++ b/rust/extractor/src/main.rs @@ -63,7 +63,7 @@ fn main() -> anyhow::Result<()> { let cfg = config::Config::extract().context("failed to load configuration")?; stderrlog::new() .module(module_path!()) - .verbosity(2 + cfg.verbose as usize) + .verbosity(1 + cfg.verbose as usize) .init()?; let traps = trap::TrapFileProvider::new(&cfg).context("failed to set up trap files")?; From f97a1591630f1b2b5d08b61d9b3a6ebb7c5e1b08 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Wed, 9 Oct 2024 11:27:48 +0200 Subject: [PATCH 060/217] Rust: clippy fixes --- rust/extractor/src/main.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/rust/extractor/src/main.rs b/rust/extractor/src/main.rs index 4b6bfd5f28d4..f258f240935d 100644 --- a/rust/extractor/src/main.rs +++ b/rust/extractor/src/main.rs @@ -20,14 +20,14 @@ fn extract( archiver: &Archiver, traps: &trap::TrapFileProvider, file: &std::path::Path, -) -> () { - archiver.archive(&file); +) { + archiver.archive(file); let (ast, input, parse_errors, file_id, semi) = rust_analyzer.parse(file); let line_index = LineIndex::new(input.as_ref()); let display_path = file.to_string_lossy(); - let mut trap = traps.create("source", &file); - let label = trap.emit_file(&file); + let mut trap = traps.create("source", file); + let label = trap.emit_file(file); let mut translator = translate::Translator::new( trap, display_path.as_ref(), @@ -74,7 +74,7 @@ fn main() -> anyhow::Result<()> { .inputs .iter() .map(|file| { - let file = std::path::absolute(&file).unwrap_or(file.to_path_buf()); + let file = std::path::absolute(file).unwrap_or(file.to_path_buf()); std::fs::canonicalize(&file).unwrap_or(file) }) .collect(); From 6d43eed1e65ae2594b14afd9176c4bae71eed383 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Thu, 10 Oct 2024 16:00:04 +0200 Subject: [PATCH 061/217] Rust: add QL doc for MacroStmts and MacroItems --- rust/ql/.generated.list | 21 ++++++++------- rust/ql/.gitattributes | 7 +++-- .../lib/codeql/rust/elements/MacroItems.qll | 8 ++++++ .../lib/codeql/rust/elements/MacroStmts.qll | 8 ++++++ .../rust/elements/internal/MacroItemsImpl.qll | 8 ++++++ .../rust/elements/internal/MacroStmtsImpl.qll | 8 ++++++ .../internal/generated/MacroItems.qll | 6 +++++ .../internal/generated/MacroStmts.qll | 6 +++++ .../rust/elements/internal/generated/Raw.qll | 12 +++++++++ .../generated/.generated_tests.list | 2 ++ .../extractor-tests/generated/.gitattributes | 2 ++ .../generated/MacroItems/MISSING_SOURCE.txt | 4 --- .../generated/MacroItems/MacroItems.expected | 1 + .../generated/MacroItems/MacroItems.ql | 10 +++++++ .../MacroItems/MacroItems_getItem.expected | 2 ++ .../MacroItems/MacroItems_getItem.ql | 7 +++++ .../MacroItems/common_definitions.rs | 5 ++++ .../generated/MacroItems/gen_macro_items.rs | 6 +++++ .../generated/MacroStmts/MISSING_SOURCE.txt | 4 --- .../generated/MacroStmts/MacroStmts.expected | 1 + .../generated/MacroStmts/MacroStmts.ql | 11 ++++++++ .../MacroStmts/MacroStmts_getExpr.expected | 1 + .../MacroStmts/MacroStmts_getExpr.ql | 7 +++++ .../MacroStmts_getStatement.expected | 0 .../MacroStmts/MacroStmts_getStatement.ql | 7 +++++ .../generated/MacroStmts/gen_macro_stmts.rs | 6 +++++ rust/schema/annotations.py | 26 +++++++++++++++++++ 27 files changed, 167 insertions(+), 19 deletions(-) delete mode 100644 rust/ql/test/extractor-tests/generated/MacroItems/MISSING_SOURCE.txt create mode 100644 rust/ql/test/extractor-tests/generated/MacroItems/MacroItems.expected create mode 100644 rust/ql/test/extractor-tests/generated/MacroItems/MacroItems.ql create mode 100644 rust/ql/test/extractor-tests/generated/MacroItems/MacroItems_getItem.expected create mode 100644 rust/ql/test/extractor-tests/generated/MacroItems/MacroItems_getItem.ql create mode 100644 rust/ql/test/extractor-tests/generated/MacroItems/common_definitions.rs create mode 100644 rust/ql/test/extractor-tests/generated/MacroItems/gen_macro_items.rs delete mode 100644 rust/ql/test/extractor-tests/generated/MacroStmts/MISSING_SOURCE.txt create mode 100644 rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts.expected create mode 100644 rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts.ql create mode 100644 rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts_getExpr.expected create mode 100644 rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts_getExpr.ql create mode 100644 rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts_getStatement.expected create mode 100644 rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts_getStatement.ql create mode 100644 rust/ql/test/extractor-tests/generated/MacroStmts/gen_macro_stmts.rs diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index fd5d3f743d1e..bb8b04642539 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -67,10 +67,10 @@ lib/codeql/rust/elements/LoopExpr.qll 58ade0bc4a01a1cc361363682fde3ea56f4c5fbb4b lib/codeql/rust/elements/MacroCall.qll a39a11d387355f59af3007dcbab3282e2b9e3289c1f8f4c6b96154ddb802f8c3 88d4575e462af2aa780219ba1338a790547fdfc1d267c4b84f1b929f4bc08d05 lib/codeql/rust/elements/MacroDef.qll acb39275a1a3257084314a46ad4d8477946130f57e401c70c5949ad6aafc5c5f 6a8a8db12a3ec345fede51ca36e8c6acbdce58c5144388bb94f0706416fa152a lib/codeql/rust/elements/MacroExpr.qll ea9fed13f610bab1a2c4541c994510e0cb806530b60beef0d0c36b23e3b620f0 ad11a6bbd3a229ad97a16049cc6b0f3c8740f9f75ea61bbf4eebb072db9b12d2 -lib/codeql/rust/elements/MacroItems.qll 4acf8e5ab8f84dc8fae442d52a29266be2f1e7160120bb1dd52238b3d62b4cab 0d6e25bbf1f3082b739bb846d7c3ef21a58c79e6a65b72272a00cffc3d32aa47 +lib/codeql/rust/elements/MacroItems.qll 00a5d41f7bb836d952abbd9382e42f72a9d81e65646a15a460b35ccd07a866c6 00efdb4d701b5599d76096f740da9ec157804865267b7e29bc2a214cbf03763e lib/codeql/rust/elements/MacroPat.qll dbf193b4fb544ac0b5a7dcfc31a6652de7239b6e643ff15b05868b2c142e940c 19b45c0a1eb1198e450c05d564b5d4aa0d6da29e7db84b9521eadf901e20a932 lib/codeql/rust/elements/MacroRules.qll a94535506798077043b9c1470992ac4310bf67bcce5f722080886d1b3e6d90d1 bd8e08a7171991abc85100b45267631e66d1b332caf1e5882cd17caee5cf18a3 -lib/codeql/rust/elements/MacroStmts.qll 66b3e877c4e3f8ef552152c92188aae7d5901a7b2e21dec581a61ee390be2fbc cc535cb6afb29783be37b1647d3267dd693c3434d42e1ab561d3a6a74ce20cfc +lib/codeql/rust/elements/MacroStmts.qll 6e9a1f90231cb72b27d3ff9479e399a9fba4abd0872a5005ab2fac45d5ca9be0 d6ca3a8254fc45794a93c451a3305c9b4be033a467ad72158d40d6f675a377a0 lib/codeql/rust/elements/MacroType.qll e5a153643e49a6be41483ad944550a030e0500764947b4e328cef6fa08c4fbd4 a42332c0a9c5cf7317fc49f3e1049e7751004fcc3efa056bbe058a8bfa2ef0cb lib/codeql/rust/elements/MatchArm.qll c39fd6cc0da24b1ff8d1e42835bcfee7695ad13580e3c7c50acd7c881b1cd894 62a31d2bd125e6aaebefc406e541a641271d3c497a377959f94dd4735b2bfbf8 lib/codeql/rust/elements/MatchArmList.qll e6c48fd7419d88e996b82eb45e4aa2686dfd079b283b02be7710192fb2cb93a0 0ec63a0ca56f5f7f80093fd3e77b198b74c6289e67be55dc6a4deb610753c7bd @@ -277,13 +277,13 @@ lib/codeql/rust/elements/internal/MacroDefImpl.qll f26e787ffd43e8cb079db01eba044 lib/codeql/rust/elements/internal/MacroExprConstructor.qll b12edb21ea189a1b28d96309c69c3d08e08837621af22edd67ff9416c097d2df d35bc98e7b7b5451930214c0d93dce33a2c7b5b74f36bf99f113f53db1f19c14 lib/codeql/rust/elements/internal/MacroExprImpl.qll 92dd9f658a85ae407e055f090385f451084de59190d8a00c7e1fba453c3eced4 89d544634fecdbead2ff06a26fc8132e127dab07f38b9322fa14dc55657b9f1a lib/codeql/rust/elements/internal/MacroItemsConstructor.qll 8e9ab7ec1e0f50a22605d4e993f99a85ca8059fbb506d67bc8f5a281af367b05 2602f9db31ea0c48192c3dde3bb5625a8ed1cae4cd3408729b9e09318d5bd071 -lib/codeql/rust/elements/internal/MacroItemsImpl.qll b20e9d0ba72de335ae1df33318339c9546c7f4c7ff25b3bf6eec884a2faa33bd 3bb159223eecb566004ce27457d5d97cd676f632be14b0411ff228a1d4e8e107 +lib/codeql/rust/elements/internal/MacroItemsImpl.qll 76fd50a1f27336e9efc6d3f73ef4d724f19627cadbaa805d1e14d2cfa4f19899 40c0e512090050b39b69128730f4f4581f51ffd3c687fb52913617bd70a144e9 lib/codeql/rust/elements/internal/MacroPatConstructor.qll 24744c1bbe21c1d249a04205fb09795ae38ed106ba1423e86ccbc5e62359eaa2 4fac3f731a1ffd87c1230d561c5236bd28dcde0d1ce0dcd7d7a84ba393669d4a lib/codeql/rust/elements/internal/MacroPatImpl.qll 7470e2d88c38c7300a64986f058ba92bb22b4945438e2e0e268f180c4f267b71 c1507df74fc4c92887f3e0a4f857f54b61f174ffae5b1af6fb70f466175d658b lib/codeql/rust/elements/internal/MacroRulesConstructor.qll dc04726ad59915ec980501c4cd3b3d2ad774f454ddbf138ff5808eba6bd63dea 8d6bf20feb850c47d1176237027ef131f18c5cbb095f6ab8b3ec58cea9bce856 lib/codeql/rust/elements/internal/MacroRulesImpl.qll 10c03adfb63ee7a4348ff5cffc6ef5300a531b048f28811a51e940b053e69f68 2498bd64aeaea9849c086abeaa6c248e4ce41b4436155f4bd4840965976d5d54 lib/codeql/rust/elements/internal/MacroStmtsConstructor.qll c293815cd69c002ba6de1db6018672654420f3f8bdd143f9d0c620adddd2be02 d376f8f07661a8cad1b10039076fd7fca353dcacf3ca40ed6507b8c874e849ca -lib/codeql/rust/elements/internal/MacroStmtsImpl.qll 7ce09c93fedbb6453fccbc081e7ec03d2e2a088c8ff3b27e28794258ac6ff553 d48681d5ed630a1b8d563d58fdb91aa32a73e3b21420d986c8e5415c9f80280f +lib/codeql/rust/elements/internal/MacroStmtsImpl.qll 27faff9da93ad7f22a6236c73ebb4d4631161cf4ec1b82958cdf79c85aa2087c 7e2863eaf50d4b285b9240f2c5ff9497cfb4393c8528a0738d725d00f1a78406 lib/codeql/rust/elements/internal/MacroTypeConstructor.qll 0a23573a6f69b38f3d7470050b16197601d67bdd5a4b1a43a155b0b99ccdf6b5 19b623962e8e1f73e55e3ed9712d2a3fe84b9510b99062173902feb2458ec12a lib/codeql/rust/elements/internal/MacroTypeImpl.qll b8711279f09f521b05bb67568c089271b7913f863ee64dfdeec2c502de2cbdc8 51bd9d3a2fb2065bce7b193b485e225ca5c8ba2029e60cab427d43a90baf0880 lib/codeql/rust/elements/internal/MatchArmConstructor.qll b41c1d5822d54127ce376ef62c6a5fa60e11697319fc7d9c9c54fd313d784a93 96cca80e5684e5893c0e9c0dff365ef8ad9e15ff648c9969ba42d91f95abea05 @@ -518,10 +518,10 @@ lib/codeql/rust/elements/internal/generated/LoopExpr.qll 22b755dfaf238ecea722c0c lib/codeql/rust/elements/internal/generated/MacroCall.qll fc8988696493992cc4fdce8c0e5610c54ee92ea52ebb05262338f8b612353f50 188a2d7a484bd402a521787371e64f6e00e928306c8d437e6b19bf890a7aa14e lib/codeql/rust/elements/internal/generated/MacroDef.qll e9b3f07ba41aa12a8e0bd6ec1437b26a6c363065ce134b6d059478e96c2273a6 87470dea99da1a6afb3a19565291f9382e851ba864b50a995ac6f29589efbd70 lib/codeql/rust/elements/internal/generated/MacroExpr.qll 03a1daa41866f51e479ac20f51f8406d04e9946b24f3875e3cf75a6b172c3d35 1ae8ca0ee96bd2be32575d87c07cc999a6ff7770151b66c0e3406f9454153786 -lib/codeql/rust/elements/internal/generated/MacroItems.qll ec02912230762f2759c3ed97ff52fded62ed14fb68d0807c8085a85152a5d4b1 c9cc4f8f0a1d63787995dde173f1bc8ac25351faa66b1d323e2ac1c894c9be85 +lib/codeql/rust/elements/internal/generated/MacroItems.qll 894890f61e118b3727d03ca813ae7220a15e45195f2d1d059cb1bba6802128c8 db3854b347f8782a3ec9f9a1439da822727b66f0bd33727383184ab65dbf29ac lib/codeql/rust/elements/internal/generated/MacroPat.qll 9e927e09d47029a3025eaad271c975e73479a80ea933c921381b6c9d751f2866 bdf5c58ca27743eb2e2dae2aeea3f3fc21f8a4f98fe1001598876455c88e8f69 lib/codeql/rust/elements/internal/generated/MacroRules.qll 4fbd94f22b5ee0f3e5aaae39c2b9a5e9b7bf878a1017811ca589942f6de92843 49fb69543ee867bae196febea6918e621f335afdf4d3ccbf219965b37c7537b1 -lib/codeql/rust/elements/internal/generated/MacroStmts.qll 502cf5490259edaefeda30d00371a9d58872e8bfcd82fa4a30a2a1c510662949 91672ea8c4c0e1e8ef6c9628e21169dfc873da4424aaf544a3cb2b9a2c523b28 +lib/codeql/rust/elements/internal/generated/MacroStmts.qll cb4f3c2721a4d0c8522e51f567c675f4fc95f39bac8a2bd97e125d5553515ad2 09b5a739ccee75e6c556b34ecd6f78c7dc799029d9bc7df2e6169098d24f0ccd lib/codeql/rust/elements/internal/generated/MacroType.qll c462824df4a002956c036966d15cd0bce206e664888f8d0c7834dedb38b3c0bf 947480f07c40128ef3d00ad4c3a29a685472b3e20a661680c22f6bb318205ed1 lib/codeql/rust/elements/internal/generated/MatchArm.qll 8fb740a0f2e308782d9cf390672969cd7cf6e698e5b847fb02ae3fa6c205646f 42bfe8dd94fc24ec925fbd44016df111600f99d1216c9a698631373bb6048830 lib/codeql/rust/elements/internal/generated/MatchArmList.qll 13362680c037fe83fef4653562cc10a4429078316b5ec7c47b076336cf4aca2e 41c674293c13eceaca62134ae0c6778541f6a5201cbc5c146f0ba01b898dc267 @@ -553,7 +553,7 @@ lib/codeql/rust/elements/internal/generated/PtrType.qll 5f12b6ad29b4e5ce51c205e2 lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll dc03515d678ba052c2ff2dd9f0883e0bce54cac740ba9a15e5173f292c1b6971 dc03515d678ba052c2ff2dd9f0883e0bce54cac740ba9a15e5173f292c1b6971 lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll efd93730de217cf50dcba5875595263a5eadf9f7e4e1272401342a094d158614 229b251b3d118932e31e78ac4dfb75f48b766f240f20d436062785606d44467b -lib/codeql/rust/elements/internal/generated/Raw.qll 37d705750dbbcddc20f86d03e98c0b9d381dfe7c050dd48587591ee5e94c7043 5db207a0a9a3b6d537f7ae2829913a5bc7c0fdb5fcc34bd3b3d1b80b748e8c67 +lib/codeql/rust/elements/internal/generated/Raw.qll 2584a84e50134d9f936e15a6a02e6d9db12d10115530f006fe322e9aad001473 c7cce257bbc41aa45d1275abd95c4cb9ee42335e934356f8666429afb34e0111 lib/codeql/rust/elements/internal/generated/RecordExpr.qll eb6cb662e463f9260efae1a6ce874fa781172063b916ef1963f861e9942d308d 1a21cbccc8f3799ff13281e822818ebfb21d81591720a427cac3625512cb9d40 lib/codeql/rust/elements/internal/generated/RecordExprField.qll 7e9f8663d3b74ebbc9603b10c9912f082febba6bd73d344b100bbd3edf837802 fbe6b578e7fd5d5a6f21bbb8c388957ab7210a6a249ec71510a50fb35b319ea1 lib/codeql/rust/elements/internal/generated/RecordExprFieldList.qll 179a97211fe7aa6265085d4d54115cdbc0e1cd7c9b2135591e8f36d6432f13d3 dd44bbbc1e83a1ed3a587afb729d7debf7aeb7b63245de181726af13090e50c0 @@ -829,7 +829,8 @@ test/extractor-tests/generated/MacroDef/MacroDef_getName.ql 6bc8a17804f23782e98f test/extractor-tests/generated/MacroDef/MacroDef_getVisibility.ql d858ccaab381432c529bf4a621afc82ea5e4b810b463f2b1f551de79908e14e7 83a85c4f90417ab44570a862642d8f8fc9208e62ba20ca69b32d39a3190381aa test/extractor-tests/generated/MacroExpr/MacroExpr.ql 69445cf24f5bec5c3f11f0ebf13604891bb2c0dffe715612628e5572587c7a6c 5434db79d94e437c86126d9cf20bf1e86e5537f462a57b9bf6b22a2caa95cc40 test/extractor-tests/generated/MacroExpr/MacroExpr_getMacroCall.ql 8859743e23b987225a6a1933054a1ed8f5f1442b61a769599e2efd143f4feb9e d2d336135ff4d2ea65e79430dee8d0f69f9d7818a674f5446903d986f3948b92 -test/extractor-tests/generated/MacroItems/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 +test/extractor-tests/generated/MacroItems/MacroItems.ql 876b5d2a4ce7dcb599e022083ff3f2d57300bcb0ea05f61069d59ad58353ca69 61ea54d4633ef871d3e634069e39fbb2545f7dc2796fa66f8edbacd4e0aa4ef5 +test/extractor-tests/generated/MacroItems/MacroItems_getItem.ql 53fc2db35a23b9aca6ee327d2a51202d23ddf482e6bdd92c5399b7f3a73959b1 63051c8b7a7bfbe9cc640f775e753c9a82f1eb8472989f7d3c8af94fdf26c7a0 test/extractor-tests/generated/MacroPat/MacroPat.ql d9ec72d4d6a7342ee2d9aa7e90227faa31792ca5842fe948d7fdf22597a123b7 74b0f21ef2bb6c13aae74dba1eea97451755110909a083360e2c56cfbc76fd91 test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.ql 398996f0d0f2aa6d3b58d80b26c7d1185b5094d455c6c5c7f075f6d414150aa6 b4662e57cac36ed0e692201f53ba46c3d0826bba99c5cc6dfcb302b44dd2154b test/extractor-tests/generated/MacroRules/MacroRules.ql 0742faf18179fa34e0f43361e9e4b807bfc242d232f6b3664a35e138a47d39c5 10e1cf45f32a27cb46bd61f5dd45416e2c0c9f25e880f6d213597a7d96e19103 @@ -837,7 +838,9 @@ test/extractor-tests/generated/MacroRules/MacroRules_getAttr.ql 7de501c724e34655 test/extractor-tests/generated/MacroRules/MacroRules_getName.ql 591606e3accae8b8fb49e1218c4867a42724ac209cf99786db0e5d7ea0bf55d5 d2936ef5aa4bbf024372516dde3de578990aafb2b8675bbbf0f72e8b54eb82a8 test/extractor-tests/generated/MacroRules/MacroRules_getTokenTree.ql 7598d33c3d86f9ad8629219b90667b2b65e3a1e18c6b0887291df9455a319cab 69d90446743e78e851145683c17677497fe42ed02f61f2b2974e216dc6e05b01 test/extractor-tests/generated/MacroRules/MacroRules_getVisibility.ql 5306cc85f470d21ebcbe6e98436334b0bf5ba819a0ae186569ba7e88c31636c6 fcbf5c54e5a904767a6f4d37d853072aa0040738e622c49c9a02dec8739d6587 -test/extractor-tests/generated/MacroStmts/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 +test/extractor-tests/generated/MacroStmts/MacroStmts.ql 991042263ba99acef0972697ce79132e5650b27bf53be2f975a0da1f29940fd8 64c44e65b3c5d3de5f9532b4ff7ce54b39442b37f63da8b10d789b9b52b85a9e +test/extractor-tests/generated/MacroStmts/MacroStmts_getExpr.ql 5717f20376600e7bf5e471beae1a7c0084f235f0931f8b3f25d2de94ebb86f8b e4685fd9d45b078a6402c285eed3a15cc4550f6656c8bc5e7e274a88d1c7e9b3 +test/extractor-tests/generated/MacroStmts/MacroStmts_getStatement.ql 8958b2212776f487869c29314e7d28f5871f5c3dde62fd9d6f87fb9e94204498 6804f5d4c0c5909689bdcdd5b8ec11ca7a8c0399b47695f66d2f99e39561565a test/extractor-tests/generated/MacroType/MacroType.ql 408327fdb4d7cf096536457401cc280f83cd7e4f6fa9aebd65e64031f6c119cf 0c502d25194ab96eb068a85e3f57a9217510a951fa923e9d7a20fd75412bd6da test/extractor-tests/generated/MacroType/MacroType_getMacroCall.ql 565be7a72670218d7999d3f6cec4e704b754c217186243f1b24c334589fa82e2 ba413c712783320188800e2a78738b09c40fe9a6305c08d9e67e971a8fca96ee test/extractor-tests/generated/MatchArm/MatchArm.ql 512aa404c94ba40b859564f07e9dffe6a5e687fafb039556e9145f4f3742981c 529f96e38cede8a26054f8981d4ba1d189c17d14d0f92d622eb20acd8f3d7e5d diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index b64b089a2f21..22b87763a2d9 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -831,7 +831,8 @@ /test/extractor-tests/generated/MacroDef/MacroDef_getVisibility.ql linguist-generated /test/extractor-tests/generated/MacroExpr/MacroExpr.ql linguist-generated /test/extractor-tests/generated/MacroExpr/MacroExpr_getMacroCall.ql linguist-generated -/test/extractor-tests/generated/MacroItems/MISSING_SOURCE.txt linguist-generated +/test/extractor-tests/generated/MacroItems/MacroItems.ql linguist-generated +/test/extractor-tests/generated/MacroItems/MacroItems_getItem.ql linguist-generated /test/extractor-tests/generated/MacroPat/MacroPat.ql linguist-generated /test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.ql linguist-generated /test/extractor-tests/generated/MacroRules/MacroRules.ql linguist-generated @@ -839,7 +840,9 @@ /test/extractor-tests/generated/MacroRules/MacroRules_getName.ql linguist-generated /test/extractor-tests/generated/MacroRules/MacroRules_getTokenTree.ql linguist-generated /test/extractor-tests/generated/MacroRules/MacroRules_getVisibility.ql linguist-generated -/test/extractor-tests/generated/MacroStmts/MISSING_SOURCE.txt linguist-generated +/test/extractor-tests/generated/MacroStmts/MacroStmts.ql linguist-generated +/test/extractor-tests/generated/MacroStmts/MacroStmts_getExpr.ql linguist-generated +/test/extractor-tests/generated/MacroStmts/MacroStmts_getStatement.ql linguist-generated /test/extractor-tests/generated/MacroType/MacroType.ql linguist-generated /test/extractor-tests/generated/MacroType/MacroType_getMacroCall.ql linguist-generated /test/extractor-tests/generated/MatchArm/MatchArm.ql linguist-generated diff --git a/rust/ql/lib/codeql/rust/elements/MacroItems.qll b/rust/ql/lib/codeql/rust/elements/MacroItems.qll index 621c9884a57d..e189c0dca2e0 100644 --- a/rust/ql/lib/codeql/rust/elements/MacroItems.qll +++ b/rust/ql/lib/codeql/rust/elements/MacroItems.qll @@ -7,4 +7,12 @@ private import internal.MacroItemsImpl import codeql.rust.elements.AstNode import codeql.rust.elements.Item +/** + * A sequence of items generated by a `MacroCall`. For example: + * ```rust + * mod foo{ + * include!("common_definitions.rs"); + * } + * ``` + */ final class MacroItems = Impl::MacroItems; diff --git a/rust/ql/lib/codeql/rust/elements/MacroStmts.qll b/rust/ql/lib/codeql/rust/elements/MacroStmts.qll index a47f35ddeba5..77416d936995 100644 --- a/rust/ql/lib/codeql/rust/elements/MacroStmts.qll +++ b/rust/ql/lib/codeql/rust/elements/MacroStmts.qll @@ -8,4 +8,12 @@ import codeql.rust.elements.AstNode import codeql.rust.elements.Expr import codeql.rust.elements.Stmt +/** + * A sequence of statements generated by a `MacroCall`. For example: + * ```rust + * fn main() { + * println!("Hello, world!"); // This macro expands into a list of statements + * } + * ``` + */ final class MacroStmts = Impl::MacroStmts; diff --git a/rust/ql/lib/codeql/rust/elements/internal/MacroItemsImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MacroItemsImpl.qll index 9d04aff8b24e..2ed6536fac87 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MacroItemsImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MacroItemsImpl.qll @@ -12,5 +12,13 @@ private import codeql.rust.elements.internal.generated.MacroItems * be referenced directly. */ module Impl { + /** + * A sequence of items generated by a `MacroCall`. For example: + * ```rust + * mod foo{ + * include!("common_definitions.rs"); + * } + * ``` + */ class MacroItems extends Generated::MacroItems { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/MacroStmtsImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MacroStmtsImpl.qll index 432a28e66ced..8ec38e3c5266 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MacroStmtsImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MacroStmtsImpl.qll @@ -12,5 +12,13 @@ private import codeql.rust.elements.internal.generated.MacroStmts * be referenced directly. */ module Impl { + /** + * A sequence of statements generated by a `MacroCall`. For example: + * ```rust + * fn main() { + * println!("Hello, world!"); // This macro expands into a list of statements + * } + * ``` + */ class MacroStmts extends Generated::MacroStmts { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroItems.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroItems.qll index b9c802be8433..c86181ff5d5c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroItems.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroItems.qll @@ -15,6 +15,12 @@ import codeql.rust.elements.Item */ module Generated { /** + * A sequence of items generated by a `MacroCall`. For example: + * ```rust + * mod foo{ + * include!("common_definitions.rs"); + * } + * ``` * INTERNAL: Do not reference the `Generated::MacroItems` class directly. * Use the subclass `MacroItems`, where the following predicates are available. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroStmts.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroStmts.qll index 331277241fa5..e80debcb27dc 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroStmts.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroStmts.qll @@ -16,6 +16,12 @@ import codeql.rust.elements.Stmt */ module Generated { /** + * A sequence of statements generated by a `MacroCall`. For example: + * ```rust + * fn main() { + * println!("Hello, world!"); // This macro expands into a list of statements + * } + * ``` * INTERNAL: Do not reference the `Generated::MacroStmts` class directly. * Use the subclass `MacroStmts`, where the following predicates are available. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index aa426bd92aef..0a4506ab4b7d 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -331,6 +331,12 @@ module Raw { /** * INTERNAL: Do not use. + * A sequence of items generated by a `MacroCall`. For example: + * ```rust + * mod foo{ + * include!("common_definitions.rs"); + * } + * ``` */ class MacroItems extends @macro_items, AstNode { override string toString() { result = "MacroItems" } @@ -343,6 +349,12 @@ module Raw { /** * INTERNAL: Do not use. + * A sequence of statements generated by a `MacroCall`. For example: + * ```rust + * fn main() { + * println!("Hello, world!"); // This macro expands into a list of statements + * } + * ``` */ class MacroStmts extends @macro_stmts, AstNode { override string toString() { result = "MacroStmts" } diff --git a/rust/ql/test/extractor-tests/generated/.generated_tests.list b/rust/ql/test/extractor-tests/generated/.generated_tests.list index 9cd5c07427a8..62b8447a136d 100644 --- a/rust/ql/test/extractor-tests/generated/.generated_tests.list +++ b/rust/ql/test/extractor-tests/generated/.generated_tests.list @@ -57,8 +57,10 @@ LoopExpr/gen_loop_expr.rs 35deaf35e765db4ae3124a11284266d8f341d1ce7b700030efada0 MacroCall/gen_macro_call.rs 139ef2c69323eea1a901e260d4e2acdd00b26f013b90c9344f48c6503ce29d79 139ef2c69323eea1a901e260d4e2acdd00b26f013b90c9344f48c6503ce29d79 MacroDef/gen_macro_def.rs 17c5387fb464a60b4a4520d22b055ba35ff23e9fe431a18a33808ae02c4bbff5 17c5387fb464a60b4a4520d22b055ba35ff23e9fe431a18a33808ae02c4bbff5 MacroExpr/gen_macro_expr.rs 3c23dc88fcc4bc8f97d9364d2f367671a0a5a63d07e52237d28204b64756dcdb 3c23dc88fcc4bc8f97d9364d2f367671a0a5a63d07e52237d28204b64756dcdb +MacroItems/gen_macro_items.rs 8ef3e16b73635dc97afa3ffa4db2bb21a8f1b435176861a594b0200cc5b9b931 8ef3e16b73635dc97afa3ffa4db2bb21a8f1b435176861a594b0200cc5b9b931 MacroPat/gen_macro_pat.rs b8041370598bd7fb26778d829a15c415c2078d69124f6af634ddeba13a114aa0 b8041370598bd7fb26778d829a15c415c2078d69124f6af634ddeba13a114aa0 MacroRules/gen_macro_rules.rs 7e03b410f4669e422d3b4328f7aafdca2e286e5d951495dd69cee0d44cb793a9 7e03b410f4669e422d3b4328f7aafdca2e286e5d951495dd69cee0d44cb793a9 +MacroStmts/gen_macro_stmts.rs 2e45dcf44bf2e8404b49ce9abeee4931572693174b5d96f3fd81eb40ea8e7b4b 2e45dcf44bf2e8404b49ce9abeee4931572693174b5d96f3fd81eb40ea8e7b4b MacroType/gen_macro_type.rs 84db79c78860512b14f885391fcae999ca7282f2d8a9ab65d30cc413d5bbebd0 84db79c78860512b14f885391fcae999ca7282f2d8a9ab65d30cc413d5bbebd0 MatchArm/gen_match_arm.rs ac75b4836a103e2755bd47a1ee1b74af6eb8349adc4ebedaaa27b3ea3ae41aa5 ac75b4836a103e2755bd47a1ee1b74af6eb8349adc4ebedaaa27b3ea3ae41aa5 MatchArmList/gen_match_arm_list.rs dbf36444d371421a2b8768a188660dd45ed3b823fb1c56b90c1ba77f177d23d6 dbf36444d371421a2b8768a188660dd45ed3b823fb1c56b90c1ba77f177d23d6 diff --git a/rust/ql/test/extractor-tests/generated/.gitattributes b/rust/ql/test/extractor-tests/generated/.gitattributes index 573ce113977e..136801c1ce37 100644 --- a/rust/ql/test/extractor-tests/generated/.gitattributes +++ b/rust/ql/test/extractor-tests/generated/.gitattributes @@ -59,8 +59,10 @@ /MacroCall/gen_macro_call.rs linguist-generated /MacroDef/gen_macro_def.rs linguist-generated /MacroExpr/gen_macro_expr.rs linguist-generated +/MacroItems/gen_macro_items.rs linguist-generated /MacroPat/gen_macro_pat.rs linguist-generated /MacroRules/gen_macro_rules.rs linguist-generated +/MacroStmts/gen_macro_stmts.rs linguist-generated /MacroType/gen_macro_type.rs linguist-generated /MatchArm/gen_match_arm.rs linguist-generated /MatchArmList/gen_match_arm_list.rs linguist-generated diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/MISSING_SOURCE.txt b/rust/ql/test/extractor-tests/generated/MacroItems/MISSING_SOURCE.txt deleted file mode 100644 index 7f96b17b1f3c..000000000000 --- a/rust/ql/test/extractor-tests/generated/MacroItems/MISSING_SOURCE.txt +++ /dev/null @@ -1,4 +0,0 @@ -// generated by codegen, do not edit - -After a source file is added in this directory and codegen is run again, test queries -will appear and this file will be deleted diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems.expected b/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems.expected new file mode 100644 index 000000000000..6ef208f9c742 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems.expected @@ -0,0 +1 @@ +| file://:0:0:0:0 | MacroItems | getNumberOfItems: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems.ql b/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems.ql new file mode 100644 index 000000000000..cd72b24c18d9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems.ql @@ -0,0 +1,10 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroItems x, int getNumberOfItems +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfItems = x.getNumberOfItems() +select x, "getNumberOfItems:", getNumberOfItems diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems_getItem.expected b/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems_getItem.expected new file mode 100644 index 000000000000..a66e6bcca5ec --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems_getItem.expected @@ -0,0 +1,2 @@ +| file://:0:0:0:0 | MacroItems | 0 | file://:0:0:0:0 | Use | +| file://:0:0:0:0 | MacroItems | 1 | file://:0:0:0:0 | get_parent | diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems_getItem.ql b/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems_getItem.ql new file mode 100644 index 000000000000..09aaa2b8be7a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems_getItem.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroItems x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getItem(index) diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/common_definitions.rs b/rust/ql/test/extractor-tests/generated/MacroItems/common_definitions.rs new file mode 100644 index 000000000000..95a388ea93dd --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroItems/common_definitions.rs @@ -0,0 +1,5 @@ +use std::path::Path; + +fn get_parent(path: &Path) -> &Path { + path.parent().unwrap() +} diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/gen_macro_items.rs b/rust/ql/test/extractor-tests/generated/MacroItems/gen_macro_items.rs new file mode 100644 index 000000000000..08914ad04525 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroItems/gen_macro_items.rs @@ -0,0 +1,6 @@ +// generated by codegen, do not edit + +// A sequence of items generated by a `MacroCall`. For example: +mod foo{ + include!("common_definitions.rs"); +} diff --git a/rust/ql/test/extractor-tests/generated/MacroStmts/MISSING_SOURCE.txt b/rust/ql/test/extractor-tests/generated/MacroStmts/MISSING_SOURCE.txt deleted file mode 100644 index 7f96b17b1f3c..000000000000 --- a/rust/ql/test/extractor-tests/generated/MacroStmts/MISSING_SOURCE.txt +++ /dev/null @@ -1,4 +0,0 @@ -// generated by codegen, do not edit - -After a source file is added in this directory and codegen is run again, test queries -will appear and this file will be deleted diff --git a/rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts.expected b/rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts.expected new file mode 100644 index 000000000000..e74a5e4e8575 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts.expected @@ -0,0 +1 @@ +| gen_macro_stmts.rs:5:14:5:28 | MacroStmts | hasExpr: | yes | getNumberOfStatements: | 0 | diff --git a/rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts.ql b/rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts.ql new file mode 100644 index 000000000000..189e280605ce --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts.ql @@ -0,0 +1,11 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroStmts x, string hasExpr, int getNumberOfStatements +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasExpr() then hasExpr = "yes" else hasExpr = "no") and + getNumberOfStatements = x.getNumberOfStatements() +select x, "hasExpr:", hasExpr, "getNumberOfStatements:", getNumberOfStatements diff --git a/rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts_getExpr.expected b/rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts_getExpr.expected new file mode 100644 index 000000000000..7d30926c1528 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts_getExpr.expected @@ -0,0 +1 @@ +| gen_macro_stmts.rs:5:14:5:28 | MacroStmts | gen_macro_stmts.rs:5:14:5:28 | BlockExpr | diff --git a/rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts_getExpr.ql b/rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts_getExpr.ql new file mode 100644 index 000000000000..f03854ddb147 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts_getExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroStmts x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpr() diff --git a/rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts_getStatement.expected b/rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts_getStatement.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts_getStatement.ql b/rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts_getStatement.ql new file mode 100644 index 000000000000..0d0743de096e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts_getStatement.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroStmts x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getStatement(index) diff --git a/rust/ql/test/extractor-tests/generated/MacroStmts/gen_macro_stmts.rs b/rust/ql/test/extractor-tests/generated/MacroStmts/gen_macro_stmts.rs new file mode 100644 index 000000000000..035b7ddc98c6 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroStmts/gen_macro_stmts.rs @@ -0,0 +1,6 @@ +// generated by codegen, do not edit + +// A sequence of statements generated by a `MacroCall`. For example: +fn main() { + println!("Hello, world!"); // This macro expands into a list of statements +} diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index 8fc7d3e59c31..2046aa9e5365 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -1166,6 +1166,19 @@ class _: """ +@annotate(MacroItems) +@rust.doc_test_signature(None) +class _: + """ + A sequence of items generated by a `MacroCall`. For example: + ```rust + mod foo{ + include!("common_definitions.rs"); + } + ``` + """ + + @annotate(MacroPat) class _: """ @@ -1186,6 +1199,19 @@ class _: """ +@annotate(MacroStmts) +@rust.doc_test_signature(None) +class _: + """ + A sequence of statements generated by a `MacroCall`. For example: + ```rust + fn main() { + println!("Hello, world!"); // This macro expands into a list of statements + } + ``` + """ + + @annotate(MacroType) class _: """ From 7420d07935d166daaf4f7387bac21339315035cb Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 10 Oct 2024 15:54:14 +0100 Subject: [PATCH 062/217] Update ruby/ql/lib/codeql/ruby/AST.qll Co-authored-by: Arthur Baars --- ruby/ql/lib/codeql/ruby/AST.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby/ql/lib/codeql/ruby/AST.qll b/ruby/ql/lib/codeql/ruby/AST.qll index e98749af4273..bd42696a8dbe 100644 --- a/ruby/ql/lib/codeql/ruby/AST.qll +++ b/ruby/ql/lib/codeql/ruby/AST.qll @@ -172,7 +172,7 @@ class RubyFile extends File { * A successfully extracted file, that is, a file that was extracted and * contains no extraction errors or warnings. */ -class SuccessfullyExtractedFile extends RubyFile { +class SuccessfullyExtractedFile extends File { SuccessfullyExtractedFile() { not exists(Diagnostic d | d.getLocation().getFile() = this and From f1a350c96a752154cc26da755366a1931777ed8e Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 10 Oct 2024 20:00:55 +0200 Subject: [PATCH 063/217] C++: Print handler parameters in PrintAST --- cpp/ql/lib/semmle/code/cpp/PrintAST.qll | 20 +++++++++++++++++++ .../examples/expressions/PrintAST.expected | 2 ++ .../library-tests/ir/ir/PrintAST.expected | 14 +++++++++++++ 3 files changed, 36 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/PrintAST.qll b/cpp/ql/lib/semmle/code/cpp/PrintAST.qll index 6194710f0c58..3bdbd637cca6 100644 --- a/cpp/ql/lib/semmle/code/cpp/PrintAST.qll +++ b/cpp/ql/lib/semmle/code/cpp/PrintAST.qll @@ -80,6 +80,8 @@ private Declaration getAnEnclosingDeclaration(Locatable ast) { or result = ast.(Parameter).getFunction() or + result = ast.(Parameter).getCatchBlock().getEnclosingFunction() + or result = ast.(Expr).getEnclosingDeclaration() or result = ast.(Initializer).getDeclaration() @@ -510,6 +512,22 @@ class DeclStmtNode extends StmtNode { } } +/** + * A node representing a `Handler`. + */ +class HandlerNode extends ChildStmtNode { + Handler handler; + + HandlerNode() { handler = stmt } + + override BaseAstNode getChildInternal(int childIndex) { + result = super.getChildInternal(childIndex) + or + childIndex = -1 and + result.getAst() = handler.getParameter() + } +} + /** * A node representing a `Parameter`. */ @@ -754,6 +772,8 @@ private predicate namedStmtChildPredicates(Locatable s, Element e, string pred) or s.(ConstexprIfStmt).getElse() = e and pred = "getElse()" or + s.(Handler).getParameter() = e and pred = "getParameter()" + or s.(IfStmt).getInitialization() = e and pred = "getInitialization()" or s.(IfStmt).getCondition() = e and pred = "getCondition()" diff --git a/cpp/ql/test/examples/expressions/PrintAST.expected b/cpp/ql/test/examples/expressions/PrintAST.expected index 7de95cb8b4a4..e8e753becb56 100644 --- a/cpp/ql/test/examples/expressions/PrintAST.expected +++ b/cpp/ql/test/examples/expressions/PrintAST.expected @@ -870,6 +870,8 @@ Throw.cpp: # 8| Type = [BoolType] bool # 8| ValueCategory = prvalue # 12| getChild(1): [Handler] +# 12| getParameter(): [Parameter] e +# 12| Type = [PointerType] E * # 12| getBlock(): [CatchBlock] { ... } # 13| getStmt(0): [ExprStmt] ExprStmt # 13| getExpr(): [ReThrowExpr] re-throw exception diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 1e0ef80c269b..510d13fdfa2b 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -9055,6 +9055,8 @@ ir.cpp: # 733| Value = [Literal] 7 # 733| ValueCategory = prvalue # 735| getChild(1): [Handler] +# 735| getParameter(): [Parameter] s +# 735| Type = [PointerType] const char * # 735| getBlock(): [CatchBlock] { ... } # 736| getStmt(0): [ExprStmt] ExprStmt # 736| getExpr(): [ThrowExpr] throw ... @@ -9067,6 +9069,8 @@ ir.cpp: # 736| Type = [PointerType] const char * # 736| ValueCategory = prvalue(load) # 738| getChild(2): [Handler] +# 738| getParameter(): [Parameter] e +# 738| Type = [LValueReferenceType] const String & # 738| getBlock(): [CatchBlock] { ... } # 740| getChild(3): [Handler] # 740| getBlock(): [CatchAnyBlock] { ... } @@ -12852,6 +12856,8 @@ ir.cpp: # 1200| Value = [Literal] 7 # 1200| ValueCategory = prvalue # 1202| getChild(1): [Handler] +# 1202| getParameter(): [Parameter] s +# 1202| Type = [PointerType] const char * # 1202| getBlock(): [CatchBlock] { ... } # 1203| getStmt(0): [ExprStmt] ExprStmt # 1203| getExpr(): [ThrowExpr] throw ... @@ -12864,6 +12870,8 @@ ir.cpp: # 1203| Type = [PointerType] const char * # 1203| ValueCategory = prvalue(load) # 1205| getChild(2): [Handler] +# 1205| getParameter(): [Parameter] e +# 1205| Type = [LValueReferenceType] const String & # 1205| getBlock(): [CatchBlock] { ... } # 1207| getStmt(1): [ReturnStmt] return ... # 1211| [TopLevelFunction] void VectorTypes(int) @@ -20586,6 +20594,8 @@ ir.cpp: # 2281| Type = [Struct] String # 2281| ValueCategory = lvalue # 2282| getChild(1): [Handler] +# 2282| getParameter(): [Parameter] s +# 2282| Type = [PointerType] const char * # 2282| getBlock(): [CatchBlock] { ... } # 2283| getStmt(0): [ExprStmt] ExprStmt # 2283| getExpr(): [ThrowExpr] throw ... @@ -20598,6 +20608,8 @@ ir.cpp: # 2283| Type = [PointerType] const char * # 2283| ValueCategory = prvalue(load) # 2285| getChild(2): [Handler] +# 2285| getParameter(): [Parameter] e +# 2285| Type = [LValueReferenceType] const String & # 2285| getBlock(): [CatchBlock] { ... } # 2287| getChild(3): [Handler] # 2287| getBlock(): [CatchAnyBlock] { ... } @@ -22845,6 +22857,8 @@ ir.cpp: # 2537| Value = [Literal] 42 # 2537| ValueCategory = prvalue # 2539| getChild(1): [Handler] +# 2539| getParameter(): [Parameter] (unnamed parameter 0) +# 2539| Type = [PlainCharType] char # 2539| getBlock(): [CatchBlock] { ... } # 2541| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor # 2541| Type = [VoidType] void From 665da3958a39a986092f6e6470bbb7f6b0ac8c35 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 10 Oct 2024 09:47:05 +0200 Subject: [PATCH 064/217] Rust: Add CFG test for nested function --- .../library-tests/controlflow/Cfg.expected | 20 +++++++++++++++++++ .../ql/test/library-tests/controlflow/test.rs | 8 ++++++++ 2 files changed, 28 insertions(+) diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 036dca8af5a3..4c3a60312f9a 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -565,6 +565,26 @@ edges | test.rs:299:13:299:27 | ExprStmt | test.rs:299:26:299:26 | 1 | | | test.rs:299:26:299:26 | 1 | test.rs:299:13:299:26 | BreakExpr | | | test.rs:301:9:301:9 | x | test.rs:296:18:302:5 | BlockExpr | | +| test.rs:305:1:311:1 | enter test_nested_function | test.rs:306:5:306:18 | LetStmt | | +| test.rs:305:1:311:1 | exit test_nested_function (normal) | test.rs:305:1:311:1 | exit test_nested_function | | +| test.rs:305:27:311:1 | BlockExpr | test.rs:305:1:311:1 | exit test_nested_function (normal) | | +| test.rs:306:5:306:18 | LetStmt | test.rs:306:17:306:17 | 0 | | +| test.rs:306:9:306:13 | x | test.rs:307:5:309:5 | nested | match, no-match | +| test.rs:306:17:306:17 | 0 | test.rs:306:9:306:13 | x | | +| test.rs:307:5:309:5 | enter nested | test.rs:308:9:308:16 | ExprStmt | | +| test.rs:307:5:309:5 | exit nested (normal) | test.rs:307:5:309:5 | exit nested | | +| test.rs:307:5:309:5 | nested | test.rs:310:5:310:19 | ExprStmt | | +| test.rs:307:29:309:5 | BlockExpr | test.rs:307:5:309:5 | exit nested (normal) | | +| test.rs:308:9:308:10 | * ... | test.rs:308:15:308:15 | 1 | | +| test.rs:308:9:308:15 | ... += ... | test.rs:307:29:309:5 | BlockExpr | | +| test.rs:308:9:308:16 | ExprStmt | test.rs:308:10:308:10 | x | | +| test.rs:308:10:308:10 | x | test.rs:308:9:308:10 | * ... | | +| test.rs:308:15:308:15 | 1 | test.rs:308:9:308:15 | ... += ... | | +| test.rs:310:5:310:10 | PathExpr | test.rs:310:17:310:17 | x | | +| test.rs:310:5:310:18 | CallExpr | test.rs:305:27:311:1 | BlockExpr | | +| test.rs:310:5:310:19 | ExprStmt | test.rs:310:5:310:10 | PathExpr | | +| test.rs:310:12:310:17 | RefExpr | test.rs:310:5:310:18 | CallExpr | | +| test.rs:310:17:310:17 | x | test.rs:310:12:310:17 | RefExpr | | breakTarget | test.rs:16:17:16:21 | BreakExpr | test.rs:10:9:22:9 | LoopExpr | | test.rs:30:21:30:25 | BreakExpr | test.rs:28:13:35:13 | LoopExpr | diff --git a/rust/ql/test/library-tests/controlflow/test.rs b/rust/ql/test/library-tests/controlflow/test.rs index 4ad742b30444..74a8589181c3 100644 --- a/rust/ql/test/library-tests/controlflow/test.rs +++ b/rust/ql/test/library-tests/controlflow/test.rs @@ -301,3 +301,11 @@ fn labelled_block2() -> i64 { x }; } + +fn test_nested_function() { + let mut x = 0; + fn nested(x : &mut i64) { + *x += 1; + } + nested(&mut x); +} \ No newline at end of file From f6f54c6e3b927b8e4782937b2cf998461117da14 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 8 Oct 2024 10:59:43 +0200 Subject: [PATCH 065/217] Rust: Include parameters in the CFG --- .../internal/ControlFlowGraphImpl.qll | 50 ++++++- .../rust/controlflow/internal/Scope.qll | 8 +- .../library-tests/controlflow/Cfg.expected | 132 ++++++++++++++---- .../test/library-tests/variables/Cfg.expected | 30 +++- 4 files changed, 181 insertions(+), 39 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index 8bb27c3d9910..84ddc28de9e6 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -183,7 +183,26 @@ class CastExprTree extends StandardPostOrderTree instanceof CastExpr { override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } } -class ClosureExprTree extends LeafTree instanceof ClosureExpr { } +// Closures have their own CFG scope, so we need to make sure that their +// CFG is not mixed with the surrounding CFG. This is done by retrofitting +// `first`, `propagatesAbnormal`, and `succ` below. +class ClosureExprTree extends StandardPostOrderTree, ClosureExpr { + override predicate first(AstNode first) { first = this } + + override predicate propagatesAbnormal(AstNode child) { none() } + + override AstNode getChildNode(int i) { + result = this.getParamList().getParam(i) + or + i = this.getParamList().getNumberOfParams() and + result = this.getBody() + } + + override predicate succ(AstNode pred, AstNode succ, Completion c) { + super.succ(pred, succ, c) and + not succ = this + } +} class ContinueExprTree extends LeafTree, ContinueExpr { override predicate last(AstNode last, Completion c) { none() } @@ -203,7 +222,34 @@ class FieldExprTree extends StandardPostOrderTree instanceof FieldExpr { override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } } -class FunctionTree extends LeafTree instanceof Function { } +// Functions have their own CFG scope, so we need to make sure that their +// CFG is not mixed with the surrounding CFG in case of nested functions. +// This is done by retrofitting `last`, `propagatesAbnormal`, and `succ` +// below. +class FunctionTree extends StandardPreOrderTree, Function { + override predicate last(AstNode last, Completion c) { + last = this and + completionIsValidFor(c, this) + } + + override predicate propagatesAbnormal(AstNode child) { none() } + + override AstNode getChildNode(int i) { + result = this.getParamList().getParam(i) + or + i = this.getParamList().getNumberOfParams() and + result = this.getBody() + } + + override predicate succ(AstNode pred, AstNode succ, Completion c) { + super.succ(pred, succ, c) and + not pred = this + } +} + +class ParamTree extends StandardPostOrderTree, Param { + override AstNode getChildNode(int i) { i = 0 and result = this.getPat() } +} class IfExprTree extends PostOrderTree instanceof IfExpr { override predicate first(AstNode node) { first(super.getCondition(), node) } diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/Scope.qll b/rust/ql/lib/codeql/rust/controlflow/internal/Scope.qll index bfc0d2ed3b9a..da4e153597d0 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/Scope.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/Scope.qll @@ -12,13 +12,17 @@ abstract class CfgScope extends AstNode { } final class FunctionScope extends CfgScope, Function { - override predicate scopeFirst(AstNode node) { first(this.getBody(), node) } + override predicate scopeFirst(AstNode node) { + first(this.(FunctionTree).getFirstChildNode(), node) + } override predicate scopeLast(AstNode node, Completion c) { last(this.getBody(), node, c) } } final class ClosureScope extends CfgScope, ClosureExpr { - override predicate scopeFirst(AstNode node) { first(this.getBody(), node) } + override predicate scopeFirst(AstNode node) { + first(this.(ClosureExprTree).getFirstChildNode(), node) + } override predicate scopeLast(AstNode node, Completion c) { last(this.getBody(), node, c) } } diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 4c3a60312f9a..853a99e2c986 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -12,8 +12,10 @@ edges | test.rs:3:5:3:23 | CallExpr | test.rs:1:24:4:1 | BlockExpr | | | test.rs:3:5:3:24 | ExprStmt | test.rs:3:5:3:19 | PathExpr | | | test.rs:3:21:3:22 | 42 | test.rs:3:5:3:23 | CallExpr | | -| test.rs:8:5:24:5 | enter test_break_and_continue | test.rs:9:9:9:22 | LetStmt | | +| test.rs:8:5:24:5 | enter test_break_and_continue | test.rs:8:32:8:32 | n | | | test.rs:8:5:24:5 | exit test_break_and_continue (normal) | test.rs:8:5:24:5 | exit test_break_and_continue | | +| test.rs:8:32:8:32 | n | test.rs:8:32:8:37 | Param | match, no-match | +| test.rs:8:32:8:37 | Param | test.rs:9:9:9:22 | LetStmt | | | test.rs:9:9:9:22 | LetStmt | test.rs:9:21:9:21 | n | | | test.rs:9:13:9:17 | i | test.rs:10:9:22:9 | ExprStmt | match, no-match | | test.rs:9:21:9:21 | n | test.rs:9:13:9:17 | i | | @@ -61,8 +63,10 @@ edges | test.rs:23:9:23:19 | ReturnExpr | test.rs:8:5:24:5 | exit test_break_and_continue (normal) | return | | test.rs:23:9:23:20 | ExprStmt | test.rs:23:16:23:19 | true | | | test.rs:23:16:23:19 | true | test.rs:23:9:23:19 | ReturnExpr | | -| test.rs:26:5:38:5 | enter test_break_with_labels | test.rs:27:9:36:9 | ExprStmt | | +| test.rs:26:5:38:5 | enter test_break_with_labels | test.rs:26:31:26:31 | b | | | test.rs:26:5:38:5 | exit test_break_with_labels (normal) | test.rs:26:5:38:5 | exit test_break_with_labels | | +| test.rs:26:31:26:31 | b | test.rs:26:31:26:37 | Param | match, no-match | +| test.rs:26:31:26:37 | Param | test.rs:27:9:36:9 | ExprStmt | | | test.rs:26:48:38:5 | BlockExpr | test.rs:26:5:38:5 | exit test_break_with_labels (normal) | | | test.rs:27:9:36:9 | ExprStmt | test.rs:29:17:33:17 | ExprStmt | | | test.rs:27:9:36:9 | LoopExpr | test.rs:37:9:37:12 | true | | @@ -82,7 +86,9 @@ edges | test.rs:34:17:34:28 | BreakExpr | test.rs:28:13:35:13 | LoopExpr | break | | test.rs:34:17:34:29 | ExprStmt | test.rs:34:17:34:28 | BreakExpr | | | test.rs:37:9:37:12 | true | test.rs:26:48:38:5 | BlockExpr | | -| test.rs:40:5:52:5 | enter test_continue_with_labels | test.rs:42:13:42:14 | ExprStmt | | +| test.rs:40:5:52:5 | enter test_continue_with_labels | test.rs:40:34:40:34 | b | | +| test.rs:40:34:40:34 | b | test.rs:40:34:40:40 | Param | match, no-match | +| test.rs:40:34:40:40 | Param | test.rs:42:13:42:14 | ExprStmt | | | test.rs:42:13:42:13 | 1 | test.rs:44:17:48:17 | ExprStmt | | | test.rs:42:13:42:14 | ExprStmt | test.rs:42:13:42:13 | 1 | | | test.rs:44:17:48:17 | ExprStmt | test.rs:44:20:44:20 | b | | @@ -98,7 +104,9 @@ edges | test.rs:47:21:47:36 | ExprStmt | test.rs:47:21:47:35 | ContinueExpr | | | test.rs:49:17:49:31 | ContinueExpr | test.rs:44:17:48:17 | ExprStmt | continue | | test.rs:49:17:49:32 | ExprStmt | test.rs:49:17:49:31 | ContinueExpr | | -| test.rs:54:5:66:5 | enter test_loop_label_shadowing | test.rs:56:13:56:14 | ExprStmt | | +| test.rs:54:5:66:5 | enter test_loop_label_shadowing | test.rs:54:34:54:34 | b | | +| test.rs:54:34:54:34 | b | test.rs:54:34:54:40 | Param | match, no-match | +| test.rs:54:34:54:40 | Param | test.rs:56:13:56:14 | ExprStmt | | | test.rs:56:13:56:13 | 1 | test.rs:58:17:62:17 | ExprStmt | | | test.rs:56:13:56:14 | ExprStmt | test.rs:56:13:56:13 | 1 | | | test.rs:58:17:62:17 | ExprStmt | test.rs:58:20:58:20 | b | | @@ -114,8 +122,10 @@ edges | test.rs:61:21:61:35 | ExprStmt | test.rs:61:21:61:34 | ContinueExpr | | | test.rs:63:17:63:30 | ContinueExpr | test.rs:58:17:62:17 | ExprStmt | continue | | test.rs:63:17:63:31 | ExprStmt | test.rs:63:17:63:30 | ContinueExpr | | -| test.rs:68:5:77:5 | enter test_while | test.rs:69:9:69:25 | LetStmt | | +| test.rs:68:5:77:5 | enter test_while | test.rs:68:19:68:19 | i | | | test.rs:68:5:77:5 | exit test_while (normal) | test.rs:68:5:77:5 | exit test_while | | +| test.rs:68:19:68:19 | i | test.rs:68:19:68:24 | Param | match, no-match | +| test.rs:68:19:68:24 | Param | test.rs:69:9:69:25 | LetStmt | | | test.rs:68:27:77:5 | BlockExpr | test.rs:68:5:77:5 | exit test_while (normal) | | | test.rs:69:9:69:25 | LetStmt | test.rs:69:21:69:24 | true | | | test.rs:69:13:69:17 | b | test.rs:70:15:70:15 | b | match, no-match | @@ -158,8 +168,10 @@ edges | test.rs:82:21:82:21 | 5 | test.rs:82:17:82:21 | ... = ... | | | test.rs:83:17:83:21 | BreakExpr | test.rs:81:9:85:9 | WhileExpr | break | | test.rs:83:17:83:22 | ExprStmt | test.rs:83:17:83:21 | BreakExpr | | -| test.rs:88:5:95:5 | enter test_for | test.rs:89:18:89:18 | 0 | | +| test.rs:88:5:95:5 | enter test_for | test.rs:88:17:88:17 | j | | | test.rs:88:5:95:5 | exit test_for (normal) | test.rs:88:5:95:5 | exit test_for | | +| test.rs:88:17:88:17 | j | test.rs:88:17:88:22 | Param | match, no-match | +| test.rs:88:17:88:22 | Param | test.rs:89:18:89:18 | 0 | | | test.rs:88:25:95:5 | BlockExpr | test.rs:88:5:95:5 | exit test_for (normal) | | | test.rs:89:9:94:9 | ForExpr | test.rs:88:25:95:5 | BlockExpr | | | test.rs:89:13:89:13 | i | test.rs:89:9:94:9 | ForExpr | no-match | @@ -178,14 +190,18 @@ edges | test.rs:91:17:91:22 | ExprStmt | test.rs:91:17:91:21 | BreakExpr | | | test.rs:93:13:93:13 | 1 | test.rs:89:24:94:9 | BlockExpr | | | test.rs:93:13:93:14 | ExprStmt | test.rs:93:13:93:13 | 1 | | -| test.rs:98:1:101:1 | enter test_nested_function | test.rs:99:5:99:28 | LetStmt | | +| test.rs:98:1:101:1 | enter test_nested_function | test.rs:98:25:98:25 | n | | | test.rs:98:1:101:1 | exit test_nested_function (normal) | test.rs:98:1:101:1 | exit test_nested_function | | +| test.rs:98:25:98:25 | n | test.rs:98:25:98:30 | Param | match, no-match | +| test.rs:98:25:98:30 | Param | test.rs:99:5:99:28 | LetStmt | | | test.rs:98:40:101:1 | BlockExpr | test.rs:98:1:101:1 | exit test_nested_function (normal) | | | test.rs:99:5:99:28 | LetStmt | test.rs:99:19:99:27 | ClosureExpr | | | test.rs:99:9:99:15 | add_one | test.rs:100:5:100:11 | add_one | match, no-match | | test.rs:99:19:99:27 | ClosureExpr | test.rs:99:9:99:15 | add_one | | -| test.rs:99:19:99:27 | enter ClosureExpr | test.rs:99:23:99:23 | i | | +| test.rs:99:19:99:27 | enter ClosureExpr | test.rs:99:20:99:20 | i | | | test.rs:99:19:99:27 | exit ClosureExpr (normal) | test.rs:99:19:99:27 | exit ClosureExpr | | +| test.rs:99:20:99:20 | Param | test.rs:99:23:99:23 | i | | +| test.rs:99:20:99:20 | i | test.rs:99:20:99:20 | Param | match, no-match | | test.rs:99:23:99:23 | i | test.rs:99:27:99:27 | 1 | | | test.rs:99:23:99:27 | ... + ... | test.rs:99:19:99:27 | exit ClosureExpr (normal) | | | test.rs:99:27:99:27 | 1 | test.rs:99:23:99:27 | ... + ... | | @@ -194,8 +210,10 @@ edges | test.rs:100:13:100:19 | add_one | test.rs:100:21:100:21 | n | | | test.rs:100:13:100:22 | CallExpr | test.rs:100:5:100:23 | CallExpr | | | test.rs:100:21:100:21 | n | test.rs:100:13:100:22 | CallExpr | | -| test.rs:105:5:111:5 | enter test_if_else | test.rs:106:12:106:12 | n | | +| test.rs:105:5:111:5 | enter test_if_else | test.rs:105:21:105:21 | n | | | test.rs:105:5:111:5 | exit test_if_else (normal) | test.rs:105:5:111:5 | exit test_if_else | | +| test.rs:105:21:105:21 | n | test.rs:105:21:105:26 | Param | match, no-match | +| test.rs:105:21:105:26 | Param | test.rs:106:12:106:12 | n | | | test.rs:105:36:111:5 | BlockExpr | test.rs:105:5:111:5 | exit test_if_else (normal) | | | test.rs:106:9:110:9 | IfExpr | test.rs:105:36:111:5 | BlockExpr | | | test.rs:106:12:106:12 | n | test.rs:106:17:106:17 | 0 | | @@ -208,8 +226,10 @@ edges | test.rs:109:13:109:13 | n | test.rs:109:17:109:17 | 1 | | | test.rs:109:13:109:17 | ... - ... | test.rs:108:16:110:9 | BlockExpr | | | test.rs:109:17:109:17 | 1 | test.rs:109:13:109:17 | ... - ... | | -| test.rs:113:5:119:5 | enter test_if_let_else | test.rs:114:12:114:26 | LetExpr | | +| test.rs:113:5:119:5 | enter test_if_let_else | test.rs:113:25:113:25 | a | | | test.rs:113:5:119:5 | exit test_if_let_else (normal) | test.rs:113:5:119:5 | exit test_if_let_else | | +| test.rs:113:25:113:25 | a | test.rs:113:25:113:38 | Param | match, no-match | +| test.rs:113:25:113:38 | Param | test.rs:114:12:114:26 | LetExpr | | | test.rs:113:48:119:5 | BlockExpr | test.rs:113:5:119:5 | exit test_if_let_else (normal) | | | test.rs:114:9:118:9 | IfExpr | test.rs:113:48:119:5 | BlockExpr | | | test.rs:114:12:114:26 | LetExpr | test.rs:114:16:114:22 | TupleStructPat | | @@ -219,8 +239,10 @@ edges | test.rs:115:13:115:13 | n | test.rs:114:28:116:9 | BlockExpr | | | test.rs:116:16:118:9 | BlockExpr | test.rs:114:9:118:9 | IfExpr | | | test.rs:117:13:117:13 | 0 | test.rs:116:16:118:9 | BlockExpr | | -| test.rs:121:5:126:5 | enter test_if_let | test.rs:122:9:124:9 | ExprStmt | | +| test.rs:121:5:126:5 | enter test_if_let | test.rs:121:20:121:20 | a | | | test.rs:121:5:126:5 | exit test_if_let (normal) | test.rs:121:5:126:5 | exit test_if_let | | +| test.rs:121:20:121:20 | a | test.rs:121:20:121:33 | Param | match, no-match | +| test.rs:121:20:121:33 | Param | test.rs:122:9:124:9 | ExprStmt | | | test.rs:121:43:126:5 | BlockExpr | test.rs:121:5:126:5 | exit test_if_let (normal) | | | test.rs:122:9:124:9 | ExprStmt | test.rs:122:12:122:26 | LetExpr | | | test.rs:122:9:124:9 | IfExpr | test.rs:125:9:125:9 | 0 | | @@ -230,8 +252,10 @@ edges | test.rs:122:28:124:9 | BlockExpr | test.rs:122:9:124:9 | IfExpr | | | test.rs:123:13:123:13 | n | test.rs:122:28:124:9 | BlockExpr | | | test.rs:125:9:125:9 | 0 | test.rs:121:43:126:5 | BlockExpr | | -| test.rs:128:5:134:5 | enter test_nested_if | test.rs:129:16:129:16 | a | | +| test.rs:128:5:134:5 | enter test_nested_if | test.rs:128:23:128:23 | a | | | test.rs:128:5:134:5 | exit test_nested_if (normal) | test.rs:128:5:134:5 | exit test_nested_if | | +| test.rs:128:23:128:23 | a | test.rs:128:23:128:28 | Param | match, no-match | +| test.rs:128:23:128:28 | Param | test.rs:129:16:129:16 | a | | | test.rs:128:38:134:5 | BlockExpr | test.rs:128:5:134:5 | exit test_nested_if (normal) | | | test.rs:129:9:133:9 | IfExpr | test.rs:128:38:134:5 | BlockExpr | | | test.rs:129:13:129:48 | [boolean(false)] IfExpr | test.rs:132:13:132:13 | 0 | false | @@ -257,8 +281,10 @@ edges | test.rs:130:13:130:13 | 1 | test.rs:129:51:131:9 | BlockExpr | | | test.rs:131:16:133:9 | BlockExpr | test.rs:129:9:133:9 | IfExpr | | | test.rs:132:13:132:13 | 0 | test.rs:131:16:133:9 | BlockExpr | | -| test.rs:136:5:145:5 | enter test_nested_if_match | test.rs:137:19:137:19 | a | | +| test.rs:136:5:145:5 | enter test_nested_if_match | test.rs:136:29:136:29 | a | | | test.rs:136:5:145:5 | exit test_nested_if_match (normal) | test.rs:136:5:145:5 | exit test_nested_if_match | | +| test.rs:136:29:136:29 | a | test.rs:136:29:136:34 | Param | match, no-match | +| test.rs:136:29:136:34 | Param | test.rs:137:19:137:19 | a | | | test.rs:136:44:145:5 | BlockExpr | test.rs:136:5:145:5 | exit test_nested_if_match (normal) | | | test.rs:137:9:144:9 | IfExpr | test.rs:136:44:145:5 | BlockExpr | | | test.rs:137:13:140:9 | [boolean(false)] MatchExpr | test.rs:143:13:143:13 | 0 | false | @@ -273,8 +299,10 @@ edges | test.rs:141:13:141:13 | 1 | test.rs:140:12:142:9 | BlockExpr | | | test.rs:142:16:144:9 | BlockExpr | test.rs:137:9:144:9 | IfExpr | | | test.rs:143:13:143:13 | 0 | test.rs:142:16:144:9 | BlockExpr | | -| test.rs:147:5:156:5 | enter test_nested_if_block | test.rs:149:13:149:15 | ExprStmt | | +| test.rs:147:5:156:5 | enter test_nested_if_block | test.rs:147:29:147:29 | a | | | test.rs:147:5:156:5 | exit test_nested_if_block (normal) | test.rs:147:5:156:5 | exit test_nested_if_block | | +| test.rs:147:29:147:29 | a | test.rs:147:29:147:34 | Param | match, no-match | +| test.rs:147:29:147:34 | Param | test.rs:149:13:149:15 | ExprStmt | | | test.rs:147:44:156:5 | BlockExpr | test.rs:147:5:156:5 | exit test_nested_if_block (normal) | | | test.rs:148:9:155:9 | IfExpr | test.rs:147:44:156:5 | BlockExpr | | | test.rs:148:12:151:9 | [boolean(false)] BlockExpr | test.rs:154:13:154:13 | 0 | false | @@ -289,8 +317,10 @@ edges | test.rs:152:13:152:13 | 1 | test.rs:151:11:153:9 | BlockExpr | | | test.rs:153:16:155:9 | BlockExpr | test.rs:148:9:155:9 | IfExpr | | | test.rs:154:13:154:13 | 0 | test.rs:153:16:155:9 | BlockExpr | | -| test.rs:158:5:165:5 | enter test_if_assignment | test.rs:159:9:159:26 | LetStmt | | +| test.rs:158:5:165:5 | enter test_if_assignment | test.rs:158:27:158:27 | a | | | test.rs:158:5:165:5 | exit test_if_assignment (normal) | test.rs:158:5:165:5 | exit test_if_assignment | | +| test.rs:158:27:158:27 | a | test.rs:158:27:158:32 | Param | match, no-match | +| test.rs:158:27:158:32 | Param | test.rs:159:9:159:26 | LetStmt | | | test.rs:158:42:165:5 | BlockExpr | test.rs:158:5:165:5 | exit test_if_assignment (normal) | | | test.rs:159:9:159:26 | LetStmt | test.rs:159:21:159:25 | false | | | test.rs:159:13:159:17 | x | test.rs:160:12:160:12 | x | match, no-match | @@ -304,8 +334,10 @@ edges | test.rs:161:13:161:13 | 1 | test.rs:160:21:162:9 | BlockExpr | | | test.rs:162:16:164:9 | BlockExpr | test.rs:160:9:164:9 | IfExpr | | | test.rs:163:13:163:13 | 0 | test.rs:162:16:164:9 | BlockExpr | | -| test.rs:167:5:178:5 | enter test_if_loop1 | test.rs:169:13:171:14 | ExprStmt | | +| test.rs:167:5:178:5 | enter test_if_loop1 | test.rs:167:22:167:22 | a | | | test.rs:167:5:178:5 | exit test_if_loop1 (normal) | test.rs:167:5:178:5 | exit test_if_loop1 | | +| test.rs:167:22:167:22 | a | test.rs:167:22:167:27 | Param | match, no-match | +| test.rs:167:22:167:27 | Param | test.rs:169:13:171:14 | ExprStmt | | | test.rs:167:37:178:5 | BlockExpr | test.rs:167:5:178:5 | exit test_if_loop1 (normal) | | | test.rs:168:9:177:9 | IfExpr | test.rs:167:37:178:5 | BlockExpr | | | test.rs:168:13:173:9 | [boolean(false)] LoopExpr | test.rs:176:13:176:13 | 0 | false | @@ -332,8 +364,10 @@ edges | test.rs:174:13:174:13 | 1 | test.rs:173:12:175:9 | BlockExpr | | | test.rs:175:16:177:9 | BlockExpr | test.rs:168:9:177:9 | IfExpr | | | test.rs:176:13:176:13 | 0 | test.rs:175:16:177:9 | BlockExpr | | -| test.rs:180:5:191:5 | enter test_if_loop2 | test.rs:182:13:184:14 | ExprStmt | | +| test.rs:180:5:191:5 | enter test_if_loop2 | test.rs:180:22:180:22 | a | | | test.rs:180:5:191:5 | exit test_if_loop2 (normal) | test.rs:180:5:191:5 | exit test_if_loop2 | | +| test.rs:180:22:180:22 | a | test.rs:180:22:180:27 | Param | match, no-match | +| test.rs:180:22:180:27 | Param | test.rs:182:13:184:14 | ExprStmt | | | test.rs:180:37:191:5 | BlockExpr | test.rs:180:5:191:5 | exit test_if_loop2 (normal) | | | test.rs:181:9:190:9 | IfExpr | test.rs:180:37:191:5 | BlockExpr | | | test.rs:181:13:186:9 | [boolean(false)] LoopExpr | test.rs:189:13:189:13 | 0 | false | @@ -360,8 +394,10 @@ edges | test.rs:187:13:187:13 | 1 | test.rs:186:12:188:9 | BlockExpr | | | test.rs:188:16:190:9 | BlockExpr | test.rs:181:9:190:9 | IfExpr | | | test.rs:189:13:189:13 | 0 | test.rs:188:16:190:9 | BlockExpr | | -| test.rs:193:5:201:5 | enter test_labelled_block | test.rs:195:13:195:31 | ExprStmt | | +| test.rs:193:5:201:5 | enter test_labelled_block | test.rs:193:28:193:28 | a | | | test.rs:193:5:201:5 | exit test_labelled_block (normal) | test.rs:193:5:201:5 | exit test_labelled_block | | +| test.rs:193:28:193:28 | a | test.rs:193:28:193:33 | Param | match, no-match | +| test.rs:193:28:193:33 | Param | test.rs:195:13:195:31 | ExprStmt | | | test.rs:193:43:201:5 | BlockExpr | test.rs:193:5:201:5 | exit test_labelled_block (normal) | | | test.rs:194:9:200:9 | IfExpr | test.rs:193:43:201:5 | BlockExpr | | | test.rs:194:13:196:9 | [boolean(false)] BlockExpr | test.rs:199:13:199:13 | 0 | false | @@ -377,8 +413,14 @@ edges | test.rs:197:13:197:13 | 1 | test.rs:196:12:198:9 | BlockExpr | | | test.rs:198:16:200:9 | BlockExpr | test.rs:194:9:200:9 | IfExpr | | | test.rs:199:13:199:13 | 0 | test.rs:198:16:200:9 | BlockExpr | | -| test.rs:206:5:209:5 | enter test_and_operator | test.rs:207:9:207:28 | LetStmt | | +| test.rs:206:5:209:5 | enter test_and_operator | test.rs:206:26:206:26 | a | | | test.rs:206:5:209:5 | exit test_and_operator (normal) | test.rs:206:5:209:5 | exit test_and_operator | | +| test.rs:206:26:206:26 | a | test.rs:206:26:206:32 | Param | match, no-match | +| test.rs:206:26:206:32 | Param | test.rs:206:35:206:35 | b | | +| test.rs:206:35:206:35 | b | test.rs:206:35:206:41 | Param | match, no-match | +| test.rs:206:35:206:41 | Param | test.rs:206:44:206:44 | c | | +| test.rs:206:44:206:44 | c | test.rs:206:44:206:50 | Param | match, no-match | +| test.rs:206:44:206:50 | Param | test.rs:207:9:207:28 | LetStmt | | | test.rs:206:61:209:5 | BlockExpr | test.rs:206:5:209:5 | exit test_and_operator (normal) | | | test.rs:207:9:207:28 | LetStmt | test.rs:207:17:207:17 | a | | | test.rs:207:13:207:13 | d | test.rs:208:9:208:9 | d | match, no-match | @@ -391,8 +433,14 @@ edges | test.rs:207:22:207:22 | b | test.rs:207:17:207:22 | [boolean(true)] ... && ... | true | | test.rs:207:27:207:27 | c | test.rs:207:17:207:27 | ... && ... | | | test.rs:208:9:208:9 | d | test.rs:206:61:209:5 | BlockExpr | | -| test.rs:211:5:214:5 | enter test_or_operator | test.rs:212:9:212:28 | LetStmt | | +| test.rs:211:5:214:5 | enter test_or_operator | test.rs:211:25:211:25 | a | | | test.rs:211:5:214:5 | exit test_or_operator (normal) | test.rs:211:5:214:5 | exit test_or_operator | | +| test.rs:211:25:211:25 | a | test.rs:211:25:211:31 | Param | match, no-match | +| test.rs:211:25:211:31 | Param | test.rs:211:34:211:34 | b | | +| test.rs:211:34:211:34 | b | test.rs:211:34:211:40 | Param | match, no-match | +| test.rs:211:34:211:40 | Param | test.rs:211:43:211:43 | c | | +| test.rs:211:43:211:43 | c | test.rs:211:43:211:49 | Param | match, no-match | +| test.rs:211:43:211:49 | Param | test.rs:212:9:212:28 | LetStmt | | | test.rs:211:60:214:5 | BlockExpr | test.rs:211:5:214:5 | exit test_or_operator (normal) | | | test.rs:212:9:212:28 | LetStmt | test.rs:212:17:212:17 | a | | | test.rs:212:13:212:13 | d | test.rs:213:9:213:9 | d | match, no-match | @@ -405,8 +453,14 @@ edges | test.rs:212:22:212:22 | b | test.rs:212:17:212:22 | [boolean(true)] ... \|\| ... | true | | test.rs:212:27:212:27 | c | test.rs:212:17:212:27 | ... \|\| ... | | | test.rs:213:9:213:9 | d | test.rs:211:60:214:5 | BlockExpr | | -| test.rs:216:5:219:5 | enter test_or_operator_2 | test.rs:217:9:217:36 | LetStmt | | +| test.rs:216:5:219:5 | enter test_or_operator_2 | test.rs:216:27:216:27 | a | | | test.rs:216:5:219:5 | exit test_or_operator_2 (normal) | test.rs:216:5:219:5 | exit test_or_operator_2 | | +| test.rs:216:27:216:27 | a | test.rs:216:27:216:33 | Param | match, no-match | +| test.rs:216:27:216:33 | Param | test.rs:216:36:216:36 | b | | +| test.rs:216:36:216:36 | b | test.rs:216:36:216:41 | Param | match, no-match | +| test.rs:216:36:216:41 | Param | test.rs:216:44:216:44 | c | | +| test.rs:216:44:216:44 | c | test.rs:216:44:216:50 | Param | match, no-match | +| test.rs:216:44:216:50 | Param | test.rs:217:9:217:36 | LetStmt | | | test.rs:216:61:219:5 | BlockExpr | test.rs:216:5:219:5 | exit test_or_operator_2 (normal) | | | test.rs:217:9:217:36 | LetStmt | test.rs:217:17:217:17 | a | | | test.rs:217:13:217:13 | d | test.rs:218:9:218:9 | d | match, no-match | @@ -421,16 +475,24 @@ edges | test.rs:217:28:217:29 | 28 | test.rs:217:23:217:29 | ... == ... | | | test.rs:217:35:217:35 | c | test.rs:217:17:217:35 | ... \|\| ... | | | test.rs:218:9:218:9 | d | test.rs:216:61:219:5 | BlockExpr | | -| test.rs:221:5:224:5 | enter test_not_operator | test.rs:222:9:222:19 | LetStmt | | +| test.rs:221:5:224:5 | enter test_not_operator | test.rs:221:26:221:26 | a | | | test.rs:221:5:224:5 | exit test_not_operator (normal) | test.rs:221:5:224:5 | exit test_not_operator | | +| test.rs:221:26:221:26 | a | test.rs:221:26:221:32 | Param | match, no-match | +| test.rs:221:26:221:32 | Param | test.rs:222:9:222:19 | LetStmt | | | test.rs:221:43:224:5 | BlockExpr | test.rs:221:5:224:5 | exit test_not_operator (normal) | | | test.rs:222:9:222:19 | LetStmt | test.rs:222:18:222:18 | a | | | test.rs:222:13:222:13 | d | test.rs:223:9:223:9 | d | match, no-match | | test.rs:222:17:222:18 | ! ... | test.rs:222:13:222:13 | d | | | test.rs:222:18:222:18 | a | test.rs:222:17:222:18 | ! ... | | | test.rs:223:9:223:9 | d | test.rs:221:43:224:5 | BlockExpr | | -| test.rs:226:5:232:5 | enter test_if_and_operator | test.rs:227:12:227:12 | a | | +| test.rs:226:5:232:5 | enter test_if_and_operator | test.rs:226:29:226:29 | a | | | test.rs:226:5:232:5 | exit test_if_and_operator (normal) | test.rs:226:5:232:5 | exit test_if_and_operator | | +| test.rs:226:29:226:29 | a | test.rs:226:29:226:35 | Param | match, no-match | +| test.rs:226:29:226:35 | Param | test.rs:226:38:226:38 | b | | +| test.rs:226:38:226:38 | b | test.rs:226:38:226:43 | Param | match, no-match | +| test.rs:226:38:226:43 | Param | test.rs:226:46:226:46 | c | | +| test.rs:226:46:226:46 | c | test.rs:226:46:226:52 | Param | match, no-match | +| test.rs:226:46:226:52 | Param | test.rs:227:12:227:12 | a | | | test.rs:226:63:232:5 | BlockExpr | test.rs:226:5:232:5 | exit test_if_and_operator (normal) | | | test.rs:227:9:231:9 | IfExpr | test.rs:226:63:232:5 | BlockExpr | | | test.rs:227:12:227:12 | a | test.rs:227:12:227:17 | [boolean(false)] ... && ... | false | @@ -447,8 +509,14 @@ edges | test.rs:228:13:228:16 | true | test.rs:227:24:229:9 | BlockExpr | | | test.rs:229:16:231:9 | BlockExpr | test.rs:227:9:231:9 | IfExpr | | | test.rs:230:13:230:17 | false | test.rs:229:16:231:9 | BlockExpr | | -| test.rs:234:5:240:5 | enter test_if_or_operator | test.rs:235:12:235:12 | a | | +| test.rs:234:5:240:5 | enter test_if_or_operator | test.rs:234:28:234:28 | a | | | test.rs:234:5:240:5 | exit test_if_or_operator (normal) | test.rs:234:5:240:5 | exit test_if_or_operator | | +| test.rs:234:28:234:28 | a | test.rs:234:28:234:34 | Param | match, no-match | +| test.rs:234:28:234:34 | Param | test.rs:234:37:234:37 | b | | +| test.rs:234:37:234:37 | b | test.rs:234:37:234:42 | Param | match, no-match | +| test.rs:234:37:234:42 | Param | test.rs:234:45:234:45 | c | | +| test.rs:234:45:234:45 | c | test.rs:234:45:234:51 | Param | match, no-match | +| test.rs:234:45:234:51 | Param | test.rs:235:12:235:12 | a | | | test.rs:234:62:240:5 | BlockExpr | test.rs:234:5:240:5 | exit test_if_or_operator (normal) | | | test.rs:235:9:239:9 | IfExpr | test.rs:234:62:240:5 | BlockExpr | | | test.rs:235:12:235:12 | a | test.rs:235:12:235:17 | [boolean(true)] ... \|\| ... | true | @@ -465,8 +533,10 @@ edges | test.rs:236:13:236:16 | true | test.rs:235:24:237:9 | BlockExpr | | | test.rs:237:16:239:9 | BlockExpr | test.rs:235:9:239:9 | IfExpr | | | test.rs:238:13:238:17 | false | test.rs:237:16:239:9 | BlockExpr | | -| test.rs:242:5:248:5 | enter test_if_not_operator | test.rs:243:13:243:13 | a | | +| test.rs:242:5:248:5 | enter test_if_not_operator | test.rs:242:29:242:29 | a | | | test.rs:242:5:248:5 | exit test_if_not_operator (normal) | test.rs:242:5:248:5 | exit test_if_not_operator | | +| test.rs:242:29:242:29 | a | test.rs:242:29:242:35 | Param | match, no-match | +| test.rs:242:29:242:35 | Param | test.rs:243:13:243:13 | a | | | test.rs:242:46:248:5 | BlockExpr | test.rs:242:5:248:5 | exit test_if_not_operator (normal) | | | test.rs:243:9:247:9 | IfExpr | test.rs:242:46:248:5 | BlockExpr | | | test.rs:243:12:243:13 | [boolean(false)] ! ... | test.rs:246:13:246:17 | false | false | @@ -477,8 +547,10 @@ edges | test.rs:244:13:244:16 | true | test.rs:243:15:245:9 | BlockExpr | | | test.rs:245:16:247:9 | BlockExpr | test.rs:243:9:247:9 | IfExpr | | | test.rs:246:13:246:17 | false | test.rs:245:16:247:9 | BlockExpr | | -| test.rs:251:1:257:1 | enter test_match | test.rs:252:11:252:21 | maybe_digit | | +| test.rs:251:1:257:1 | enter test_match | test.rs:251:15:251:25 | maybe_digit | | | test.rs:251:1:257:1 | exit test_match (normal) | test.rs:251:1:257:1 | exit test_match | | +| test.rs:251:15:251:25 | maybe_digit | test.rs:251:15:251:38 | Param | match, no-match | +| test.rs:251:15:251:38 | Param | test.rs:252:11:252:21 | maybe_digit | | | test.rs:251:48:257:1 | BlockExpr | test.rs:251:1:257:1 | exit test_match (normal) | | | test.rs:252:5:256:5 | MatchExpr | test.rs:251:48:257:1 | BlockExpr | | | test.rs:252:11:252:21 | maybe_digit | test.rs:253:9:253:23 | TupleStructPat | | @@ -500,8 +572,10 @@ edges | test.rs:261:9:263:9 | ExprStmt | test.rs:262:13:262:13 | 1 | | | test.rs:261:14:263:9 | BlockExpr | test.rs:262:13:262:13 | 1 | | | test.rs:262:13:262:13 | 1 | test.rs:261:14:263:9 | BlockExpr | | -| test.rs:267:5:270:5 | enter test_let_match | test.rs:268:9:268:49 | LetStmt | | +| test.rs:267:5:270:5 | enter test_let_match | test.rs:267:23:267:23 | a | | | test.rs:267:5:270:5 | exit test_let_match (normal) | test.rs:267:5:270:5 | exit test_let_match | | +| test.rs:267:23:267:23 | a | test.rs:267:23:267:36 | Param | match, no-match | +| test.rs:267:23:267:36 | Param | test.rs:268:9:268:49 | LetStmt | | | test.rs:267:39:270:5 | BlockExpr | test.rs:267:5:270:5 | exit test_let_match (normal) | | | test.rs:268:9:268:49 | LetStmt | test.rs:268:23:268:23 | a | | | test.rs:268:13:268:19 | TupleStructPat | test.rs:268:32:268:46 | "Expected some" | no-match | @@ -571,9 +645,11 @@ edges | test.rs:306:5:306:18 | LetStmt | test.rs:306:17:306:17 | 0 | | | test.rs:306:9:306:13 | x | test.rs:307:5:309:5 | nested | match, no-match | | test.rs:306:17:306:17 | 0 | test.rs:306:9:306:13 | x | | -| test.rs:307:5:309:5 | enter nested | test.rs:308:9:308:16 | ExprStmt | | +| test.rs:307:5:309:5 | enter nested | test.rs:307:15:307:15 | x | | | test.rs:307:5:309:5 | exit nested (normal) | test.rs:307:5:309:5 | exit nested | | | test.rs:307:5:309:5 | nested | test.rs:310:5:310:19 | ExprStmt | | +| test.rs:307:15:307:15 | x | test.rs:307:15:307:26 | Param | match, no-match | +| test.rs:307:15:307:26 | Param | test.rs:308:9:308:16 | ExprStmt | | | test.rs:307:29:309:5 | BlockExpr | test.rs:307:5:309:5 | exit nested (normal) | | | test.rs:308:9:308:10 | * ... | test.rs:308:15:308:15 | 1 | | | test.rs:308:9:308:15 | ... += ... | test.rs:307:29:309:5 | BlockExpr | | diff --git a/rust/ql/test/library-tests/variables/Cfg.expected b/rust/ql/test/library-tests/variables/Cfg.expected index 89e7aaec297e..b8b61495f754 100644 --- a/rust/ql/test/library-tests/variables/Cfg.expected +++ b/rust/ql/test/library-tests/variables/Cfg.expected @@ -1,11 +1,15 @@ edges -| variables.rs:3:1:5:1 | enter print_str | variables.rs:4:5:4:22 | ExprStmt | | +| variables.rs:3:1:5:1 | enter print_str | variables.rs:3:14:3:14 | s | | | variables.rs:3:1:5:1 | exit print_str (normal) | variables.rs:3:1:5:1 | exit print_str | | +| variables.rs:3:14:3:14 | s | variables.rs:3:14:3:20 | Param | match, no-match | +| variables.rs:3:14:3:20 | Param | variables.rs:4:5:4:22 | ExprStmt | | | variables.rs:3:23:5:1 | BlockExpr | variables.rs:3:1:5:1 | exit print_str (normal) | | | variables.rs:4:5:4:21 | MacroExpr | variables.rs:3:23:5:1 | BlockExpr | | | variables.rs:4:5:4:22 | ExprStmt | variables.rs:4:5:4:21 | MacroExpr | | -| variables.rs:7:1:9:1 | enter print_i64 | variables.rs:8:5:8:22 | ExprStmt | | +| variables.rs:7:1:9:1 | enter print_i64 | variables.rs:7:14:7:14 | i | | | variables.rs:7:1:9:1 | exit print_i64 (normal) | variables.rs:7:1:9:1 | exit print_i64 | | +| variables.rs:7:14:7:14 | i | variables.rs:7:14:7:19 | Param | match, no-match | +| variables.rs:7:14:7:19 | Param | variables.rs:8:5:8:22 | ExprStmt | | | variables.rs:7:22:9:1 | BlockExpr | variables.rs:7:1:9:1 | exit print_i64 (normal) | | | variables.rs:8:5:8:21 | MacroExpr | variables.rs:7:22:9:1 | BlockExpr | | | variables.rs:8:5:8:22 | ExprStmt | variables.rs:8:5:8:21 | MacroExpr | | @@ -393,8 +397,12 @@ edges | variables.rs:245:16:245:24 | PathExpr | variables.rs:245:26:245:28 | a13 | | | variables.rs:245:16:245:29 | CallExpr | variables.rs:243:5:246:5 | MatchExpr | | | variables.rs:245:26:245:28 | a13 | variables.rs:245:16:245:29 | CallExpr | | -| variables.rs:249:1:258:1 | enter param_pattern1 | variables.rs:255:5:255:18 | ExprStmt | | +| variables.rs:249:1:258:1 | enter param_pattern1 | variables.rs:250:5:250:6 | a8 | | | variables.rs:249:1:258:1 | exit param_pattern1 (normal) | variables.rs:249:1:258:1 | exit param_pattern1 | | +| variables.rs:250:5:250:6 | a8 | variables.rs:250:5:250:12 | Param | match, no-match | +| variables.rs:250:5:250:12 | Param | variables.rs:251:5:254:5 | TuplePat | | +| variables.rs:251:5:254:5 | TuplePat | variables.rs:251:5:254:19 | Param | match, no-match | +| variables.rs:251:5:254:19 | Param | variables.rs:255:5:255:18 | ExprStmt | | | variables.rs:254:28:258:1 | BlockExpr | variables.rs:249:1:258:1 | exit param_pattern1 (normal) | | | variables.rs:255:5:255:13 | PathExpr | variables.rs:255:15:255:16 | a8 | | | variables.rs:255:5:255:17 | CallExpr | variables.rs:256:5:256:18 | ExprStmt | | @@ -408,8 +416,10 @@ edges | variables.rs:257:5:257:17 | CallExpr | variables.rs:254:28:258:1 | BlockExpr | | | variables.rs:257:5:257:18 | ExprStmt | variables.rs:257:5:257:13 | PathExpr | | | variables.rs:257:15:257:16 | c1 | variables.rs:257:5:257:17 | CallExpr | | -| variables.rs:260:1:264:1 | enter param_pattern2 | variables.rs:263:5:263:18 | ExprStmt | | +| variables.rs:260:1:264:1 | enter param_pattern2 | variables.rs:261:5:261:42 | ParenPat | | | variables.rs:260:1:264:1 | exit param_pattern2 (normal) | variables.rs:260:1:264:1 | exit param_pattern2 | | +| variables.rs:261:5:261:42 | ParenPat | variables.rs:261:5:261:50 | Param | match, no-match | +| variables.rs:261:5:261:50 | Param | variables.rs:263:5:263:18 | ExprStmt | | | variables.rs:262:9:264:1 | BlockExpr | variables.rs:260:1:264:1 | exit param_pattern2 (normal) | | | variables.rs:263:5:263:13 | PathExpr | variables.rs:263:15:263:16 | a9 | | | variables.rs:263:5:263:17 | CallExpr | variables.rs:262:9:264:1 | BlockExpr | | @@ -487,8 +497,10 @@ edges | variables.rs:304:5:306:10 | LetStmt | variables.rs:305:9:306:9 | ClosureExpr | | | variables.rs:304:9:304:23 | example_closure | variables.rs:307:5:308:27 | LetStmt | match, no-match | | variables.rs:305:9:306:9 | ClosureExpr | variables.rs:304:9:304:23 | example_closure | | -| variables.rs:305:9:306:9 | enter ClosureExpr | variables.rs:306:9:306:9 | x | | +| variables.rs:305:9:306:9 | enter ClosureExpr | variables.rs:305:10:305:10 | x | | | variables.rs:305:9:306:9 | exit ClosureExpr (normal) | variables.rs:305:9:306:9 | exit ClosureExpr | | +| variables.rs:305:10:305:10 | x | variables.rs:305:10:305:15 | Param | match, no-match | +| variables.rs:305:10:305:15 | Param | variables.rs:306:9:306:9 | x | | | variables.rs:306:9:306:9 | x | variables.rs:305:9:306:9 | exit ClosureExpr (normal) | | | variables.rs:307:5:308:27 | LetStmt | variables.rs:308:9:308:23 | example_closure | | | variables.rs:307:9:307:10 | n1 | variables.rs:309:5:309:18 | ExprStmt | match, no-match | @@ -505,8 +517,10 @@ edges | variables.rs:312:5:314:10 | LetStmt | variables.rs:313:9:314:9 | ClosureExpr | | | variables.rs:312:9:312:26 | immutable_variable | variables.rs:315:5:316:30 | LetStmt | match, no-match | | variables.rs:313:9:314:9 | ClosureExpr | variables.rs:312:9:312:26 | immutable_variable | | -| variables.rs:313:9:314:9 | enter ClosureExpr | variables.rs:314:9:314:9 | x | | +| variables.rs:313:9:314:9 | enter ClosureExpr | variables.rs:313:10:313:10 | x | | | variables.rs:313:9:314:9 | exit ClosureExpr (normal) | variables.rs:313:9:314:9 | exit ClosureExpr | | +| variables.rs:313:10:313:10 | x | variables.rs:313:10:313:15 | Param | match, no-match | +| variables.rs:313:10:313:15 | Param | variables.rs:314:9:314:9 | x | | | variables.rs:314:9:314:9 | x | variables.rs:313:9:314:9 | exit ClosureExpr (normal) | | | variables.rs:315:5:316:30 | LetStmt | variables.rs:316:9:316:26 | immutable_variable | | | variables.rs:315:9:315:10 | n2 | variables.rs:317:5:317:18 | ExprStmt | match, no-match | @@ -575,8 +589,10 @@ edges | variables.rs:342:5:342:16 | CallExpr | variables.rs:337:13:343:1 | BlockExpr | | | variables.rs:342:5:342:17 | ExprStmt | variables.rs:342:5:342:13 | PathExpr | | | variables.rs:342:15:342:15 | i | variables.rs:342:5:342:16 | CallExpr | | -| variables.rs:345:1:349:1 | enter mutate_param | variables.rs:346:5:348:11 | ExprStmt | | +| variables.rs:345:1:349:1 | enter mutate_param | variables.rs:345:17:345:17 | x | | | variables.rs:345:1:349:1 | exit mutate_param (normal) | variables.rs:345:1:349:1 | exit mutate_param | | +| variables.rs:345:17:345:17 | x | variables.rs:345:17:345:28 | Param | match, no-match | +| variables.rs:345:17:345:28 | Param | variables.rs:346:5:348:11 | ExprStmt | | | variables.rs:345:31:349:1 | BlockExpr | variables.rs:345:1:349:1 | exit mutate_param (normal) | | | variables.rs:346:5:346:6 | * ... | variables.rs:347:10:347:10 | x | | | variables.rs:346:5:348:10 | ... = ... | variables.rs:345:31:349:1 | BlockExpr | | From 2f14ec9f2a2086cebae9ed91698db1c8bdd9e917 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 8 Oct 2024 11:00:07 +0200 Subject: [PATCH 066/217] Rust: Include patterns in the CFG --- rust/ql/.generated.list | 1 - rust/ql/.gitattributes | 1 - .../rust/controlflow/internal/Completion.qll | 52 +++- .../internal/ControlFlowGraphImpl.qll | 236 ++++++++++++---- .../rust/controlflow/internal/Splitting.qll | 5 + .../rust/elements/internal/MatchExprImpl.qll | 6 + .../rust/elements/internal/OrPatImpl.qll | 8 +- .../library-tests/controlflow/Cfg.expected | 123 +++++---- .../test/library-tests/variables/Cfg.expected | 255 +++++++++++++----- 9 files changed, 504 insertions(+), 183 deletions(-) diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 9e49fc3893e4..5be950fab56c 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -304,7 +304,6 @@ lib/codeql/rust/elements/internal/NeverTypeImpl.qll 8c7464cb76f9d081dab318d74381 lib/codeql/rust/elements/internal/OffsetOfExprConstructor.qll 616e146562adb3ac0fba4d6f55dd6ce60518ed377c0856f1f09ba49593e7bfab 80518ce90fc6d08011d6f5fc2a543958067739e1b0a6a5f2ed90fc9b1db078f0 lib/codeql/rust/elements/internal/OffsetOfExprImpl.qll e52d4596068cc54719438121f7d5afcaab04e0c70168ac5e4df1a3a0969817a6 6ab37e659d79e02fb2685d6802ae124157bf14b6f790b31688f437c87f40f52c lib/codeql/rust/elements/internal/OrPatConstructor.qll 4ef583e07298487c0c4c6d7c76ffcc04b1e5fe58aba0c1da3e2c8446a9e0c92b 980a6bd176ae5e5b11c134569910c5468ba91f480982d846e222d031a6a05f1a -lib/codeql/rust/elements/internal/OrPatImpl.qll 0dbc461115f62306e679f69c4354550bc3425d4291aec0124ad8f7a55c779d51 d32ebaa5a3002e87b35949cb624b20377155869ad33aec873326f60f2f0b666d lib/codeql/rust/elements/internal/ParamConstructor.qll b98a2d8969f289fdcc8c0fb11cbd19a3b0c71be038c4a74f5988295a2bae52f0 77d81b31064167945b79b19d9697b57ca24462c3a7cc19e462c4693ce87db532 lib/codeql/rust/elements/internal/ParamImpl.qll 8a5101559f5d636b60ab80237057944b537823ce054d760c3dbd58b2acf05a46 e7a08cefeb6a290a975899045b7b19a9624f5a2b0946cba0866b1854cc0c0fb0 lib/codeql/rust/elements/internal/ParamListConstructor.qll 3123142ab3cab46fb53d7f3eff6ba2d3ff7a45b78839a53dc1979a9c6a54920e 165f3d777ea257cfcf142cc4ba9a0ebcd1902eb99842b8a6657c87087f3df6fe diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index e69d7ea5791b..6d8e3c081e89 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -306,7 +306,6 @@ /lib/codeql/rust/elements/internal/OffsetOfExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/OffsetOfExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/OrPatConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/OrPatImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ParamConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ParamImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ParamListConstructor.qll linguist-generated diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll b/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll index c0aac56b8f1d..fc67c32045b7 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll @@ -62,7 +62,7 @@ abstract class ConditionalCompletion extends NormalCompletion { abstract ConditionalCompletion getDual(); } -/** Holds if node `le` has the Boolean constant value `value`. */ +/** Holds if node `le` has the constant Boolean value `value`. */ private predicate isBooleanConstant(LiteralExpr le, Boolean value) { le.getTextValue() = value.toString() } @@ -117,13 +117,61 @@ class BooleanCompletion extends ConditionalCompletion, TBooleanCompletion { override string toString() { result = "boolean(" + value + ")" } } +/** Holds if node `pat` has the constant match value `value`. */ +pragma[nomagic] +private predicate isMatchConstant(Pat pat, boolean value) { + value = true and + ( + pat instanceof WildcardPat + or + pat = any(IdentPat ip | not ip.hasPat() and ip = any(Variable v).getPat()) + or + pat instanceof RestPat + or + // `let` statements without an `else` branch must be exhaustive + pat = any(LetStmt let | not let.hasLetElse()).getPat() + or + // `match` expressions must be exhaustive, so last arm cannot fail + pat = any(MatchExpr me).getLastArm().getPat() + or + // parameter patterns must be exhaustive + pat = any(Param p).getPat() + ) and + not pat = any(ForExpr for).getPat() // workaround until `for` loops are desugared + or + exists(Pat parent | isMatchConstant(parent, value) | + pat = parent.(BoxPat).getPat() + or + pat = parent.(IdentPat).getPat() + or + pat = parent.(ParenPat).getPat() + or + pat = parent.(RecordPat).getRecordPatFieldList().getField(_).getPat() + or + pat = parent.(RefPat).getPat() + or + pat = parent.(TuplePat).getAField() + or + pat = parent.(TupleStructPat).getAField() + or + pat = parent.(OrPat).getLastPat() + ) +} + /** * A completion that represents the result of a pattern match. */ class MatchCompletion extends TMatchCompletion, ConditionalCompletion { MatchCompletion() { this = TMatchCompletion(value) } - override predicate isValidForSpecific(AstNode e) { e instanceof Pat } + override predicate isValidForSpecific(AstNode e) { + e instanceof Pat and + ( + isMatchConstant(e, value) + or + not isMatchConstant(e, _) + ) + } override MatchSuccessor getAMatchingSuccessorType() { result.getValue() = value } diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index 84ddc28de9e6..471afaa920ea 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -65,9 +65,6 @@ private module CfgImpl = import CfgImpl -/** Holds if `p` is a trivial pattern that is always guaranteed to match. */ -predicate trivialPat(Pat p) { p instanceof WildcardPat or p instanceof IdentPat } - class ArrayExprTree extends StandardPostOrderTree, ArrayExpr { override AstNode getChildNode(int i) { result = this.getExpr(i) } } @@ -141,11 +138,10 @@ class LogicalAndTree extends PostOrderTree, LogicalAndExpr { class BlockExprTree extends StandardPostOrderTree, BlockExpr { override AstNode getChildNode(int i) { - result = super.getStmtList().getStatement(i) + result = this.getStmtList().getStatement(i) or - not exists(super.getStmtList().getStatement(i)) and - (exists(super.getStmtList().getStatement(i - 1)) or i = 0) and - result = super.getStmtList().getTailExpr() + i = this.getStmtList().getNumberOfStatements() and + result = this.getStmtList().getTailExpr() } override predicate propagatesAbnormal(AstNode child) { child = this.getChildNode(_) } @@ -304,44 +300,33 @@ class LetExprTree extends StandardPreOrderTree instanceof LetExpr { override AstNode getChildNode(int i) { i = 0 and result = super.getPat() } } -// We handle `let` statements with trivial patterns separately as they don't -// lead to non-standard control flow. For instance, in `let a = ...` it is not -// interesing to create match edges as it would carry no information. -class LetStmtTreeTrivialPat extends StandardPreOrderTree instanceof LetStmt { - LetStmtTreeTrivialPat() { trivialPat(super.getPat()) } - - override AstNode getChildNode(int i) { - i = 0 and result = super.getInitializer() - or - i = 1 and result = super.getPat() - } -} - -// `let` statements with interesting patterns that we want to be reflected in -// the CFG. -class LetStmtTree extends PreOrderTree instanceof LetStmt { - LetStmtTree() { not trivialPat(super.getPat()) } - +class LetStmtTree extends PreOrderTree, LetStmt { final override predicate propagatesAbnormal(AstNode child) { - child = [super.getInitializer(), super.getLetElse().getBlockExpr()] + child = [this.getInitializer(), this.getLetElse().getBlockExpr()] } override predicate succ(AstNode pred, AstNode succ, Completion c) { // Edge to start of initializer. - pred = this and first(super.getInitializer(), succ) and completionIsSimple(c) + pred = this and first(this.getInitializer(), succ) and completionIsSimple(c) + or + // Edge to pattern when there is no initializer. + pred = this and + first(this.getPat(), succ) and + completionIsSimple(c) and + not this.hasInitializer() or // Edge from end of initializer to pattern. - last(super.getInitializer(), pred, c) and first(super.getPat(), succ) + last(this.getInitializer(), pred, c) and first(this.getPat(), succ) or // Edge from failed pattern to `else` branch. - last(super.getPat(), pred, c) and - first(super.getLetElse().getBlockExpr(), succ) and + last(this.getPat(), pred, c) and + first(this.getLetElse().getBlockExpr(), succ) and c.(MatchCompletion).failed() } override predicate last(AstNode node, Completion c) { // Edge out of a successfully matched pattern. - last(super.getPat(), node, c) and c.(MatchCompletion).succeeded() + last(this.getPat(), node, c) and c.(MatchCompletion).succeeded() // NOTE: No edge out of the `else` branch as that is guaranteed to diverge. } } @@ -440,33 +425,33 @@ class ForExprTree extends LoopingExprTree instanceof ForExpr { // TODO: replace with expanded macro once the extractor supports it class MacroExprTree extends LeafTree, MacroExpr { } -class MatchArmTree extends ControlFlowTree instanceof MatchArm { - override predicate propagatesAbnormal(AstNode child) { child = super.getExpr() } +class MatchArmTree extends ControlFlowTree, MatchArm { + override predicate propagatesAbnormal(AstNode child) { child = this.getExpr() } - override predicate first(AstNode node) { node = super.getPat() } + override predicate first(AstNode node) { first(this.getPat(), node) } override predicate succ(AstNode pred, AstNode succ, Completion c) { // Edge from pattern to guard/arm if match succeeds. - pred = super.getPat() and + last(this.getPat(), pred, c) and c.(MatchCompletion).succeeded() and ( - first(super.getGuard().getCondition(), succ) + first(this.getGuard().getCondition(), succ) or - not super.hasGuard() and first(super.getExpr(), succ) + not this.hasGuard() and first(this.getExpr(), succ) ) or // Edge from guard to arm if the guard succeeds. - last(super.getGuard().getCondition(), pred, c) and - first(super.getExpr(), succ) and + last(this.getGuard().getCondition(), pred, c) and + first(this.getExpr(), succ) and c.(BooleanCompletion).succeeded() } override predicate last(AstNode node, Completion c) { - node = super.getPat() and c.(MatchCompletion).failed() + last(this.getPat(), node, c) and c.(MatchCompletion).failed() or - last(super.getGuard().getCondition(), node, c) and c.(BooleanCompletion).failed() + last(this.getGuard().getCondition(), node, c) and c.(BooleanCompletion).failed() or - last(super.getExpr(), node, c) + last(this.getExpr(), node, c) } } @@ -479,7 +464,8 @@ class MatchExprTree extends PostOrderTree instanceof MatchExpr { override predicate succ(AstNode pred, AstNode succ, Completion c) { // Edge from the scrutinee to the first arm. - last(super.getExpr(), pred, c) and succ = super.getArm(0).getPat() + last(super.getExpr(), pred, c) and + first(super.getArm(0).getPat(), succ) or // Edge from a failed match/guard in one arm to the beginning of the next arm. exists(int i | @@ -520,9 +506,6 @@ class ParenExprTree extends ControlFlowTree, ParenExpr { override predicate succ(AstNode pred, AstNode succ, Completion c) { none() } } -// This covers all patterns as they all extend `Pat` -class PatExprTree extends LeafTree instanceof Pat { } - class PathExprTree extends LeafTree instanceof PathExpr { } class PrefixExprTree extends StandardPostOrderTree instanceof PrefixExpr { @@ -578,3 +561,164 @@ class YieldExprTree extends StandardPostOrderTree instanceof YieldExpr { class YeetExprTree extends StandardPostOrderTree instanceof YeetExpr { override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } } + +/** + * Provides `ControlFlowTree`s for patterns. + * + * Since patterns destruct values, they are modeled in pre-order, except for + * `OrPat`s and `IdentPat`s. + */ +module PatternTrees { + abstract class PreOrderPatTree extends PreOrderTree { + abstract Pat getPat(int i); + + private Pat getPatRanked(int i) { + result = rank[i + 1](Pat pat, int j | pat = this.getPat(j) | pat order by j) + } + + override predicate propagatesAbnormal(AstNode child) { child = this.getPatRanked(_) } + + override predicate succ(AstNode pred, AstNode succ, Completion c) { + pred = this and + completionIsValidFor(c, this) and + c.(MatchCompletion).succeeded() and + first(this.getPatRanked(0), succ) + or + exists(int i | last(this.getPatRanked(i), pred, c) | + // Edge from successful pattern to the next + c.(MatchCompletion).succeeded() and + first(this.getPatRanked(i + 1), succ) + ) + } + + override predicate last(AstNode node, Completion c) { + node = this and + completionIsValidFor(c, this) and + c.(MatchCompletion).failed() + or + exists(int i | last(this.getPatRanked(i), node, c) | + c.(MatchCompletion).failed() + or + not exists(this.getPatRanked(i + 1)) and + completionIsNormal(c) + ) + } + } + + abstract class PostOrderPatTree extends PostOrderTree { + abstract Pat getPat(int i); + + private Pat getPatRanked(int i) { + result = rank[i + 1](Pat pat, int j | pat = this.getPat(j) | pat order by j) + } + + override predicate propagatesAbnormal(AstNode child) { child = this.getPatRanked(_) } + + override predicate first(AstNode node) { + first(this.getPat(0), node) + or + not exists(this.getPat(_)) and + node = this + } + + override predicate succ(AstNode pred, AstNode succ, Completion c) { + exists(int i | last(this.getPat(i), pred, c) | + // Edge from unsuccessful pattern to the next + c.(MatchCompletion).failed() and + first(this.getPat(i + 1), succ) + or + // Edge from successful pattern to this + c.(MatchCompletion).succeeded() and + succ = this + or + // Edge from last pattern to this + not exists(this.getPat(i + 1)) and + succ = this and + completionIsNormal(c) + ) + } + } + + class IdentPatTree extends PostOrderPatTree, IdentPat { + override Pat getPat(int i) { i = 0 and result = this.getPat() } + + override predicate last(AstNode node, Completion c) { + super.last(node, c) + or + last(this.getPat(), node, c) and + c.(MatchCompletion).failed() + } + + override predicate succ(AstNode pred, AstNode succ, Completion c) { + super.succ(pred, succ, c) and + not (succ = this and c.(MatchCompletion).failed()) + } + } + + class BoxPatTree extends PreOrderPatTree, BoxPat { + override Pat getPat(int i) { i = 0 and result = this.getPat() } + } + + class RestPatTree extends LeafTree, RestPat { } + + class LiteralPatTree extends LeafTree, LiteralPat { } + + class MacroPatTree extends LeafTree, MacroPat { } // todo + + class OrPatTree extends PostOrderPatTree instanceof OrPat { + override Pat getPat(int i) { result = OrPat.super.getPat(i) } + } + + class ParenPatTree extends ControlFlowTree, ParenPat { + private ControlFlowTree pat; + + ParenPatTree() { pat = this.getPat() } + + override predicate propagatesAbnormal(AstNode child) { pat.propagatesAbnormal(child) } + + override predicate first(AstNode first) { pat.first(first) } + + override predicate last(AstNode last, Completion c) { pat.last(last, c) } + + override predicate succ(AstNode pred, AstNode succ, Completion c) { none() } + } + + class PathPatTree extends LeafTree, PathPat { } + + class WildcardPatTree extends LeafTree, WildcardPat { } + + class RangePatTree extends PreOrderPatTree, RangePat { + override Pat getPat(int i) { + i = 0 and result = this.getStart() + or + i = 1 and result = this.getEnd() + } + } + + class RecordPatTree extends PreOrderPatTree, RecordPat { + override Pat getPat(int i) { + result = this.getRecordPatFieldList().getField(i).getPat() + or + i = this.getRecordPatFieldList().getNumberOfFields() and + result = this.getRecordPatFieldList().getRestPat() + } + } + + class RefPatTree extends PreOrderPatTree, RefPat { + override Pat getPat(int i) { i = 0 and result = super.getPat() } + } + + class SlicePatTree extends PreOrderPatTree instanceof SlicePat { + override Pat getPat(int i) { result = SlicePat.super.getPat(i) } + } + + class TuplePatTree extends PreOrderPatTree, TuplePat { + override Pat getPat(int i) { result = this.getField(i) } + } + + class TupleStructPatTree extends PreOrderPatTree, TupleStructPat { + override Pat getPat(int i) { result = this.getField(i) } + } + + class ConstBlockPatTree extends LeafTree, ConstBlockPat { } // todo? +} diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/Splitting.qll b/rust/ql/lib/codeql/rust/controlflow/internal/Splitting.qll index ae00e3e0d7a5..3c59d6659c21 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/Splitting.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/Splitting.qll @@ -78,6 +78,11 @@ module ConditionalCompletionSplitting { child = parent.(MatchExpr).getAnArm().getExpr() or child = parent.(BlockExpr).getStmtList().getTailExpr() + or + child = parent.(PatternTrees::PreOrderPatTree).getPat(_) and + childCompletion.(MatchCompletion).failed() + or + child = parent.(PatternTrees::PostOrderPatTree).getPat(_) ) } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/MatchExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MatchExprImpl.qll index ebb0b8510678..f707a27afd49 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MatchExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MatchExprImpl.qll @@ -42,5 +42,11 @@ module Impl { * Gets the number of arms of this match expression. */ int getNumberOfArms() { result = this.getMatchArmList().getNumberOfArms() } + + /** + * Gets the last arm of this match expression. Due to exhaustiveness checking, + * this arm is guaranteed to succeed. + */ + MatchArm getLastArm() { result = this.getArm(this.getNumberOfArms() - 1) } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/OrPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/OrPatImpl.qll index c00be2a77938..f29e3d1865fc 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/OrPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/OrPatImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `OrPat`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.OrPat * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * An or pattern. For example: * ```rust @@ -20,5 +20,9 @@ module Impl { * } * ``` */ - class OrPat extends Generated::OrPat { } + class OrPat extends Generated::OrPat { + /** Gets the last pattern in this or pattern. */ + pragma[nomagic] + Pat getLastPat() { result = this.getPat(this.getNumberOfPats() - 1) } + } } diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 853a99e2c986..73f3e9d84123 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -14,10 +14,10 @@ edges | test.rs:3:21:3:22 | 42 | test.rs:3:5:3:23 | CallExpr | | | test.rs:8:5:24:5 | enter test_break_and_continue | test.rs:8:32:8:32 | n | | | test.rs:8:5:24:5 | exit test_break_and_continue (normal) | test.rs:8:5:24:5 | exit test_break_and_continue | | -| test.rs:8:32:8:32 | n | test.rs:8:32:8:37 | Param | match, no-match | +| test.rs:8:32:8:32 | n | test.rs:8:32:8:37 | Param | match | | test.rs:8:32:8:37 | Param | test.rs:9:9:9:22 | LetStmt | | | test.rs:9:9:9:22 | LetStmt | test.rs:9:21:9:21 | n | | -| test.rs:9:13:9:17 | i | test.rs:10:9:22:9 | ExprStmt | match, no-match | +| test.rs:9:13:9:17 | i | test.rs:10:9:22:9 | ExprStmt | match | | test.rs:9:21:9:21 | n | test.rs:9:13:9:17 | i | | | test.rs:10:9:22:9 | ExprStmt | test.rs:11:13:11:24 | ExprStmt | | | test.rs:10:9:22:9 | LoopExpr | test.rs:23:9:23:20 | ExprStmt | | @@ -65,7 +65,7 @@ edges | test.rs:23:16:23:19 | true | test.rs:23:9:23:19 | ReturnExpr | | | test.rs:26:5:38:5 | enter test_break_with_labels | test.rs:26:31:26:31 | b | | | test.rs:26:5:38:5 | exit test_break_with_labels (normal) | test.rs:26:5:38:5 | exit test_break_with_labels | | -| test.rs:26:31:26:31 | b | test.rs:26:31:26:37 | Param | match, no-match | +| test.rs:26:31:26:31 | b | test.rs:26:31:26:37 | Param | match | | test.rs:26:31:26:37 | Param | test.rs:27:9:36:9 | ExprStmt | | | test.rs:26:48:38:5 | BlockExpr | test.rs:26:5:38:5 | exit test_break_with_labels (normal) | | | test.rs:27:9:36:9 | ExprStmt | test.rs:29:17:33:17 | ExprStmt | | @@ -87,7 +87,7 @@ edges | test.rs:34:17:34:29 | ExprStmt | test.rs:34:17:34:28 | BreakExpr | | | test.rs:37:9:37:12 | true | test.rs:26:48:38:5 | BlockExpr | | | test.rs:40:5:52:5 | enter test_continue_with_labels | test.rs:40:34:40:34 | b | | -| test.rs:40:34:40:34 | b | test.rs:40:34:40:40 | Param | match, no-match | +| test.rs:40:34:40:34 | b | test.rs:40:34:40:40 | Param | match | | test.rs:40:34:40:40 | Param | test.rs:42:13:42:14 | ExprStmt | | | test.rs:42:13:42:13 | 1 | test.rs:44:17:48:17 | ExprStmt | | | test.rs:42:13:42:14 | ExprStmt | test.rs:42:13:42:13 | 1 | | @@ -105,7 +105,7 @@ edges | test.rs:49:17:49:31 | ContinueExpr | test.rs:44:17:48:17 | ExprStmt | continue | | test.rs:49:17:49:32 | ExprStmt | test.rs:49:17:49:31 | ContinueExpr | | | test.rs:54:5:66:5 | enter test_loop_label_shadowing | test.rs:54:34:54:34 | b | | -| test.rs:54:34:54:34 | b | test.rs:54:34:54:40 | Param | match, no-match | +| test.rs:54:34:54:34 | b | test.rs:54:34:54:40 | Param | match | | test.rs:54:34:54:40 | Param | test.rs:56:13:56:14 | ExprStmt | | | test.rs:56:13:56:13 | 1 | test.rs:58:17:62:17 | ExprStmt | | | test.rs:56:13:56:14 | ExprStmt | test.rs:56:13:56:13 | 1 | | @@ -124,11 +124,11 @@ edges | test.rs:63:17:63:31 | ExprStmt | test.rs:63:17:63:30 | ContinueExpr | | | test.rs:68:5:77:5 | enter test_while | test.rs:68:19:68:19 | i | | | test.rs:68:5:77:5 | exit test_while (normal) | test.rs:68:5:77:5 | exit test_while | | -| test.rs:68:19:68:19 | i | test.rs:68:19:68:24 | Param | match, no-match | +| test.rs:68:19:68:19 | i | test.rs:68:19:68:24 | Param | match | | test.rs:68:19:68:24 | Param | test.rs:69:9:69:25 | LetStmt | | | test.rs:68:27:77:5 | BlockExpr | test.rs:68:5:77:5 | exit test_while (normal) | | | test.rs:69:9:69:25 | LetStmt | test.rs:69:21:69:24 | true | | -| test.rs:69:13:69:17 | b | test.rs:70:15:70:15 | b | match, no-match | +| test.rs:69:13:69:17 | b | test.rs:70:15:70:15 | b | match | | test.rs:69:21:69:24 | true | test.rs:69:13:69:17 | b | | | test.rs:70:9:76:9 | WhileExpr | test.rs:68:27:77:5 | BlockExpr | | | test.rs:70:15:70:15 | b | test.rs:70:9:76:9 | WhileExpr | false | @@ -152,14 +152,15 @@ edges | test.rs:79:5:86:5 | exit test_while_let (normal) | test.rs:79:5:86:5 | exit test_while_let | | | test.rs:79:25:86:5 | BlockExpr | test.rs:79:5:86:5 | exit test_while_let (normal) | | | test.rs:80:9:80:29 | LetStmt | test.rs:80:24:80:24 | 1 | | -| test.rs:80:13:80:20 | iter | test.rs:81:15:81:39 | LetExpr | match, no-match | +| test.rs:80:13:80:20 | iter | test.rs:81:15:81:39 | LetExpr | match | | test.rs:80:24:80:24 | 1 | test.rs:80:27:80:28 | 10 | | | test.rs:80:24:80:28 | RangeExpr | test.rs:80:13:80:20 | iter | | | test.rs:80:27:80:28 | 10 | test.rs:80:24:80:28 | RangeExpr | | | test.rs:81:9:85:9 | WhileExpr | test.rs:79:25:86:5 | BlockExpr | | | test.rs:81:15:81:39 | LetExpr | test.rs:81:19:81:25 | TupleStructPat | | | test.rs:81:19:81:25 | TupleStructPat | test.rs:81:9:85:9 | WhileExpr | no-match | -| test.rs:81:19:81:25 | TupleStructPat | test.rs:82:17:82:17 | PathExpr | match | +| test.rs:81:19:81:25 | TupleStructPat | test.rs:81:24:81:24 | x | match | +| test.rs:81:24:81:24 | x | test.rs:82:17:82:17 | PathExpr | match | | test.rs:81:41:85:9 | BlockExpr | test.rs:81:15:81:39 | LetExpr | | | test.rs:82:13:84:13 | IfExpr | test.rs:81:41:85:9 | BlockExpr | | | test.rs:82:17:82:17 | PathExpr | test.rs:82:21:82:21 | 5 | | @@ -170,7 +171,7 @@ edges | test.rs:83:17:83:22 | ExprStmt | test.rs:83:17:83:21 | BreakExpr | | | test.rs:88:5:95:5 | enter test_for | test.rs:88:17:88:17 | j | | | test.rs:88:5:95:5 | exit test_for (normal) | test.rs:88:5:95:5 | exit test_for | | -| test.rs:88:17:88:17 | j | test.rs:88:17:88:22 | Param | match, no-match | +| test.rs:88:17:88:17 | j | test.rs:88:17:88:22 | Param | match | | test.rs:88:17:88:22 | Param | test.rs:89:18:89:18 | 0 | | | test.rs:88:25:95:5 | BlockExpr | test.rs:88:5:95:5 | exit test_for (normal) | | | test.rs:89:9:94:9 | ForExpr | test.rs:88:25:95:5 | BlockExpr | | @@ -192,16 +193,16 @@ edges | test.rs:93:13:93:14 | ExprStmt | test.rs:93:13:93:13 | 1 | | | test.rs:98:1:101:1 | enter test_nested_function | test.rs:98:25:98:25 | n | | | test.rs:98:1:101:1 | exit test_nested_function (normal) | test.rs:98:1:101:1 | exit test_nested_function | | -| test.rs:98:25:98:25 | n | test.rs:98:25:98:30 | Param | match, no-match | +| test.rs:98:25:98:25 | n | test.rs:98:25:98:30 | Param | match | | test.rs:98:25:98:30 | Param | test.rs:99:5:99:28 | LetStmt | | | test.rs:98:40:101:1 | BlockExpr | test.rs:98:1:101:1 | exit test_nested_function (normal) | | | test.rs:99:5:99:28 | LetStmt | test.rs:99:19:99:27 | ClosureExpr | | -| test.rs:99:9:99:15 | add_one | test.rs:100:5:100:11 | add_one | match, no-match | +| test.rs:99:9:99:15 | add_one | test.rs:100:5:100:11 | add_one | match | | test.rs:99:19:99:27 | ClosureExpr | test.rs:99:9:99:15 | add_one | | | test.rs:99:19:99:27 | enter ClosureExpr | test.rs:99:20:99:20 | i | | | test.rs:99:19:99:27 | exit ClosureExpr (normal) | test.rs:99:19:99:27 | exit ClosureExpr | | | test.rs:99:20:99:20 | Param | test.rs:99:23:99:23 | i | | -| test.rs:99:20:99:20 | i | test.rs:99:20:99:20 | Param | match, no-match | +| test.rs:99:20:99:20 | i | test.rs:99:20:99:20 | Param | match | | test.rs:99:23:99:23 | i | test.rs:99:27:99:27 | 1 | | | test.rs:99:23:99:27 | ... + ... | test.rs:99:19:99:27 | exit ClosureExpr (normal) | | | test.rs:99:27:99:27 | 1 | test.rs:99:23:99:27 | ... + ... | | @@ -212,7 +213,7 @@ edges | test.rs:100:21:100:21 | n | test.rs:100:13:100:22 | CallExpr | | | test.rs:105:5:111:5 | enter test_if_else | test.rs:105:21:105:21 | n | | | test.rs:105:5:111:5 | exit test_if_else (normal) | test.rs:105:5:111:5 | exit test_if_else | | -| test.rs:105:21:105:21 | n | test.rs:105:21:105:26 | Param | match, no-match | +| test.rs:105:21:105:21 | n | test.rs:105:21:105:26 | Param | match | | test.rs:105:21:105:26 | Param | test.rs:106:12:106:12 | n | | | test.rs:105:36:111:5 | BlockExpr | test.rs:105:5:111:5 | exit test_if_else (normal) | | | test.rs:106:9:110:9 | IfExpr | test.rs:105:36:111:5 | BlockExpr | | @@ -228,33 +229,35 @@ edges | test.rs:109:17:109:17 | 1 | test.rs:109:13:109:17 | ... - ... | | | test.rs:113:5:119:5 | enter test_if_let_else | test.rs:113:25:113:25 | a | | | test.rs:113:5:119:5 | exit test_if_let_else (normal) | test.rs:113:5:119:5 | exit test_if_let_else | | -| test.rs:113:25:113:25 | a | test.rs:113:25:113:38 | Param | match, no-match | +| test.rs:113:25:113:25 | a | test.rs:113:25:113:38 | Param | match | | test.rs:113:25:113:38 | Param | test.rs:114:12:114:26 | LetExpr | | | test.rs:113:48:119:5 | BlockExpr | test.rs:113:5:119:5 | exit test_if_let_else (normal) | | | test.rs:114:9:118:9 | IfExpr | test.rs:113:48:119:5 | BlockExpr | | | test.rs:114:12:114:26 | LetExpr | test.rs:114:16:114:22 | TupleStructPat | | -| test.rs:114:16:114:22 | TupleStructPat | test.rs:115:13:115:13 | n | match | +| test.rs:114:16:114:22 | TupleStructPat | test.rs:114:21:114:21 | n | match | | test.rs:114:16:114:22 | TupleStructPat | test.rs:117:13:117:13 | 0 | no-match | +| test.rs:114:21:114:21 | n | test.rs:115:13:115:13 | n | match | | test.rs:114:28:116:9 | BlockExpr | test.rs:114:9:118:9 | IfExpr | | | test.rs:115:13:115:13 | n | test.rs:114:28:116:9 | BlockExpr | | | test.rs:116:16:118:9 | BlockExpr | test.rs:114:9:118:9 | IfExpr | | | test.rs:117:13:117:13 | 0 | test.rs:116:16:118:9 | BlockExpr | | | test.rs:121:5:126:5 | enter test_if_let | test.rs:121:20:121:20 | a | | | test.rs:121:5:126:5 | exit test_if_let (normal) | test.rs:121:5:126:5 | exit test_if_let | | -| test.rs:121:20:121:20 | a | test.rs:121:20:121:33 | Param | match, no-match | +| test.rs:121:20:121:20 | a | test.rs:121:20:121:33 | Param | match | | test.rs:121:20:121:33 | Param | test.rs:122:9:124:9 | ExprStmt | | | test.rs:121:43:126:5 | BlockExpr | test.rs:121:5:126:5 | exit test_if_let (normal) | | | test.rs:122:9:124:9 | ExprStmt | test.rs:122:12:122:26 | LetExpr | | | test.rs:122:9:124:9 | IfExpr | test.rs:125:9:125:9 | 0 | | | test.rs:122:12:122:26 | LetExpr | test.rs:122:16:122:22 | TupleStructPat | | | test.rs:122:16:122:22 | TupleStructPat | test.rs:122:9:124:9 | IfExpr | no-match | -| test.rs:122:16:122:22 | TupleStructPat | test.rs:123:13:123:13 | n | match | +| test.rs:122:16:122:22 | TupleStructPat | test.rs:122:21:122:21 | n | match | +| test.rs:122:21:122:21 | n | test.rs:123:13:123:13 | n | match | | test.rs:122:28:124:9 | BlockExpr | test.rs:122:9:124:9 | IfExpr | | | test.rs:123:13:123:13 | n | test.rs:122:28:124:9 | BlockExpr | | | test.rs:125:9:125:9 | 0 | test.rs:121:43:126:5 | BlockExpr | | | test.rs:128:5:134:5 | enter test_nested_if | test.rs:128:23:128:23 | a | | | test.rs:128:5:134:5 | exit test_nested_if (normal) | test.rs:128:5:134:5 | exit test_nested_if | | -| test.rs:128:23:128:23 | a | test.rs:128:23:128:28 | Param | match, no-match | +| test.rs:128:23:128:23 | a | test.rs:128:23:128:28 | Param | match | | test.rs:128:23:128:28 | Param | test.rs:129:16:129:16 | a | | | test.rs:128:38:134:5 | BlockExpr | test.rs:128:5:134:5 | exit test_nested_if (normal) | | | test.rs:129:9:133:9 | IfExpr | test.rs:128:38:134:5 | BlockExpr | | @@ -283,7 +286,7 @@ edges | test.rs:132:13:132:13 | 0 | test.rs:131:16:133:9 | BlockExpr | | | test.rs:136:5:145:5 | enter test_nested_if_match | test.rs:136:29:136:29 | a | | | test.rs:136:5:145:5 | exit test_nested_if_match (normal) | test.rs:136:5:145:5 | exit test_nested_if_match | | -| test.rs:136:29:136:29 | a | test.rs:136:29:136:34 | Param | match, no-match | +| test.rs:136:29:136:29 | a | test.rs:136:29:136:34 | Param | match | | test.rs:136:29:136:34 | Param | test.rs:137:19:137:19 | a | | | test.rs:136:44:145:5 | BlockExpr | test.rs:136:5:145:5 | exit test_nested_if_match (normal) | | | test.rs:137:9:144:9 | IfExpr | test.rs:136:44:145:5 | BlockExpr | | @@ -301,7 +304,7 @@ edges | test.rs:143:13:143:13 | 0 | test.rs:142:16:144:9 | BlockExpr | | | test.rs:147:5:156:5 | enter test_nested_if_block | test.rs:147:29:147:29 | a | | | test.rs:147:5:156:5 | exit test_nested_if_block (normal) | test.rs:147:5:156:5 | exit test_nested_if_block | | -| test.rs:147:29:147:29 | a | test.rs:147:29:147:34 | Param | match, no-match | +| test.rs:147:29:147:29 | a | test.rs:147:29:147:34 | Param | match | | test.rs:147:29:147:34 | Param | test.rs:149:13:149:15 | ExprStmt | | | test.rs:147:44:156:5 | BlockExpr | test.rs:147:5:156:5 | exit test_nested_if_block (normal) | | | test.rs:148:9:155:9 | IfExpr | test.rs:147:44:156:5 | BlockExpr | | @@ -319,11 +322,11 @@ edges | test.rs:154:13:154:13 | 0 | test.rs:153:16:155:9 | BlockExpr | | | test.rs:158:5:165:5 | enter test_if_assignment | test.rs:158:27:158:27 | a | | | test.rs:158:5:165:5 | exit test_if_assignment (normal) | test.rs:158:5:165:5 | exit test_if_assignment | | -| test.rs:158:27:158:27 | a | test.rs:158:27:158:32 | Param | match, no-match | +| test.rs:158:27:158:27 | a | test.rs:158:27:158:32 | Param | match | | test.rs:158:27:158:32 | Param | test.rs:159:9:159:26 | LetStmt | | | test.rs:158:42:165:5 | BlockExpr | test.rs:158:5:165:5 | exit test_if_assignment (normal) | | | test.rs:159:9:159:26 | LetStmt | test.rs:159:21:159:25 | false | | -| test.rs:159:13:159:17 | x | test.rs:160:12:160:12 | x | match, no-match | +| test.rs:159:13:159:17 | x | test.rs:160:12:160:12 | x | match | | test.rs:159:21:159:25 | false | test.rs:159:13:159:17 | x | | | test.rs:160:9:164:9 | IfExpr | test.rs:158:42:165:5 | BlockExpr | | | test.rs:160:12:160:12 | x | test.rs:160:16:160:19 | true | | @@ -336,7 +339,7 @@ edges | test.rs:163:13:163:13 | 0 | test.rs:162:16:164:9 | BlockExpr | | | test.rs:167:5:178:5 | enter test_if_loop1 | test.rs:167:22:167:22 | a | | | test.rs:167:5:178:5 | exit test_if_loop1 (normal) | test.rs:167:5:178:5 | exit test_if_loop1 | | -| test.rs:167:22:167:22 | a | test.rs:167:22:167:27 | Param | match, no-match | +| test.rs:167:22:167:22 | a | test.rs:167:22:167:27 | Param | match | | test.rs:167:22:167:27 | Param | test.rs:169:13:171:14 | ExprStmt | | | test.rs:167:37:178:5 | BlockExpr | test.rs:167:5:178:5 | exit test_if_loop1 (normal) | | | test.rs:168:9:177:9 | IfExpr | test.rs:167:37:178:5 | BlockExpr | | @@ -366,7 +369,7 @@ edges | test.rs:176:13:176:13 | 0 | test.rs:175:16:177:9 | BlockExpr | | | test.rs:180:5:191:5 | enter test_if_loop2 | test.rs:180:22:180:22 | a | | | test.rs:180:5:191:5 | exit test_if_loop2 (normal) | test.rs:180:5:191:5 | exit test_if_loop2 | | -| test.rs:180:22:180:22 | a | test.rs:180:22:180:27 | Param | match, no-match | +| test.rs:180:22:180:22 | a | test.rs:180:22:180:27 | Param | match | | test.rs:180:22:180:27 | Param | test.rs:182:13:184:14 | ExprStmt | | | test.rs:180:37:191:5 | BlockExpr | test.rs:180:5:191:5 | exit test_if_loop2 (normal) | | | test.rs:181:9:190:9 | IfExpr | test.rs:180:37:191:5 | BlockExpr | | @@ -396,7 +399,7 @@ edges | test.rs:189:13:189:13 | 0 | test.rs:188:16:190:9 | BlockExpr | | | test.rs:193:5:201:5 | enter test_labelled_block | test.rs:193:28:193:28 | a | | | test.rs:193:5:201:5 | exit test_labelled_block (normal) | test.rs:193:5:201:5 | exit test_labelled_block | | -| test.rs:193:28:193:28 | a | test.rs:193:28:193:33 | Param | match, no-match | +| test.rs:193:28:193:28 | a | test.rs:193:28:193:33 | Param | match | | test.rs:193:28:193:33 | Param | test.rs:195:13:195:31 | ExprStmt | | | test.rs:193:43:201:5 | BlockExpr | test.rs:193:5:201:5 | exit test_labelled_block (normal) | | | test.rs:194:9:200:9 | IfExpr | test.rs:193:43:201:5 | BlockExpr | | @@ -415,15 +418,15 @@ edges | test.rs:199:13:199:13 | 0 | test.rs:198:16:200:9 | BlockExpr | | | test.rs:206:5:209:5 | enter test_and_operator | test.rs:206:26:206:26 | a | | | test.rs:206:5:209:5 | exit test_and_operator (normal) | test.rs:206:5:209:5 | exit test_and_operator | | -| test.rs:206:26:206:26 | a | test.rs:206:26:206:32 | Param | match, no-match | +| test.rs:206:26:206:26 | a | test.rs:206:26:206:32 | Param | match | | test.rs:206:26:206:32 | Param | test.rs:206:35:206:35 | b | | -| test.rs:206:35:206:35 | b | test.rs:206:35:206:41 | Param | match, no-match | +| test.rs:206:35:206:35 | b | test.rs:206:35:206:41 | Param | match | | test.rs:206:35:206:41 | Param | test.rs:206:44:206:44 | c | | -| test.rs:206:44:206:44 | c | test.rs:206:44:206:50 | Param | match, no-match | +| test.rs:206:44:206:44 | c | test.rs:206:44:206:50 | Param | match | | test.rs:206:44:206:50 | Param | test.rs:207:9:207:28 | LetStmt | | | test.rs:206:61:209:5 | BlockExpr | test.rs:206:5:209:5 | exit test_and_operator (normal) | | | test.rs:207:9:207:28 | LetStmt | test.rs:207:17:207:17 | a | | -| test.rs:207:13:207:13 | d | test.rs:208:9:208:9 | d | match, no-match | +| test.rs:207:13:207:13 | d | test.rs:208:9:208:9 | d | match | | test.rs:207:17:207:17 | a | test.rs:207:17:207:22 | [boolean(false)] ... && ... | false | | test.rs:207:17:207:17 | a | test.rs:207:22:207:22 | b | true | | test.rs:207:17:207:22 | [boolean(false)] ... && ... | test.rs:207:17:207:27 | ... && ... | false | @@ -435,15 +438,15 @@ edges | test.rs:208:9:208:9 | d | test.rs:206:61:209:5 | BlockExpr | | | test.rs:211:5:214:5 | enter test_or_operator | test.rs:211:25:211:25 | a | | | test.rs:211:5:214:5 | exit test_or_operator (normal) | test.rs:211:5:214:5 | exit test_or_operator | | -| test.rs:211:25:211:25 | a | test.rs:211:25:211:31 | Param | match, no-match | +| test.rs:211:25:211:25 | a | test.rs:211:25:211:31 | Param | match | | test.rs:211:25:211:31 | Param | test.rs:211:34:211:34 | b | | -| test.rs:211:34:211:34 | b | test.rs:211:34:211:40 | Param | match, no-match | +| test.rs:211:34:211:34 | b | test.rs:211:34:211:40 | Param | match | | test.rs:211:34:211:40 | Param | test.rs:211:43:211:43 | c | | -| test.rs:211:43:211:43 | c | test.rs:211:43:211:49 | Param | match, no-match | +| test.rs:211:43:211:43 | c | test.rs:211:43:211:49 | Param | match | | test.rs:211:43:211:49 | Param | test.rs:212:9:212:28 | LetStmt | | | test.rs:211:60:214:5 | BlockExpr | test.rs:211:5:214:5 | exit test_or_operator (normal) | | | test.rs:212:9:212:28 | LetStmt | test.rs:212:17:212:17 | a | | -| test.rs:212:13:212:13 | d | test.rs:213:9:213:9 | d | match, no-match | +| test.rs:212:13:212:13 | d | test.rs:213:9:213:9 | d | match | | test.rs:212:17:212:17 | a | test.rs:212:17:212:22 | [boolean(true)] ... \|\| ... | true | | test.rs:212:17:212:17 | a | test.rs:212:22:212:22 | b | false | | test.rs:212:17:212:22 | [boolean(false)] ... \|\| ... | test.rs:212:27:212:27 | c | false | @@ -455,15 +458,15 @@ edges | test.rs:213:9:213:9 | d | test.rs:211:60:214:5 | BlockExpr | | | test.rs:216:5:219:5 | enter test_or_operator_2 | test.rs:216:27:216:27 | a | | | test.rs:216:5:219:5 | exit test_or_operator_2 (normal) | test.rs:216:5:219:5 | exit test_or_operator_2 | | -| test.rs:216:27:216:27 | a | test.rs:216:27:216:33 | Param | match, no-match | +| test.rs:216:27:216:27 | a | test.rs:216:27:216:33 | Param | match | | test.rs:216:27:216:33 | Param | test.rs:216:36:216:36 | b | | -| test.rs:216:36:216:36 | b | test.rs:216:36:216:41 | Param | match, no-match | +| test.rs:216:36:216:36 | b | test.rs:216:36:216:41 | Param | match | | test.rs:216:36:216:41 | Param | test.rs:216:44:216:44 | c | | -| test.rs:216:44:216:44 | c | test.rs:216:44:216:50 | Param | match, no-match | +| test.rs:216:44:216:44 | c | test.rs:216:44:216:50 | Param | match | | test.rs:216:44:216:50 | Param | test.rs:217:9:217:36 | LetStmt | | | test.rs:216:61:219:5 | BlockExpr | test.rs:216:5:219:5 | exit test_or_operator_2 (normal) | | | test.rs:217:9:217:36 | LetStmt | test.rs:217:17:217:17 | a | | -| test.rs:217:13:217:13 | d | test.rs:218:9:218:9 | d | match, no-match | +| test.rs:217:13:217:13 | d | test.rs:218:9:218:9 | d | match | | test.rs:217:17:217:17 | a | test.rs:217:17:217:30 | [boolean(true)] ... \|\| ... | true | | test.rs:217:17:217:17 | a | test.rs:217:23:217:23 | b | false | | test.rs:217:17:217:30 | [boolean(false)] ... \|\| ... | test.rs:217:35:217:35 | c | false | @@ -477,21 +480,21 @@ edges | test.rs:218:9:218:9 | d | test.rs:216:61:219:5 | BlockExpr | | | test.rs:221:5:224:5 | enter test_not_operator | test.rs:221:26:221:26 | a | | | test.rs:221:5:224:5 | exit test_not_operator (normal) | test.rs:221:5:224:5 | exit test_not_operator | | -| test.rs:221:26:221:26 | a | test.rs:221:26:221:32 | Param | match, no-match | +| test.rs:221:26:221:26 | a | test.rs:221:26:221:32 | Param | match | | test.rs:221:26:221:32 | Param | test.rs:222:9:222:19 | LetStmt | | | test.rs:221:43:224:5 | BlockExpr | test.rs:221:5:224:5 | exit test_not_operator (normal) | | | test.rs:222:9:222:19 | LetStmt | test.rs:222:18:222:18 | a | | -| test.rs:222:13:222:13 | d | test.rs:223:9:223:9 | d | match, no-match | +| test.rs:222:13:222:13 | d | test.rs:223:9:223:9 | d | match | | test.rs:222:17:222:18 | ! ... | test.rs:222:13:222:13 | d | | | test.rs:222:18:222:18 | a | test.rs:222:17:222:18 | ! ... | | | test.rs:223:9:223:9 | d | test.rs:221:43:224:5 | BlockExpr | | | test.rs:226:5:232:5 | enter test_if_and_operator | test.rs:226:29:226:29 | a | | | test.rs:226:5:232:5 | exit test_if_and_operator (normal) | test.rs:226:5:232:5 | exit test_if_and_operator | | -| test.rs:226:29:226:29 | a | test.rs:226:29:226:35 | Param | match, no-match | +| test.rs:226:29:226:29 | a | test.rs:226:29:226:35 | Param | match | | test.rs:226:29:226:35 | Param | test.rs:226:38:226:38 | b | | -| test.rs:226:38:226:38 | b | test.rs:226:38:226:43 | Param | match, no-match | +| test.rs:226:38:226:38 | b | test.rs:226:38:226:43 | Param | match | | test.rs:226:38:226:43 | Param | test.rs:226:46:226:46 | c | | -| test.rs:226:46:226:46 | c | test.rs:226:46:226:52 | Param | match, no-match | +| test.rs:226:46:226:46 | c | test.rs:226:46:226:52 | Param | match | | test.rs:226:46:226:52 | Param | test.rs:227:12:227:12 | a | | | test.rs:226:63:232:5 | BlockExpr | test.rs:226:5:232:5 | exit test_if_and_operator (normal) | | | test.rs:227:9:231:9 | IfExpr | test.rs:226:63:232:5 | BlockExpr | | @@ -511,11 +514,11 @@ edges | test.rs:230:13:230:17 | false | test.rs:229:16:231:9 | BlockExpr | | | test.rs:234:5:240:5 | enter test_if_or_operator | test.rs:234:28:234:28 | a | | | test.rs:234:5:240:5 | exit test_if_or_operator (normal) | test.rs:234:5:240:5 | exit test_if_or_operator | | -| test.rs:234:28:234:28 | a | test.rs:234:28:234:34 | Param | match, no-match | +| test.rs:234:28:234:28 | a | test.rs:234:28:234:34 | Param | match | | test.rs:234:28:234:34 | Param | test.rs:234:37:234:37 | b | | -| test.rs:234:37:234:37 | b | test.rs:234:37:234:42 | Param | match, no-match | +| test.rs:234:37:234:37 | b | test.rs:234:37:234:42 | Param | match | | test.rs:234:37:234:42 | Param | test.rs:234:45:234:45 | c | | -| test.rs:234:45:234:45 | c | test.rs:234:45:234:51 | Param | match, no-match | +| test.rs:234:45:234:45 | c | test.rs:234:45:234:51 | Param | match | | test.rs:234:45:234:51 | Param | test.rs:235:12:235:12 | a | | | test.rs:234:62:240:5 | BlockExpr | test.rs:234:5:240:5 | exit test_if_or_operator (normal) | | | test.rs:235:9:239:9 | IfExpr | test.rs:234:62:240:5 | BlockExpr | | @@ -535,7 +538,7 @@ edges | test.rs:238:13:238:17 | false | test.rs:237:16:239:9 | BlockExpr | | | test.rs:242:5:248:5 | enter test_if_not_operator | test.rs:242:29:242:29 | a | | | test.rs:242:5:248:5 | exit test_if_not_operator (normal) | test.rs:242:5:248:5 | exit test_if_not_operator | | -| test.rs:242:29:242:29 | a | test.rs:242:29:242:35 | Param | match, no-match | +| test.rs:242:29:242:29 | a | test.rs:242:29:242:35 | Param | match | | test.rs:242:29:242:35 | Param | test.rs:243:13:243:13 | a | | | test.rs:242:46:248:5 | BlockExpr | test.rs:242:5:248:5 | exit test_if_not_operator (normal) | | | test.rs:243:9:247:9 | IfExpr | test.rs:242:46:248:5 | BlockExpr | | @@ -549,13 +552,14 @@ edges | test.rs:246:13:246:17 | false | test.rs:245:16:247:9 | BlockExpr | | | test.rs:251:1:257:1 | enter test_match | test.rs:251:15:251:25 | maybe_digit | | | test.rs:251:1:257:1 | exit test_match (normal) | test.rs:251:1:257:1 | exit test_match | | -| test.rs:251:15:251:25 | maybe_digit | test.rs:251:15:251:38 | Param | match, no-match | +| test.rs:251:15:251:25 | maybe_digit | test.rs:251:15:251:38 | Param | match | | test.rs:251:15:251:38 | Param | test.rs:252:11:252:21 | maybe_digit | | | test.rs:251:48:257:1 | BlockExpr | test.rs:251:1:257:1 | exit test_match (normal) | | | test.rs:252:5:256:5 | MatchExpr | test.rs:251:48:257:1 | BlockExpr | | | test.rs:252:11:252:21 | maybe_digit | test.rs:253:9:253:23 | TupleStructPat | | -| test.rs:253:9:253:23 | TupleStructPat | test.rs:253:28:253:28 | x | match | +| test.rs:253:9:253:23 | TupleStructPat | test.rs:253:22:253:22 | x | match | | test.rs:253:9:253:23 | TupleStructPat | test.rs:254:9:254:23 | TupleStructPat | no-match | +| test.rs:253:22:253:22 | x | test.rs:253:28:253:28 | x | match | | test.rs:253:28:253:28 | x | test.rs:253:32:253:33 | 10 | | | test.rs:253:28:253:33 | ... < ... | test.rs:253:38:253:38 | x | true | | test.rs:253:28:253:33 | ... < ... | test.rs:254:9:254:23 | TupleStructPat | false | @@ -563,8 +567,9 @@ edges | test.rs:253:38:253:38 | x | test.rs:253:42:253:42 | 5 | | | test.rs:253:38:253:42 | ... + ... | test.rs:252:5:256:5 | MatchExpr | | | test.rs:253:42:253:42 | 5 | test.rs:253:38:253:42 | ... + ... | | -| test.rs:254:9:254:23 | TupleStructPat | test.rs:254:28:254:28 | x | match | +| test.rs:254:9:254:23 | TupleStructPat | test.rs:254:22:254:22 | x | match | | test.rs:254:9:254:23 | TupleStructPat | test.rs:255:9:255:20 | PathPat | no-match | +| test.rs:254:22:254:22 | x | test.rs:254:28:254:28 | x | match | | test.rs:254:28:254:28 | x | test.rs:252:5:256:5 | MatchExpr | | | test.rs:255:9:255:20 | PathPat | test.rs:255:25:255:25 | 5 | match | | test.rs:255:25:255:25 | 5 | test.rs:252:5:256:5 | MatchExpr | | @@ -574,12 +579,13 @@ edges | test.rs:262:13:262:13 | 1 | test.rs:261:14:263:9 | BlockExpr | | | test.rs:267:5:270:5 | enter test_let_match | test.rs:267:23:267:23 | a | | | test.rs:267:5:270:5 | exit test_let_match (normal) | test.rs:267:5:270:5 | exit test_let_match | | -| test.rs:267:23:267:23 | a | test.rs:267:23:267:36 | Param | match, no-match | +| test.rs:267:23:267:23 | a | test.rs:267:23:267:36 | Param | match | | test.rs:267:23:267:36 | Param | test.rs:268:9:268:49 | LetStmt | | | test.rs:267:39:270:5 | BlockExpr | test.rs:267:5:270:5 | exit test_let_match (normal) | | | test.rs:268:9:268:49 | LetStmt | test.rs:268:23:268:23 | a | | +| test.rs:268:13:268:19 | TupleStructPat | test.rs:268:18:268:18 | n | match | | test.rs:268:13:268:19 | TupleStructPat | test.rs:268:32:268:46 | "Expected some" | no-match | -| test.rs:268:13:268:19 | TupleStructPat | test.rs:269:9:269:9 | n | match | +| test.rs:268:18:268:18 | n | test.rs:269:9:269:9 | n | match | | test.rs:268:23:268:23 | a | test.rs:268:13:268:19 | TupleStructPat | | | test.rs:268:32:268:46 | "Expected some" | test.rs:268:30:268:48 | BlockExpr | | | test.rs:269:9:269:9 | n | test.rs:267:39:270:5 | BlockExpr | | @@ -594,7 +600,7 @@ edges | test.rs:280:1:293:1 | exit labelled_block1 (normal) | test.rs:280:1:293:1 | exit labelled_block1 | | | test.rs:280:29:293:1 | BlockExpr | test.rs:280:1:293:1 | exit labelled_block1 (normal) | | | test.rs:281:5:292:6 | LetStmt | test.rs:282:9:282:19 | ExprStmt | | -| test.rs:281:9:281:14 | result | test.rs:280:29:293:1 | BlockExpr | match, no-match | +| test.rs:281:9:281:14 | result | test.rs:280:29:293:1 | BlockExpr | match | | test.rs:281:18:292:5 | BlockExpr | test.rs:281:9:281:14 | result | | | test.rs:282:9:282:16 | PathExpr | test.rs:282:9:282:18 | CallExpr | | | test.rs:282:9:282:18 | CallExpr | test.rs:283:9:285:9 | ExprStmt | | @@ -626,14 +632,15 @@ edges | test.rs:295:1:303:1 | exit labelled_block2 (normal) | test.rs:295:1:303:1 | exit labelled_block2 | | | test.rs:295:29:303:1 | BlockExpr | test.rs:295:1:303:1 | exit labelled_block2 (normal) | | | test.rs:296:5:302:6 | LetStmt | test.rs:297:9:297:34 | LetStmt | | -| test.rs:296:9:296:14 | result | test.rs:295:29:303:1 | BlockExpr | match, no-match | +| test.rs:296:9:296:14 | result | test.rs:295:29:303:1 | BlockExpr | match | | test.rs:296:18:302:5 | BlockExpr | test.rs:296:9:296:14 | result | | | test.rs:297:9:297:34 | LetStmt | test.rs:297:30:297:33 | PathExpr | | -| test.rs:297:13:297:13 | x | test.rs:298:9:300:10 | LetStmt | match, no-match | +| test.rs:297:13:297:13 | x | test.rs:298:9:300:10 | LetStmt | match | | test.rs:297:30:297:33 | PathExpr | test.rs:297:13:297:13 | x | | | test.rs:298:9:300:10 | LetStmt | test.rs:298:23:298:23 | x | | +| test.rs:298:13:298:19 | TupleStructPat | test.rs:298:18:298:18 | y | match | | test.rs:298:13:298:19 | TupleStructPat | test.rs:299:13:299:27 | ExprStmt | no-match | -| test.rs:298:13:298:19 | TupleStructPat | test.rs:301:9:301:9 | x | match | +| test.rs:298:18:298:18 | y | test.rs:301:9:301:9 | x | match | | test.rs:298:23:298:23 | x | test.rs:298:13:298:19 | TupleStructPat | | | test.rs:299:13:299:26 | BreakExpr | test.rs:296:18:302:5 | BlockExpr | break | | test.rs:299:13:299:27 | ExprStmt | test.rs:299:26:299:26 | 1 | | @@ -643,12 +650,12 @@ edges | test.rs:305:1:311:1 | exit test_nested_function (normal) | test.rs:305:1:311:1 | exit test_nested_function | | | test.rs:305:27:311:1 | BlockExpr | test.rs:305:1:311:1 | exit test_nested_function (normal) | | | test.rs:306:5:306:18 | LetStmt | test.rs:306:17:306:17 | 0 | | -| test.rs:306:9:306:13 | x | test.rs:307:5:309:5 | nested | match, no-match | +| test.rs:306:9:306:13 | x | test.rs:307:5:309:5 | nested | match | | test.rs:306:17:306:17 | 0 | test.rs:306:9:306:13 | x | | | test.rs:307:5:309:5 | enter nested | test.rs:307:15:307:15 | x | | | test.rs:307:5:309:5 | exit nested (normal) | test.rs:307:5:309:5 | exit nested | | | test.rs:307:5:309:5 | nested | test.rs:310:5:310:19 | ExprStmt | | -| test.rs:307:15:307:15 | x | test.rs:307:15:307:26 | Param | match, no-match | +| test.rs:307:15:307:15 | x | test.rs:307:15:307:26 | Param | match | | test.rs:307:15:307:26 | Param | test.rs:308:9:308:16 | ExprStmt | | | test.rs:307:29:309:5 | BlockExpr | test.rs:307:5:309:5 | exit nested (normal) | | | test.rs:308:9:308:10 | * ... | test.rs:308:15:308:15 | 1 | | diff --git a/rust/ql/test/library-tests/variables/Cfg.expected b/rust/ql/test/library-tests/variables/Cfg.expected index b8b61495f754..db01e6c6e7f8 100644 --- a/rust/ql/test/library-tests/variables/Cfg.expected +++ b/rust/ql/test/library-tests/variables/Cfg.expected @@ -1,14 +1,14 @@ edges | variables.rs:3:1:5:1 | enter print_str | variables.rs:3:14:3:14 | s | | | variables.rs:3:1:5:1 | exit print_str (normal) | variables.rs:3:1:5:1 | exit print_str | | -| variables.rs:3:14:3:14 | s | variables.rs:3:14:3:20 | Param | match, no-match | +| variables.rs:3:14:3:14 | s | variables.rs:3:14:3:20 | Param | match | | variables.rs:3:14:3:20 | Param | variables.rs:4:5:4:22 | ExprStmt | | | variables.rs:3:23:5:1 | BlockExpr | variables.rs:3:1:5:1 | exit print_str (normal) | | | variables.rs:4:5:4:21 | MacroExpr | variables.rs:3:23:5:1 | BlockExpr | | | variables.rs:4:5:4:22 | ExprStmt | variables.rs:4:5:4:21 | MacroExpr | | | variables.rs:7:1:9:1 | enter print_i64 | variables.rs:7:14:7:14 | i | | | variables.rs:7:1:9:1 | exit print_i64 (normal) | variables.rs:7:1:9:1 | exit print_i64 | | -| variables.rs:7:14:7:14 | i | variables.rs:7:14:7:19 | Param | match, no-match | +| variables.rs:7:14:7:14 | i | variables.rs:7:14:7:19 | Param | match | | variables.rs:7:14:7:19 | Param | variables.rs:8:5:8:22 | ExprStmt | | | variables.rs:7:22:9:1 | BlockExpr | variables.rs:7:1:9:1 | exit print_i64 (normal) | | | variables.rs:8:5:8:21 | MacroExpr | variables.rs:7:22:9:1 | BlockExpr | | @@ -17,7 +17,7 @@ edges | variables.rs:11:1:14:1 | exit immutable_variable (normal) | variables.rs:11:1:14:1 | exit immutable_variable | | | variables.rs:11:25:14:1 | BlockExpr | variables.rs:11:1:14:1 | exit immutable_variable (normal) | | | variables.rs:12:5:12:17 | LetStmt | variables.rs:12:14:12:16 | "a" | | -| variables.rs:12:9:12:10 | x1 | variables.rs:13:5:13:18 | ExprStmt | match, no-match | +| variables.rs:12:9:12:10 | x1 | variables.rs:13:5:13:18 | ExprStmt | match | | variables.rs:12:14:12:16 | "a" | variables.rs:12:9:12:10 | x1 | | | variables.rs:13:5:13:13 | PathExpr | variables.rs:13:15:13:16 | x1 | | | variables.rs:13:5:13:17 | CallExpr | variables.rs:11:25:14:1 | BlockExpr | | @@ -27,7 +27,7 @@ edges | variables.rs:16:1:21:1 | exit mutable_variable (normal) | variables.rs:16:1:21:1 | exit mutable_variable | | | variables.rs:16:23:21:1 | BlockExpr | variables.rs:16:1:21:1 | exit mutable_variable (normal) | | | variables.rs:17:5:17:19 | LetStmt | variables.rs:17:18:17:18 | 4 | | -| variables.rs:17:9:17:14 | x2 | variables.rs:18:5:18:18 | ExprStmt | match, no-match | +| variables.rs:17:9:17:14 | x2 | variables.rs:18:5:18:18 | ExprStmt | match | | variables.rs:17:18:17:18 | 4 | variables.rs:17:9:17:14 | x2 | | | variables.rs:18:5:18:13 | PathExpr | variables.rs:18:15:18:16 | x2 | | | variables.rs:18:5:18:17 | CallExpr | variables.rs:19:5:19:11 | ExprStmt | | @@ -45,14 +45,14 @@ edges | variables.rs:23:1:29:1 | exit variable_shadow1 (normal) | variables.rs:23:1:29:1 | exit variable_shadow1 | | | variables.rs:23:23:29:1 | BlockExpr | variables.rs:23:1:29:1 | exit variable_shadow1 (normal) | | | variables.rs:24:5:24:15 | LetStmt | variables.rs:24:14:24:14 | 1 | | -| variables.rs:24:9:24:10 | x3 | variables.rs:25:5:25:18 | ExprStmt | match, no-match | +| variables.rs:24:9:24:10 | x3 | variables.rs:25:5:25:18 | ExprStmt | match | | variables.rs:24:14:24:14 | 1 | variables.rs:24:9:24:10 | x3 | | | variables.rs:25:5:25:13 | PathExpr | variables.rs:25:15:25:16 | x3 | | | variables.rs:25:5:25:17 | CallExpr | variables.rs:26:5:27:15 | LetStmt | | | variables.rs:25:5:25:18 | ExprStmt | variables.rs:25:5:25:13 | PathExpr | | | variables.rs:25:15:25:16 | x3 | variables.rs:25:5:25:17 | CallExpr | | | variables.rs:26:5:27:15 | LetStmt | variables.rs:27:9:27:10 | x3 | | -| variables.rs:26:9:26:10 | x3 | variables.rs:28:5:28:18 | ExprStmt | match, no-match | +| variables.rs:26:9:26:10 | x3 | variables.rs:28:5:28:18 | ExprStmt | match | | variables.rs:27:9:27:10 | x3 | variables.rs:27:14:27:14 | 1 | | | variables.rs:27:9:27:14 | ... + ... | variables.rs:26:9:26:10 | x3 | | | variables.rs:27:14:27:14 | 1 | variables.rs:27:9:27:14 | ... + ... | | @@ -64,7 +64,7 @@ edges | variables.rs:31:1:39:1 | exit variable_shadow2 (normal) | variables.rs:31:1:39:1 | exit variable_shadow2 | | | variables.rs:31:23:39:1 | BlockExpr | variables.rs:31:1:39:1 | exit variable_shadow2 (normal) | | | variables.rs:32:5:32:17 | LetStmt | variables.rs:32:14:32:16 | "a" | | -| variables.rs:32:9:32:10 | x4 | variables.rs:33:5:33:18 | ExprStmt | match, no-match | +| variables.rs:32:9:32:10 | x4 | variables.rs:33:5:33:18 | ExprStmt | match | | variables.rs:32:14:32:16 | "a" | variables.rs:32:9:32:10 | x4 | | | variables.rs:33:5:33:13 | PathExpr | variables.rs:33:15:33:16 | x4 | | | variables.rs:33:5:33:17 | CallExpr | variables.rs:34:5:37:5 | ExprStmt | | @@ -73,7 +73,7 @@ edges | variables.rs:34:5:37:5 | BlockExpr | variables.rs:38:5:38:18 | ExprStmt | | | variables.rs:34:5:37:5 | ExprStmt | variables.rs:35:9:35:21 | LetStmt | | | variables.rs:35:9:35:21 | LetStmt | variables.rs:35:18:35:20 | "b" | | -| variables.rs:35:13:35:14 | x4 | variables.rs:36:9:36:22 | ExprStmt | match, no-match | +| variables.rs:35:13:35:14 | x4 | variables.rs:36:9:36:22 | ExprStmt | match | | variables.rs:35:18:35:20 | "b" | variables.rs:35:13:35:14 | x4 | | | variables.rs:36:9:36:17 | PathExpr | variables.rs:36:19:36:20 | x4 | | | variables.rs:36:9:36:21 | CallExpr | variables.rs:34:5:37:5 | BlockExpr | | @@ -87,7 +87,13 @@ edges | variables.rs:46:1:61:1 | exit let_pattern1 (normal) | variables.rs:46:1:61:1 | exit let_pattern1 | | | variables.rs:46:19:61:1 | BlockExpr | variables.rs:46:1:61:1 | exit let_pattern1 (normal) | | | variables.rs:47:5:56:47 | LetStmt | variables.rs:56:11:56:13 | "a" | | -| variables.rs:47:9:56:5 | TuplePat | variables.rs:57:5:57:18 | ExprStmt | match | +| variables.rs:47:9:56:5 | TuplePat | variables.rs:48:9:51:9 | TuplePat | match | +| variables.rs:48:9:51:9 | TuplePat | variables.rs:49:13:49:14 | a1 | match | +| variables.rs:49:13:49:14 | a1 | variables.rs:50:13:50:14 | b1 | match | +| variables.rs:50:13:50:14 | b1 | variables.rs:52:9:55:9 | RecordPat | match | +| variables.rs:52:9:55:9 | RecordPat | variables.rs:53:13:53:13 | x | match | +| variables.rs:53:13:53:13 | x | variables.rs:54:13:54:13 | y | match | +| variables.rs:54:13:54:13 | y | variables.rs:57:5:57:18 | ExprStmt | match | | variables.rs:56:9:56:46 | TupleExpr | variables.rs:47:9:56:5 | TuplePat | | | variables.rs:56:10:56:19 | TupleExpr | variables.rs:56:33:56:35 | "x" | | | variables.rs:56:11:56:13 | "a" | variables.rs:56:16:56:18 | "b" | | @@ -115,12 +121,14 @@ edges | variables.rs:63:1:71:1 | exit let_pattern2 (normal) | variables.rs:63:1:71:1 | exit let_pattern2 | | | variables.rs:63:19:71:1 | BlockExpr | variables.rs:63:1:71:1 | exit let_pattern2 (normal) | | | variables.rs:64:5:64:38 | LetStmt | variables.rs:64:25:64:27 | "a" | | -| variables.rs:64:9:64:10 | p1 | variables.rs:65:5:68:11 | LetStmt | match, no-match | +| variables.rs:64:9:64:10 | p1 | variables.rs:65:5:68:11 | LetStmt | match | | variables.rs:64:14:64:37 | RecordExpr | variables.rs:64:9:64:10 | p1 | | | variables.rs:64:25:64:27 | "a" | variables.rs:64:33:64:35 | "b" | | | variables.rs:64:33:64:35 | "b" | variables.rs:64:14:64:37 | RecordExpr | | | variables.rs:65:5:68:11 | LetStmt | variables.rs:68:9:68:10 | p1 | | -| variables.rs:65:9:68:5 | RecordPat | variables.rs:69:5:69:18 | ExprStmt | match | +| variables.rs:65:9:68:5 | RecordPat | variables.rs:66:12:66:13 | a2 | match | +| variables.rs:66:12:66:13 | a2 | variables.rs:67:12:67:13 | b2 | match | +| variables.rs:67:12:67:13 | b2 | variables.rs:69:5:69:18 | ExprStmt | match | | variables.rs:68:9:68:10 | p1 | variables.rs:65:9:68:5 | RecordPat | | | variables.rs:69:5:69:13 | PathExpr | variables.rs:69:15:69:16 | a2 | | | variables.rs:69:5:69:17 | CallExpr | variables.rs:70:5:70:18 | ExprStmt | | @@ -134,7 +142,7 @@ edges | variables.rs:73:1:80:1 | exit let_pattern3 (normal) | variables.rs:73:1:80:1 | exit let_pattern3 | | | variables.rs:73:19:80:1 | BlockExpr | variables.rs:73:1:80:1 | exit let_pattern3 (normal) | | | variables.rs:74:5:74:42 | LetStmt | variables.rs:74:14:74:17 | PathExpr | | -| variables.rs:74:9:74:10 | s1 | variables.rs:76:8:77:12 | LetExpr | match, no-match | +| variables.rs:74:9:74:10 | s1 | variables.rs:76:8:77:12 | LetExpr | match | | variables.rs:74:14:74:17 | PathExpr | variables.rs:74:19:74:30 | PathExpr | | | variables.rs:74:14:74:41 | CallExpr | variables.rs:74:9:74:10 | s1 | | | variables.rs:74:19:74:30 | PathExpr | variables.rs:74:32:74:39 | "Hello!" | | @@ -143,7 +151,8 @@ edges | variables.rs:76:5:79:5 | IfExpr | variables.rs:73:19:80:1 | BlockExpr | | | variables.rs:76:8:77:12 | LetExpr | variables.rs:76:12:76:23 | TupleStructPat | | | variables.rs:76:12:76:23 | TupleStructPat | variables.rs:76:5:79:5 | IfExpr | no-match | -| variables.rs:76:12:76:23 | TupleStructPat | variables.rs:78:9:78:22 | ExprStmt | match | +| variables.rs:76:12:76:23 | TupleStructPat | variables.rs:76:17:76:22 | s2 | match | +| variables.rs:76:17:76:22 | s2 | variables.rs:78:9:78:22 | ExprStmt | match | | variables.rs:77:14:79:5 | BlockExpr | variables.rs:76:5:79:5 | IfExpr | | | variables.rs:78:9:78:17 | PathExpr | variables.rs:78:19:78:20 | s2 | | | variables.rs:78:9:78:21 | CallExpr | variables.rs:77:14:79:5 | BlockExpr | | @@ -153,8 +162,9 @@ edges | variables.rs:82:1:88:1 | exit let_pattern4 (normal) | variables.rs:82:1:88:1 | exit let_pattern4 | | | variables.rs:82:19:88:1 | BlockExpr | variables.rs:82:1:88:1 | exit let_pattern4 (normal) | | | variables.rs:83:5:86:10 | LetStmt | variables.rs:83:34:83:37 | PathExpr | | +| variables.rs:83:9:83:16 | TupleStructPat | variables.rs:83:14:83:15 | x5 | match | | variables.rs:83:9:83:16 | TupleStructPat | variables.rs:85:13:85:19 | MacroExpr | no-match | -| variables.rs:83:9:83:16 | TupleStructPat | variables.rs:87:5:87:18 | ExprStmt | match | +| variables.rs:83:14:83:15 | x5 | variables.rs:87:5:87:18 | ExprStmt | match | | variables.rs:83:34:83:37 | PathExpr | variables.rs:83:39:83:42 | "x5" | | | variables.rs:83:34:83:43 | CallExpr | variables.rs:83:9:83:16 | TupleStructPat | | | variables.rs:83:39:83:42 | "x5" | variables.rs:83:34:83:43 | CallExpr | | @@ -167,7 +177,7 @@ edges | variables.rs:90:1:97:1 | exit let_pattern5 (normal) | variables.rs:90:1:97:1 | exit let_pattern5 | | | variables.rs:90:19:97:1 | BlockExpr | variables.rs:90:1:97:1 | exit let_pattern5 (normal) | | | variables.rs:91:5:91:42 | LetStmt | variables.rs:91:14:91:17 | PathExpr | | -| variables.rs:91:9:91:10 | s1 | variables.rs:93:11:94:12 | LetExpr | match, no-match | +| variables.rs:91:9:91:10 | s1 | variables.rs:93:11:94:12 | LetExpr | match | | variables.rs:91:14:91:17 | PathExpr | variables.rs:91:19:91:30 | PathExpr | | | variables.rs:91:14:91:41 | CallExpr | variables.rs:91:9:91:10 | s1 | | | variables.rs:91:19:91:30 | PathExpr | variables.rs:91:32:91:39 | "Hello!" | | @@ -176,7 +186,8 @@ edges | variables.rs:93:5:96:5 | WhileExpr | variables.rs:90:19:97:1 | BlockExpr | | | variables.rs:93:11:94:12 | LetExpr | variables.rs:93:15:93:26 | TupleStructPat | | | variables.rs:93:15:93:26 | TupleStructPat | variables.rs:93:5:96:5 | WhileExpr | no-match | -| variables.rs:93:15:93:26 | TupleStructPat | variables.rs:95:9:95:22 | ExprStmt | match | +| variables.rs:93:15:93:26 | TupleStructPat | variables.rs:93:20:93:25 | s2 | match | +| variables.rs:93:20:93:25 | s2 | variables.rs:95:9:95:22 | ExprStmt | match | | variables.rs:94:14:96:5 | BlockExpr | variables.rs:93:11:94:12 | LetExpr | | | variables.rs:95:9:95:17 | PathExpr | variables.rs:95:19:95:20 | s2 | | | variables.rs:95:9:95:21 | CallExpr | variables.rs:94:14:96:5 | BlockExpr | | @@ -186,23 +197,26 @@ edges | variables.rs:99:1:114:1 | exit match_pattern1 (normal) | variables.rs:99:1:114:1 | exit match_pattern1 | | | variables.rs:99:21:114:1 | BlockExpr | variables.rs:99:1:114:1 | exit match_pattern1 (normal) | | | variables.rs:100:5:100:21 | LetStmt | variables.rs:100:14:100:17 | PathExpr | | -| variables.rs:100:9:100:10 | x6 | variables.rs:101:5:101:16 | LetStmt | match, no-match | +| variables.rs:100:9:100:10 | x6 | variables.rs:101:5:101:16 | LetStmt | match | | variables.rs:100:14:100:17 | PathExpr | variables.rs:100:19:100:19 | 5 | | | variables.rs:100:14:100:20 | CallExpr | variables.rs:100:9:100:10 | x6 | | | variables.rs:100:19:100:19 | 5 | variables.rs:100:14:100:20 | CallExpr | | | variables.rs:101:5:101:16 | LetStmt | variables.rs:101:14:101:15 | 10 | | -| variables.rs:101:9:101:10 | y1 | variables.rs:103:5:111:5 | ExprStmt | match, no-match | +| variables.rs:101:9:101:10 | y1 | variables.rs:103:5:111:5 | ExprStmt | match | | variables.rs:101:14:101:15 | 10 | variables.rs:101:9:101:10 | y1 | | | variables.rs:103:5:111:5 | ExprStmt | variables.rs:103:11:103:12 | x6 | | | variables.rs:103:5:111:5 | MatchExpr | variables.rs:113:5:113:18 | ExprStmt | | | variables.rs:103:11:103:12 | x6 | variables.rs:104:9:104:16 | TupleStructPat | | -| variables.rs:104:9:104:16 | TupleStructPat | variables.rs:104:21:104:29 | PathExpr | match | +| variables.rs:104:9:104:16 | TupleStructPat | variables.rs:104:14:104:15 | LiteralPat | match | | variables.rs:104:9:104:16 | TupleStructPat | variables.rs:105:9:105:16 | TupleStructPat | no-match | +| variables.rs:104:14:104:15 | LiteralPat | variables.rs:104:21:104:29 | PathExpr | match | +| variables.rs:104:14:104:15 | LiteralPat | variables.rs:105:9:105:16 | TupleStructPat | no-match | | variables.rs:104:21:104:29 | PathExpr | variables.rs:104:31:104:38 | "Got 50" | | | variables.rs:104:21:104:39 | CallExpr | variables.rs:103:5:111:5 | MatchExpr | | | variables.rs:104:31:104:38 | "Got 50" | variables.rs:104:21:104:39 | CallExpr | | -| variables.rs:105:9:105:16 | TupleStructPat | variables.rs:108:13:108:21 | PathExpr | match | +| variables.rs:105:9:105:16 | TupleStructPat | variables.rs:105:14:105:15 | y1 | match | | variables.rs:105:9:105:16 | TupleStructPat | variables.rs:110:9:110:12 | None | no-match | +| variables.rs:105:14:105:15 | y1 | variables.rs:108:13:108:21 | PathExpr | match | | variables.rs:107:9:109:9 | BlockExpr | variables.rs:103:5:111:5 | MatchExpr | | | variables.rs:108:13:108:21 | PathExpr | variables.rs:108:23:108:24 | y1 | | | variables.rs:108:13:108:25 | CallExpr | variables.rs:107:9:109:9 | BlockExpr | | @@ -219,7 +233,7 @@ edges | variables.rs:116:1:141:1 | exit match_pattern2 (normal) | variables.rs:116:1:141:1 | exit match_pattern2 | | | variables.rs:116:21:141:1 | BlockExpr | variables.rs:116:1:141:1 | exit match_pattern2 (normal) | | | variables.rs:117:5:117:36 | LetStmt | variables.rs:117:20:117:20 | 2 | | -| variables.rs:117:9:117:15 | numbers | variables.rs:119:5:129:5 | ExprStmt | match, no-match | +| variables.rs:117:9:117:15 | numbers | variables.rs:119:5:129:5 | ExprStmt | match | | variables.rs:117:19:117:35 | TupleExpr | variables.rs:117:9:117:15 | numbers | | | variables.rs:117:20:117:20 | 2 | variables.rs:117:23:117:23 | 4 | | | variables.rs:117:23:117:23 | 4 | variables.rs:117:26:117:26 | 8 | | @@ -229,7 +243,12 @@ edges | variables.rs:119:5:129:5 | ExprStmt | variables.rs:119:11:119:17 | numbers | | | variables.rs:119:5:129:5 | MatchExpr | variables.rs:131:11:131:17 | numbers | | | variables.rs:119:11:119:17 | numbers | variables.rs:120:9:124:9 | TuplePat | | -| variables.rs:120:9:124:9 | TuplePat | variables.rs:125:13:125:29 | ExprStmt | match | +| variables.rs:120:9:124:9 | TuplePat | variables.rs:121:13:121:17 | first | match | +| variables.rs:121:13:121:17 | first | variables.rs:121:20:121:20 | WildcardPat | match | +| variables.rs:121:20:121:20 | WildcardPat | variables.rs:122:13:122:17 | third | match | +| variables.rs:122:13:122:17 | third | variables.rs:122:20:122:20 | WildcardPat | match | +| variables.rs:122:20:122:20 | WildcardPat | variables.rs:123:13:123:17 | fifth | match | +| variables.rs:123:13:123:17 | fifth | variables.rs:125:13:125:29 | ExprStmt | match | | variables.rs:124:14:128:9 | BlockExpr | variables.rs:119:5:129:5 | MatchExpr | | | variables.rs:125:13:125:21 | PathExpr | variables.rs:125:23:125:27 | first | | | variables.rs:125:13:125:28 | CallExpr | variables.rs:126:13:126:29 | ExprStmt | | @@ -245,7 +264,10 @@ edges | variables.rs:127:23:127:27 | fifth | variables.rs:127:13:127:28 | CallExpr | | | variables.rs:131:5:140:5 | MatchExpr | variables.rs:116:21:141:1 | BlockExpr | | | variables.rs:131:11:131:17 | numbers | variables.rs:132:9:136:9 | TuplePat | | -| variables.rs:132:9:136:9 | TuplePat | variables.rs:137:13:137:29 | ExprStmt | match | +| variables.rs:132:9:136:9 | TuplePat | variables.rs:133:13:133:17 | first | match | +| variables.rs:133:13:133:17 | first | variables.rs:134:13:134:14 | RestPat | match | +| variables.rs:134:13:134:14 | RestPat | variables.rs:135:13:135:16 | last | match | +| variables.rs:135:13:135:16 | last | variables.rs:137:13:137:29 | ExprStmt | match | | variables.rs:136:14:139:9 | BlockExpr | variables.rs:131:5:140:5 | MatchExpr | | | variables.rs:137:13:137:21 | PathExpr | variables.rs:137:23:137:27 | first | | | variables.rs:137:13:137:28 | CallExpr | variables.rs:138:13:138:28 | ExprStmt | | @@ -259,13 +281,15 @@ edges | variables.rs:143:1:151:1 | exit match_pattern3 (normal) | variables.rs:143:1:151:1 | exit match_pattern3 | | | variables.rs:143:21:151:1 | BlockExpr | variables.rs:143:1:151:1 | exit match_pattern3 (normal) | | | variables.rs:144:5:144:38 | LetStmt | variables.rs:144:25:144:27 | "x" | | -| variables.rs:144:9:144:10 | p2 | variables.rs:146:11:146:12 | p2 | match, no-match | +| variables.rs:144:9:144:10 | p2 | variables.rs:146:11:146:12 | p2 | match | | variables.rs:144:14:144:37 | RecordExpr | variables.rs:144:9:144:10 | p2 | | | variables.rs:144:25:144:27 | "x" | variables.rs:144:33:144:35 | "y" | | | variables.rs:144:33:144:35 | "y" | variables.rs:144:14:144:37 | RecordExpr | | | variables.rs:146:5:150:5 | MatchExpr | variables.rs:143:21:151:1 | BlockExpr | | | variables.rs:146:11:146:12 | p2 | variables.rs:147:9:149:9 | RecordPat | | -| variables.rs:147:9:149:9 | RecordPat | variables.rs:149:14:149:22 | PathExpr | match | +| variables.rs:147:9:149:9 | RecordPat | variables.rs:148:16:148:17 | x7 | match | +| variables.rs:148:16:148:17 | x7 | variables.rs:148:20:148:21 | RestPat | match | +| variables.rs:148:20:148:21 | RestPat | variables.rs:149:14:149:22 | PathExpr | match | | variables.rs:149:14:149:22 | PathExpr | variables.rs:149:24:149:25 | x7 | | | variables.rs:149:14:149:26 | CallExpr | variables.rs:146:5:150:5 | MatchExpr | | | variables.rs:149:24:149:25 | x7 | variables.rs:149:14:149:26 | CallExpr | | @@ -273,21 +297,35 @@ edges | variables.rs:157:1:170:1 | exit match_pattern4 (normal) | variables.rs:157:1:170:1 | exit match_pattern4 | | | variables.rs:157:21:170:1 | BlockExpr | variables.rs:157:1:170:1 | exit match_pattern4 (normal) | | | variables.rs:158:5:158:39 | LetStmt | variables.rs:158:36:158:36 | 0 | | -| variables.rs:158:9:158:11 | msg | variables.rs:160:11:160:13 | msg | match, no-match | +| variables.rs:158:9:158:11 | msg | variables.rs:160:11:160:13 | msg | match | | variables.rs:158:15:158:38 | RecordExpr | variables.rs:158:9:158:11 | msg | | | variables.rs:158:36:158:36 | 0 | variables.rs:158:15:158:38 | RecordExpr | | | variables.rs:160:5:169:5 | MatchExpr | variables.rs:157:21:170:1 | BlockExpr | | | variables.rs:160:11:160:13 | msg | variables.rs:161:9:163:9 | RecordPat | | -| variables.rs:161:9:163:9 | RecordPat | variables.rs:163:14:163:22 | PathExpr | match | +| variables.rs:161:9:163:9 | RecordPat | variables.rs:162:31:162:35 | RangePat | match | | variables.rs:161:9:163:9 | RecordPat | variables.rs:164:9:164:38 | RecordPat | no-match | +| variables.rs:162:17:162:35 | [match(true)] id_variable | variables.rs:163:14:163:22 | PathExpr | match | +| variables.rs:162:31:162:31 | LiteralPat | variables.rs:162:35:162:35 | LiteralPat | match | +| variables.rs:162:31:162:31 | LiteralPat | variables.rs:164:9:164:38 | RecordPat | no-match | +| variables.rs:162:31:162:35 | RangePat | variables.rs:162:31:162:31 | LiteralPat | match | +| variables.rs:162:31:162:35 | RangePat | variables.rs:164:9:164:38 | RecordPat | no-match | +| variables.rs:162:35:162:35 | LiteralPat | variables.rs:162:17:162:35 | [match(true)] id_variable | match | +| variables.rs:162:35:162:35 | LiteralPat | variables.rs:164:9:164:38 | RecordPat | no-match | | variables.rs:163:14:163:22 | PathExpr | variables.rs:163:24:163:34 | id_variable | | | variables.rs:163:14:163:35 | CallExpr | variables.rs:160:5:169:5 | MatchExpr | | | variables.rs:163:24:163:34 | id_variable | variables.rs:163:14:163:35 | CallExpr | | -| variables.rs:164:9:164:38 | RecordPat | variables.rs:165:13:165:52 | MacroExpr | match | +| variables.rs:164:9:164:38 | RecordPat | variables.rs:164:30:164:36 | RangePat | match | | variables.rs:164:9:164:38 | RecordPat | variables.rs:167:9:167:29 | RecordPat | no-match | +| variables.rs:164:30:164:31 | LiteralPat | variables.rs:164:35:164:36 | LiteralPat | match | +| variables.rs:164:30:164:31 | LiteralPat | variables.rs:167:9:167:29 | RecordPat | no-match | +| variables.rs:164:30:164:36 | RangePat | variables.rs:164:30:164:31 | LiteralPat | match | +| variables.rs:164:30:164:36 | RangePat | variables.rs:167:9:167:29 | RecordPat | no-match | +| variables.rs:164:35:164:36 | LiteralPat | variables.rs:165:13:165:52 | MacroExpr | match | +| variables.rs:164:35:164:36 | LiteralPat | variables.rs:167:9:167:29 | RecordPat | no-match | | variables.rs:164:43:166:9 | BlockExpr | variables.rs:160:5:169:5 | MatchExpr | | | variables.rs:165:13:165:52 | MacroExpr | variables.rs:164:43:166:9 | BlockExpr | | -| variables.rs:167:9:167:29 | RecordPat | variables.rs:168:13:168:21 | PathExpr | match | +| variables.rs:167:9:167:29 | RecordPat | variables.rs:167:26:167:27 | id | match | +| variables.rs:167:26:167:27 | id | variables.rs:168:13:168:21 | PathExpr | match | | variables.rs:168:13:168:21 | PathExpr | variables.rs:168:23:168:24 | id | | | variables.rs:168:13:168:25 | CallExpr | variables.rs:160:5:169:5 | MatchExpr | | | variables.rs:168:23:168:24 | id | variables.rs:168:13:168:25 | CallExpr | | @@ -295,13 +333,18 @@ edges | variables.rs:177:1:183:1 | exit match_pattern5 (normal) | variables.rs:177:1:183:1 | exit match_pattern5 | | | variables.rs:177:21:183:1 | BlockExpr | variables.rs:177:1:183:1 | exit match_pattern5 (normal) | | | variables.rs:178:5:178:34 | LetStmt | variables.rs:178:18:178:29 | PathExpr | | -| variables.rs:178:9:178:14 | either | variables.rs:179:11:179:16 | either | match, no-match | +| variables.rs:178:9:178:14 | either | variables.rs:179:11:179:16 | either | match | | variables.rs:178:18:178:29 | PathExpr | variables.rs:178:31:178:32 | 32 | | | variables.rs:178:18:178:33 | CallExpr | variables.rs:178:9:178:14 | either | | | variables.rs:178:31:178:32 | 32 | variables.rs:178:18:178:33 | CallExpr | | | variables.rs:179:5:182:5 | MatchExpr | variables.rs:177:21:183:1 | BlockExpr | | -| variables.rs:179:11:179:16 | either | variables.rs:180:9:180:44 | OrPat | | -| variables.rs:180:9:180:44 | OrPat | variables.rs:181:16:181:24 | PathExpr | match | +| variables.rs:179:11:179:16 | either | variables.rs:180:9:180:24 | TupleStructPat | | +| variables.rs:180:9:180:24 | TupleStructPat | variables.rs:180:22:180:23 | a3 | match | +| variables.rs:180:9:180:24 | TupleStructPat | variables.rs:180:28:180:44 | TupleStructPat | no-match | +| variables.rs:180:9:180:44 | [match(true)] OrPat | variables.rs:181:16:181:24 | PathExpr | match | +| variables.rs:180:22:180:23 | a3 | variables.rs:180:9:180:44 | [match(true)] OrPat | match | +| variables.rs:180:28:180:44 | TupleStructPat | variables.rs:180:42:180:43 | a3 | match | +| variables.rs:180:42:180:43 | a3 | variables.rs:180:9:180:44 | [match(true)] OrPat | match | | variables.rs:181:16:181:24 | PathExpr | variables.rs:181:26:181:27 | a3 | | | variables.rs:181:16:181:28 | CallExpr | variables.rs:179:5:182:5 | MatchExpr | | | variables.rs:181:26:181:27 | a3 | variables.rs:181:16:181:28 | CallExpr | | @@ -309,27 +352,54 @@ edges | variables.rs:191:1:205:1 | exit match_pattern6 (normal) | variables.rs:191:1:205:1 | exit match_pattern6 | | | variables.rs:191:21:205:1 | BlockExpr | variables.rs:191:1:205:1 | exit match_pattern6 (normal) | | | variables.rs:192:5:192:37 | LetStmt | variables.rs:192:14:192:32 | PathExpr | | -| variables.rs:192:9:192:10 | tv | variables.rs:193:5:196:5 | ExprStmt | match, no-match | +| variables.rs:192:9:192:10 | tv | variables.rs:193:5:196:5 | ExprStmt | match | | variables.rs:192:14:192:32 | PathExpr | variables.rs:192:34:192:35 | 62 | | | variables.rs:192:14:192:36 | CallExpr | variables.rs:192:9:192:10 | tv | | | variables.rs:192:34:192:35 | 62 | variables.rs:192:14:192:36 | CallExpr | | | variables.rs:193:5:196:5 | ExprStmt | variables.rs:193:11:193:12 | tv | | | variables.rs:193:5:196:5 | MatchExpr | variables.rs:197:5:200:5 | ExprStmt | | -| variables.rs:193:11:193:12 | tv | variables.rs:194:9:194:81 | OrPat | | -| variables.rs:194:9:194:81 | OrPat | variables.rs:195:16:195:24 | PathExpr | match | +| variables.rs:193:11:193:12 | tv | variables.rs:194:9:194:30 | TupleStructPat | | +| variables.rs:194:9:194:30 | TupleStructPat | variables.rs:194:28:194:29 | a4 | match | +| variables.rs:194:9:194:30 | TupleStructPat | variables.rs:194:34:194:56 | TupleStructPat | no-match | +| variables.rs:194:9:194:81 | [match(true)] OrPat | variables.rs:195:16:195:24 | PathExpr | match | +| variables.rs:194:28:194:29 | a4 | variables.rs:194:9:194:81 | [match(true)] OrPat | match | +| variables.rs:194:34:194:56 | TupleStructPat | variables.rs:194:54:194:55 | a4 | match | +| variables.rs:194:34:194:56 | TupleStructPat | variables.rs:194:60:194:81 | TupleStructPat | no-match | +| variables.rs:194:54:194:55 | a4 | variables.rs:194:9:194:81 | [match(true)] OrPat | match | +| variables.rs:194:60:194:81 | TupleStructPat | variables.rs:194:79:194:80 | a4 | match | +| variables.rs:194:79:194:80 | a4 | variables.rs:194:9:194:81 | [match(true)] OrPat | match | | variables.rs:195:16:195:24 | PathExpr | variables.rs:195:26:195:27 | a4 | | | variables.rs:195:16:195:28 | CallExpr | variables.rs:193:5:196:5 | MatchExpr | | | variables.rs:195:26:195:27 | a4 | variables.rs:195:16:195:28 | CallExpr | | | variables.rs:197:5:200:5 | ExprStmt | variables.rs:197:11:197:12 | tv | | | variables.rs:197:5:200:5 | MatchExpr | variables.rs:201:11:201:12 | tv | | -| variables.rs:197:11:197:12 | tv | variables.rs:198:9:198:83 | OrPat | | -| variables.rs:198:9:198:83 | OrPat | variables.rs:199:16:199:24 | PathExpr | match | +| variables.rs:197:11:197:12 | tv | variables.rs:198:10:198:31 | TupleStructPat | | +| variables.rs:198:9:198:83 | [match(true)] OrPat | variables.rs:199:16:199:24 | PathExpr | match | +| variables.rs:198:10:198:31 | TupleStructPat | variables.rs:198:29:198:30 | a5 | match | +| variables.rs:198:10:198:31 | TupleStructPat | variables.rs:198:35:198:57 | TupleStructPat | no-match | +| variables.rs:198:10:198:57 | [match(false)] OrPat | variables.rs:198:62:198:83 | TupleStructPat | no-match | +| variables.rs:198:10:198:57 | [match(true)] OrPat | variables.rs:198:9:198:83 | [match(true)] OrPat | match | +| variables.rs:198:29:198:30 | a5 | variables.rs:198:10:198:57 | [match(true)] OrPat | match | +| variables.rs:198:35:198:57 | TupleStructPat | variables.rs:198:10:198:57 | [match(false)] OrPat | no-match | +| variables.rs:198:35:198:57 | TupleStructPat | variables.rs:198:55:198:56 | a5 | match | +| variables.rs:198:55:198:56 | a5 | variables.rs:198:10:198:57 | [match(true)] OrPat | match | +| variables.rs:198:62:198:83 | TupleStructPat | variables.rs:198:81:198:82 | a5 | match | +| variables.rs:198:81:198:82 | a5 | variables.rs:198:9:198:83 | [match(true)] OrPat | match | | variables.rs:199:16:199:24 | PathExpr | variables.rs:199:26:199:27 | a5 | | | variables.rs:199:16:199:28 | CallExpr | variables.rs:197:5:200:5 | MatchExpr | | | variables.rs:199:26:199:27 | a5 | variables.rs:199:16:199:28 | CallExpr | | | variables.rs:201:5:204:5 | MatchExpr | variables.rs:191:21:205:1 | BlockExpr | | -| variables.rs:201:11:201:12 | tv | variables.rs:202:9:202:83 | OrPat | | -| variables.rs:202:9:202:83 | OrPat | variables.rs:203:16:203:24 | PathExpr | match | +| variables.rs:201:11:201:12 | tv | variables.rs:202:9:202:30 | TupleStructPat | | +| variables.rs:202:9:202:30 | TupleStructPat | variables.rs:202:28:202:29 | a6 | match | +| variables.rs:202:9:202:30 | TupleStructPat | variables.rs:202:35:202:57 | TupleStructPat | no-match | +| variables.rs:202:9:202:83 | [match(true)] OrPat | variables.rs:203:16:203:24 | PathExpr | match | +| variables.rs:202:28:202:29 | a6 | variables.rs:202:9:202:83 | [match(true)] OrPat | match | +| variables.rs:202:35:202:57 | TupleStructPat | variables.rs:202:55:202:56 | a6 | match | +| variables.rs:202:35:202:57 | TupleStructPat | variables.rs:202:61:202:82 | TupleStructPat | no-match | +| variables.rs:202:35:202:82 | [match(true)] OrPat | variables.rs:202:9:202:83 | [match(true)] OrPat | match | +| variables.rs:202:55:202:56 | a6 | variables.rs:202:35:202:82 | [match(true)] OrPat | match | +| variables.rs:202:61:202:82 | TupleStructPat | variables.rs:202:80:202:81 | a6 | match | +| variables.rs:202:80:202:81 | a6 | variables.rs:202:35:202:82 | [match(true)] OrPat | match | | variables.rs:203:16:203:24 | PathExpr | variables.rs:203:26:203:27 | a6 | | | variables.rs:203:16:203:28 | CallExpr | variables.rs:201:5:204:5 | MatchExpr | | | variables.rs:203:26:203:27 | a6 | variables.rs:203:16:203:28 | CallExpr | | @@ -337,14 +407,20 @@ edges | variables.rs:207:1:215:1 | exit match_pattern7 (normal) | variables.rs:207:1:215:1 | exit match_pattern7 | | | variables.rs:207:21:215:1 | BlockExpr | variables.rs:207:1:215:1 | exit match_pattern7 (normal) | | | variables.rs:208:5:208:34 | LetStmt | variables.rs:208:18:208:29 | PathExpr | | -| variables.rs:208:9:208:14 | either | variables.rs:209:11:209:16 | either | match, no-match | +| variables.rs:208:9:208:14 | either | variables.rs:209:11:209:16 | either | match | | variables.rs:208:18:208:29 | PathExpr | variables.rs:208:31:208:32 | 32 | | | variables.rs:208:18:208:33 | CallExpr | variables.rs:208:9:208:14 | either | | | variables.rs:208:31:208:32 | 32 | variables.rs:208:18:208:33 | CallExpr | | | variables.rs:209:5:214:5 | MatchExpr | variables.rs:207:21:215:1 | BlockExpr | | -| variables.rs:209:11:209:16 | either | variables.rs:210:9:210:44 | OrPat | | -| variables.rs:210:9:210:44 | OrPat | variables.rs:211:16:211:17 | a7 | match | -| variables.rs:210:9:210:44 | OrPat | variables.rs:213:9:213:9 | WildcardPat | no-match | +| variables.rs:209:11:209:16 | either | variables.rs:210:9:210:24 | TupleStructPat | | +| variables.rs:210:9:210:24 | TupleStructPat | variables.rs:210:22:210:23 | a7 | match | +| variables.rs:210:9:210:24 | TupleStructPat | variables.rs:210:28:210:44 | TupleStructPat | no-match | +| variables.rs:210:9:210:44 | [match(false)] OrPat | variables.rs:213:9:213:9 | WildcardPat | no-match | +| variables.rs:210:9:210:44 | [match(true)] OrPat | variables.rs:211:16:211:17 | a7 | match | +| variables.rs:210:22:210:23 | a7 | variables.rs:210:9:210:44 | [match(true)] OrPat | match | +| variables.rs:210:28:210:44 | TupleStructPat | variables.rs:210:9:210:44 | [match(false)] OrPat | no-match | +| variables.rs:210:28:210:44 | TupleStructPat | variables.rs:210:42:210:43 | a7 | match | +| variables.rs:210:42:210:43 | a7 | variables.rs:210:9:210:44 | [match(true)] OrPat | match | | variables.rs:211:16:211:17 | a7 | variables.rs:211:21:211:21 | 0 | | | variables.rs:211:16:211:21 | ... > ... | variables.rs:212:16:212:24 | PathExpr | true | | variables.rs:211:16:211:21 | ... > ... | variables.rs:213:9:213:9 | WildcardPat | false | @@ -358,14 +434,21 @@ edges | variables.rs:217:1:232:1 | exit match_pattern8 (normal) | variables.rs:217:1:232:1 | exit match_pattern8 | | | variables.rs:217:21:232:1 | BlockExpr | variables.rs:217:1:232:1 | exit match_pattern8 (normal) | | | variables.rs:218:5:218:34 | LetStmt | variables.rs:218:18:218:29 | PathExpr | | -| variables.rs:218:9:218:14 | either | variables.rs:220:11:220:16 | either | match, no-match | +| variables.rs:218:9:218:14 | either | variables.rs:220:11:220:16 | either | match | | variables.rs:218:18:218:29 | PathExpr | variables.rs:218:31:218:32 | 32 | | | variables.rs:218:18:218:33 | CallExpr | variables.rs:218:9:218:14 | either | | | variables.rs:218:31:218:32 | 32 | variables.rs:218:18:218:33 | CallExpr | | | variables.rs:220:5:231:5 | MatchExpr | variables.rs:217:21:232:1 | BlockExpr | | -| variables.rs:220:11:220:16 | either | variables.rs:221:9:222:52 | e | | -| variables.rs:221:9:222:52 | e | variables.rs:224:13:224:27 | ExprStmt | match | -| variables.rs:221:9:222:52 | e | variables.rs:230:9:230:9 | WildcardPat | no-match | +| variables.rs:220:11:220:16 | either | variables.rs:222:14:222:30 | TupleStructPat | | +| variables.rs:221:9:222:52 | [match(true)] e | variables.rs:224:13:224:27 | ExprStmt | match | +| variables.rs:222:14:222:30 | TupleStructPat | variables.rs:222:27:222:29 | a11 | match | +| variables.rs:222:14:222:30 | TupleStructPat | variables.rs:222:34:222:51 | TupleStructPat | no-match | +| variables.rs:222:14:222:51 | [match(false)] OrPat | variables.rs:230:9:230:9 | WildcardPat | no-match | +| variables.rs:222:14:222:51 | [match(true)] OrPat | variables.rs:221:9:222:52 | [match(true)] e | match | +| variables.rs:222:27:222:29 | a11 | variables.rs:222:14:222:51 | [match(true)] OrPat | match | +| variables.rs:222:34:222:51 | TupleStructPat | variables.rs:222:14:222:51 | [match(false)] OrPat | no-match | +| variables.rs:222:34:222:51 | TupleStructPat | variables.rs:222:48:222:50 | a11 | match | +| variables.rs:222:48:222:50 | a11 | variables.rs:222:14:222:51 | [match(true)] OrPat | match | | variables.rs:223:12:229:9 | BlockExpr | variables.rs:220:5:231:5 | MatchExpr | | | variables.rs:224:13:224:21 | PathExpr | variables.rs:224:23:224:25 | a11 | | | variables.rs:224:13:224:26 | CallExpr | variables.rs:225:16:226:15 | LetExpr | | @@ -374,7 +457,8 @@ edges | variables.rs:225:13:228:13 | IfExpr | variables.rs:223:12:229:9 | BlockExpr | | | variables.rs:225:16:226:15 | LetExpr | variables.rs:225:20:225:36 | TupleStructPat | | | variables.rs:225:20:225:36 | TupleStructPat | variables.rs:225:13:228:13 | IfExpr | no-match | -| variables.rs:225:20:225:36 | TupleStructPat | variables.rs:227:17:227:32 | ExprStmt | match | +| variables.rs:225:20:225:36 | TupleStructPat | variables.rs:225:33:225:35 | a12 | match | +| variables.rs:225:33:225:35 | a12 | variables.rs:227:17:227:32 | ExprStmt | match | | variables.rs:226:17:228:13 | BlockExpr | variables.rs:225:13:228:13 | IfExpr | | | variables.rs:227:17:227:25 | PathExpr | variables.rs:227:28:227:30 | a12 | | | variables.rs:227:17:227:31 | CallExpr | variables.rs:226:17:228:13 | BlockExpr | | @@ -387,22 +471,37 @@ edges | variables.rs:241:1:247:1 | exit match_pattern9 (normal) | variables.rs:241:1:247:1 | exit match_pattern9 | | | variables.rs:241:21:247:1 | BlockExpr | variables.rs:241:1:247:1 | exit match_pattern9 (normal) | | | variables.rs:242:5:242:36 | LetStmt | variables.rs:242:14:242:31 | PathExpr | | -| variables.rs:242:9:242:10 | fv | variables.rs:243:11:243:12 | fv | match, no-match | +| variables.rs:242:9:242:10 | fv | variables.rs:243:11:243:12 | fv | match | | variables.rs:242:14:242:31 | PathExpr | variables.rs:242:33:242:34 | 62 | | | variables.rs:242:14:242:35 | CallExpr | variables.rs:242:9:242:10 | fv | | | variables.rs:242:33:242:34 | 62 | variables.rs:242:14:242:35 | CallExpr | | | variables.rs:243:5:246:5 | MatchExpr | variables.rs:241:21:247:1 | BlockExpr | | -| variables.rs:243:11:243:12 | fv | variables.rs:244:9:244:109 | OrPat | | -| variables.rs:244:9:244:109 | OrPat | variables.rs:245:16:245:24 | PathExpr | match | +| variables.rs:243:11:243:12 | fv | variables.rs:244:9:244:30 | TupleStructPat | | +| variables.rs:244:9:244:30 | TupleStructPat | variables.rs:244:27:244:29 | a13 | match | +| variables.rs:244:9:244:30 | TupleStructPat | variables.rs:244:35:244:57 | TupleStructPat | no-match | +| variables.rs:244:9:244:109 | [match(true)] OrPat | variables.rs:245:16:245:24 | PathExpr | match | +| variables.rs:244:27:244:29 | a13 | variables.rs:244:9:244:109 | [match(true)] OrPat | match | +| variables.rs:244:35:244:57 | TupleStructPat | variables.rs:244:54:244:56 | a13 | match | +| variables.rs:244:35:244:57 | TupleStructPat | variables.rs:244:61:244:82 | TupleStructPat | no-match | +| variables.rs:244:35:244:82 | [match(false)] OrPat | variables.rs:244:87:244:109 | TupleStructPat | no-match | +| variables.rs:244:35:244:82 | [match(true)] OrPat | variables.rs:244:9:244:109 | [match(true)] OrPat | match | +| variables.rs:244:54:244:56 | a13 | variables.rs:244:35:244:82 | [match(true)] OrPat | match | +| variables.rs:244:61:244:82 | TupleStructPat | variables.rs:244:35:244:82 | [match(false)] OrPat | no-match | +| variables.rs:244:61:244:82 | TupleStructPat | variables.rs:244:79:244:81 | a13 | match | +| variables.rs:244:79:244:81 | a13 | variables.rs:244:35:244:82 | [match(true)] OrPat | match | +| variables.rs:244:87:244:109 | TupleStructPat | variables.rs:244:106:244:108 | a13 | match | +| variables.rs:244:106:244:108 | a13 | variables.rs:244:9:244:109 | [match(true)] OrPat | match | | variables.rs:245:16:245:24 | PathExpr | variables.rs:245:26:245:28 | a13 | | | variables.rs:245:16:245:29 | CallExpr | variables.rs:243:5:246:5 | MatchExpr | | | variables.rs:245:26:245:28 | a13 | variables.rs:245:16:245:29 | CallExpr | | | variables.rs:249:1:258:1 | enter param_pattern1 | variables.rs:250:5:250:6 | a8 | | | variables.rs:249:1:258:1 | exit param_pattern1 (normal) | variables.rs:249:1:258:1 | exit param_pattern1 | | -| variables.rs:250:5:250:6 | a8 | variables.rs:250:5:250:12 | Param | match, no-match | +| variables.rs:250:5:250:6 | a8 | variables.rs:250:5:250:12 | Param | match | | variables.rs:250:5:250:12 | Param | variables.rs:251:5:254:5 | TuplePat | | -| variables.rs:251:5:254:5 | TuplePat | variables.rs:251:5:254:19 | Param | match, no-match | +| variables.rs:251:5:254:5 | TuplePat | variables.rs:252:9:252:10 | b3 | match | | variables.rs:251:5:254:19 | Param | variables.rs:255:5:255:18 | ExprStmt | | +| variables.rs:252:9:252:10 | b3 | variables.rs:253:9:253:10 | c1 | match | +| variables.rs:253:9:253:10 | c1 | variables.rs:251:5:254:19 | Param | match | | variables.rs:254:28:258:1 | BlockExpr | variables.rs:249:1:258:1 | exit param_pattern1 (normal) | | | variables.rs:255:5:255:13 | PathExpr | variables.rs:255:15:255:16 | a8 | | | variables.rs:255:5:255:17 | CallExpr | variables.rs:256:5:256:18 | ExprStmt | | @@ -416,10 +515,15 @@ edges | variables.rs:257:5:257:17 | CallExpr | variables.rs:254:28:258:1 | BlockExpr | | | variables.rs:257:5:257:18 | ExprStmt | variables.rs:257:5:257:13 | PathExpr | | | variables.rs:257:15:257:16 | c1 | variables.rs:257:5:257:17 | CallExpr | | -| variables.rs:260:1:264:1 | enter param_pattern2 | variables.rs:261:5:261:42 | ParenPat | | +| variables.rs:260:1:264:1 | enter param_pattern2 | variables.rs:261:6:261:21 | TupleStructPat | | | variables.rs:260:1:264:1 | exit param_pattern2 (normal) | variables.rs:260:1:264:1 | exit param_pattern2 | | -| variables.rs:261:5:261:42 | ParenPat | variables.rs:261:5:261:50 | Param | match, no-match | | variables.rs:261:5:261:50 | Param | variables.rs:263:5:263:18 | ExprStmt | | +| variables.rs:261:6:261:21 | TupleStructPat | variables.rs:261:19:261:20 | a9 | match | +| variables.rs:261:6:261:21 | TupleStructPat | variables.rs:261:25:261:41 | TupleStructPat | no-match | +| variables.rs:261:6:261:41 | [match(true)] OrPat | variables.rs:261:5:261:50 | Param | match | +| variables.rs:261:19:261:20 | a9 | variables.rs:261:6:261:41 | [match(true)] OrPat | match | +| variables.rs:261:25:261:41 | TupleStructPat | variables.rs:261:39:261:40 | a9 | match | +| variables.rs:261:39:261:40 | a9 | variables.rs:261:6:261:41 | [match(true)] OrPat | match | | variables.rs:262:9:264:1 | BlockExpr | variables.rs:260:1:264:1 | exit param_pattern2 (normal) | | | variables.rs:263:5:263:13 | PathExpr | variables.rs:263:15:263:16 | a9 | | | variables.rs:263:5:263:17 | CallExpr | variables.rs:262:9:264:1 | BlockExpr | | @@ -429,7 +533,10 @@ edges | variables.rs:266:1:301:1 | exit destruct_assignment (normal) | variables.rs:266:1:301:1 | exit destruct_assignment | | | variables.rs:266:26:301:1 | BlockExpr | variables.rs:266:1:301:1 | exit destruct_assignment (normal) | | | variables.rs:267:5:271:18 | LetStmt | variables.rs:271:10:271:10 | 1 | | -| variables.rs:267:9:271:5 | TuplePat | variables.rs:272:5:272:19 | ExprStmt | match | +| variables.rs:267:9:271:5 | TuplePat | variables.rs:268:9:268:15 | a10 | match | +| variables.rs:268:9:268:15 | a10 | variables.rs:269:9:269:14 | b4 | match | +| variables.rs:269:9:269:14 | b4 | variables.rs:270:9:270:14 | c2 | match | +| variables.rs:270:9:270:14 | c2 | variables.rs:272:5:272:19 | ExprStmt | match | | variables.rs:271:9:271:17 | TupleExpr | variables.rs:267:9:271:5 | TuplePat | | | variables.rs:271:10:271:10 | 1 | variables.rs:271:13:271:13 | 2 | | | variables.rs:271:13:271:13 | 2 | variables.rs:271:16:271:16 | 3 | | @@ -473,7 +580,9 @@ edges | variables.rs:289:11:289:16 | TupleExpr | variables.rs:290:9:293:9 | TuplePat | | | variables.rs:289:12:289:12 | 4 | variables.rs:289:15:289:15 | 5 | | | variables.rs:289:15:289:15 | 5 | variables.rs:289:11:289:16 | TupleExpr | | -| variables.rs:290:9:293:9 | TuplePat | variables.rs:294:13:294:27 | ExprStmt | match | +| variables.rs:290:9:293:9 | TuplePat | variables.rs:291:13:291:15 | a10 | match | +| variables.rs:291:13:291:15 | a10 | variables.rs:292:13:292:14 | b4 | match | +| variables.rs:292:13:292:14 | b4 | variables.rs:294:13:294:27 | ExprStmt | match | | variables.rs:293:14:296:9 | BlockExpr | variables.rs:289:5:297:5 | MatchExpr | | | variables.rs:294:13:294:21 | PathExpr | variables.rs:294:23:294:25 | a10 | | | variables.rs:294:13:294:26 | CallExpr | variables.rs:295:13:295:26 | ExprStmt | | @@ -495,15 +604,15 @@ edges | variables.rs:303:1:318:1 | exit closure_variable (normal) | variables.rs:303:1:318:1 | exit closure_variable | | | variables.rs:303:23:318:1 | BlockExpr | variables.rs:303:1:318:1 | exit closure_variable (normal) | | | variables.rs:304:5:306:10 | LetStmt | variables.rs:305:9:306:9 | ClosureExpr | | -| variables.rs:304:9:304:23 | example_closure | variables.rs:307:5:308:27 | LetStmt | match, no-match | +| variables.rs:304:9:304:23 | example_closure | variables.rs:307:5:308:27 | LetStmt | match | | variables.rs:305:9:306:9 | ClosureExpr | variables.rs:304:9:304:23 | example_closure | | | variables.rs:305:9:306:9 | enter ClosureExpr | variables.rs:305:10:305:10 | x | | | variables.rs:305:9:306:9 | exit ClosureExpr (normal) | variables.rs:305:9:306:9 | exit ClosureExpr | | -| variables.rs:305:10:305:10 | x | variables.rs:305:10:305:15 | Param | match, no-match | +| variables.rs:305:10:305:10 | x | variables.rs:305:10:305:15 | Param | match | | variables.rs:305:10:305:15 | Param | variables.rs:306:9:306:9 | x | | | variables.rs:306:9:306:9 | x | variables.rs:305:9:306:9 | exit ClosureExpr (normal) | | | variables.rs:307:5:308:27 | LetStmt | variables.rs:308:9:308:23 | example_closure | | -| variables.rs:307:9:307:10 | n1 | variables.rs:309:5:309:18 | ExprStmt | match, no-match | +| variables.rs:307:9:307:10 | n1 | variables.rs:309:5:309:18 | ExprStmt | match | | variables.rs:308:9:308:23 | example_closure | variables.rs:308:25:308:25 | 5 | | | variables.rs:308:9:308:26 | CallExpr | variables.rs:307:9:307:10 | n1 | | | variables.rs:308:25:308:25 | 5 | variables.rs:308:9:308:26 | CallExpr | | @@ -515,15 +624,15 @@ edges | variables.rs:311:5:311:24 | CallExpr | variables.rs:312:5:314:10 | LetStmt | | | variables.rs:311:5:311:25 | ExprStmt | variables.rs:311:5:311:22 | PathExpr | | | variables.rs:312:5:314:10 | LetStmt | variables.rs:313:9:314:9 | ClosureExpr | | -| variables.rs:312:9:312:26 | immutable_variable | variables.rs:315:5:316:30 | LetStmt | match, no-match | +| variables.rs:312:9:312:26 | immutable_variable | variables.rs:315:5:316:30 | LetStmt | match | | variables.rs:313:9:314:9 | ClosureExpr | variables.rs:312:9:312:26 | immutable_variable | | | variables.rs:313:9:314:9 | enter ClosureExpr | variables.rs:313:10:313:10 | x | | | variables.rs:313:9:314:9 | exit ClosureExpr (normal) | variables.rs:313:9:314:9 | exit ClosureExpr | | -| variables.rs:313:10:313:10 | x | variables.rs:313:10:313:15 | Param | match, no-match | +| variables.rs:313:10:313:10 | x | variables.rs:313:10:313:15 | Param | match | | variables.rs:313:10:313:15 | Param | variables.rs:314:9:314:9 | x | | | variables.rs:314:9:314:9 | x | variables.rs:313:9:314:9 | exit ClosureExpr (normal) | | | variables.rs:315:5:316:30 | LetStmt | variables.rs:316:9:316:26 | immutable_variable | | -| variables.rs:315:9:315:10 | n2 | variables.rs:317:5:317:18 | ExprStmt | match, no-match | +| variables.rs:315:9:315:10 | n2 | variables.rs:317:5:317:18 | ExprStmt | match | | variables.rs:316:9:316:26 | immutable_variable | variables.rs:316:28:316:28 | 6 | | | variables.rs:316:9:316:29 | CallExpr | variables.rs:315:9:315:10 | n2 | | | variables.rs:316:28:316:28 | 6 | variables.rs:316:9:316:29 | CallExpr | | @@ -535,7 +644,7 @@ edges | variables.rs:320:1:327:1 | exit for_variable (normal) | variables.rs:320:1:327:1 | exit for_variable | | | variables.rs:320:19:327:1 | BlockExpr | variables.rs:320:1:327:1 | exit for_variable (normal) | | | variables.rs:321:5:321:42 | LetStmt | variables.rs:321:15:321:22 | "apples" | | -| variables.rs:321:9:321:9 | v | variables.rs:324:12:324:12 | v | match, no-match | +| variables.rs:321:9:321:9 | v | variables.rs:324:12:324:12 | v | match | | variables.rs:321:13:321:41 | RefExpr | variables.rs:321:9:321:9 | v | | | variables.rs:321:14:321:41 | ArrayExpr | variables.rs:321:13:321:41 | RefExpr | | | variables.rs:321:15:321:22 | "apples" | variables.rs:321:25:321:30 | "cake" | | @@ -554,7 +663,7 @@ edges | variables.rs:329:1:335:1 | exit add_assign (normal) | variables.rs:329:1:335:1 | exit add_assign | | | variables.rs:329:17:335:1 | BlockExpr | variables.rs:329:1:335:1 | exit add_assign (normal) | | | variables.rs:330:5:330:18 | LetStmt | variables.rs:330:17:330:17 | 0 | | -| variables.rs:330:9:330:13 | a | variables.rs:331:5:331:11 | ExprStmt | match, no-match | +| variables.rs:330:9:330:13 | a | variables.rs:331:5:331:11 | ExprStmt | match | | variables.rs:330:17:330:17 | 0 | variables.rs:330:9:330:13 | a | | | variables.rs:331:5:331:5 | a | variables.rs:331:10:331:10 | 1 | | | variables.rs:331:5:331:10 | ... += ... | variables.rs:332:5:332:17 | ExprStmt | | @@ -574,10 +683,10 @@ edges | variables.rs:337:1:343:1 | exit mutate (normal) | variables.rs:337:1:343:1 | exit mutate | | | variables.rs:337:13:343:1 | BlockExpr | variables.rs:337:1:343:1 | exit mutate (normal) | | | variables.rs:338:5:338:18 | LetStmt | variables.rs:338:17:338:17 | 1 | | -| variables.rs:338:9:338:13 | i | variables.rs:339:5:340:15 | LetStmt | match, no-match | +| variables.rs:338:9:338:13 | i | variables.rs:339:5:340:15 | LetStmt | match | | variables.rs:338:17:338:17 | 1 | variables.rs:338:9:338:13 | i | | | variables.rs:339:5:340:15 | LetStmt | variables.rs:340:14:340:14 | i | | -| variables.rs:339:9:339:13 | ref_i | variables.rs:341:5:341:15 | ExprStmt | match, no-match | +| variables.rs:339:9:339:13 | ref_i | variables.rs:341:5:341:15 | ExprStmt | match | | variables.rs:340:9:340:14 | RefExpr | variables.rs:339:9:339:13 | ref_i | | | variables.rs:340:14:340:14 | i | variables.rs:340:9:340:14 | RefExpr | | | variables.rs:341:5:341:10 | * ... | variables.rs:341:14:341:14 | 2 | | @@ -591,7 +700,7 @@ edges | variables.rs:342:15:342:15 | i | variables.rs:342:5:342:16 | CallExpr | | | variables.rs:345:1:349:1 | enter mutate_param | variables.rs:345:17:345:17 | x | | | variables.rs:345:1:349:1 | exit mutate_param (normal) | variables.rs:345:1:349:1 | exit mutate_param | | -| variables.rs:345:17:345:17 | x | variables.rs:345:17:345:28 | Param | match, no-match | +| variables.rs:345:17:345:17 | x | variables.rs:345:17:345:28 | Param | match | | variables.rs:345:17:345:28 | Param | variables.rs:346:5:348:11 | ExprStmt | | | variables.rs:345:31:349:1 | BlockExpr | variables.rs:345:1:349:1 | exit mutate_param (normal) | | | variables.rs:346:5:346:6 | * ... | variables.rs:347:10:347:10 | x | | @@ -607,7 +716,7 @@ edges | variables.rs:351:1:355:1 | exit mutate_arg (normal) | variables.rs:351:1:355:1 | exit mutate_arg | | | variables.rs:351:17:355:1 | BlockExpr | variables.rs:351:1:355:1 | exit mutate_arg (normal) | | | variables.rs:352:5:352:18 | LetStmt | variables.rs:352:17:352:17 | 2 | | -| variables.rs:352:9:352:13 | x | variables.rs:353:5:353:25 | ExprStmt | match, no-match | +| variables.rs:352:9:352:13 | x | variables.rs:353:5:353:25 | ExprStmt | match | | variables.rs:352:17:352:17 | 2 | variables.rs:352:9:352:13 | x | | | variables.rs:353:5:353:16 | PathExpr | variables.rs:353:23:353:23 | x | | | variables.rs:353:5:353:24 | CallExpr | variables.rs:354:5:354:17 | ExprStmt | | @@ -622,10 +731,10 @@ edges | variables.rs:357:1:363:1 | exit alias (normal) | variables.rs:357:1:363:1 | exit alias | | | variables.rs:357:12:363:1 | BlockExpr | variables.rs:357:1:363:1 | exit alias (normal) | | | variables.rs:358:5:358:18 | LetStmt | variables.rs:358:17:358:17 | 1 | | -| variables.rs:358:9:358:13 | x | variables.rs:359:5:360:15 | LetStmt | match, no-match | +| variables.rs:358:9:358:13 | x | variables.rs:359:5:360:15 | LetStmt | match | | variables.rs:358:17:358:17 | 1 | variables.rs:358:9:358:13 | x | | | variables.rs:359:5:360:15 | LetStmt | variables.rs:360:14:360:14 | x | | -| variables.rs:359:9:359:9 | y | variables.rs:361:5:361:11 | ExprStmt | match, no-match | +| variables.rs:359:9:359:9 | y | variables.rs:361:5:361:11 | ExprStmt | match | | variables.rs:360:9:360:14 | RefExpr | variables.rs:359:9:359:9 | y | | | variables.rs:360:14:360:14 | x | variables.rs:360:9:360:14 | RefExpr | | | variables.rs:361:5:361:6 | * ... | variables.rs:361:10:361:10 | 2 | | @@ -641,10 +750,10 @@ edges | variables.rs:365:1:373:1 | exit capture (normal) | variables.rs:365:1:373:1 | exit capture | | | variables.rs:365:14:373:1 | BlockExpr | variables.rs:365:1:373:1 | exit capture (normal) | | | variables.rs:366:5:366:19 | LetStmt | variables.rs:366:17:366:18 | 10 | | -| variables.rs:366:9:366:13 | x | variables.rs:367:5:370:6 | LetStmt | match, no-match | +| variables.rs:366:9:366:13 | x | variables.rs:367:5:370:6 | LetStmt | match | | variables.rs:366:17:366:18 | 10 | variables.rs:366:9:366:13 | x | | | variables.rs:367:5:370:6 | LetStmt | variables.rs:367:19:370:5 | ClosureExpr | | -| variables.rs:367:9:367:15 | cap | variables.rs:371:5:371:10 | ExprStmt | match, no-match | +| variables.rs:367:9:367:15 | cap | variables.rs:371:5:371:10 | ExprStmt | match | | variables.rs:367:19:370:5 | ClosureExpr | variables.rs:367:9:367:15 | cap | | | variables.rs:367:19:370:5 | enter ClosureExpr | variables.rs:368:9:368:21 | ExprStmt | | | variables.rs:367:19:370:5 | exit ClosureExpr (normal) | variables.rs:367:19:370:5 | exit ClosureExpr | | From 756affa4aaedfb8fbbc6e4b36402109683ede413 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 9 Oct 2024 19:51:17 +0200 Subject: [PATCH 067/217] Rust: Fix bugs in `LetExprTree` and `MethodCallExprTree` --- .../internal/ControlFlowGraphImpl.qll | 18 +++++++++++++----- .../library-tests/controlflow/Cfg.expected | 10 +++++++--- .../test/library-tests/variables/Cfg.expected | 14 ++++++++++---- 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index 471afaa920ea..6c0c257767a7 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -296,8 +296,14 @@ class ItemTree extends LeafTree, Item { } // `LetExpr` is a pre-order tree such that the pattern itself ends up // dominating successors in the graph in the same way that patterns do in // `match` expressions. -class LetExprTree extends StandardPreOrderTree instanceof LetExpr { - override AstNode getChildNode(int i) { i = 0 and result = super.getPat() } +class LetExprTree extends StandardPreOrderTree, LetExpr { + override AstNode getChildNode(int i) { + i = 0 and + result = this.getExpr() + or + i = 1 and + result = this.getPat() + } } class LetStmtTree extends PreOrderTree, LetStmt { @@ -479,10 +485,12 @@ class MatchExprTree extends PostOrderTree instanceof MatchExpr { } } -class MethodCallExprTree extends StandardPostOrderTree instanceof MethodCallExpr { +class MethodCallExprTree extends StandardPostOrderTree, MethodCallExpr { override AstNode getChildNode(int i) { - result = super.getReceiver() and - result = super.getArgList().getArg(i + 1) + i = 0 and + result = this.getReceiver() + or + result = this.getArgList().getArg(i + 1) } } diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 73f3e9d84123..0862f5f3415f 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -157,10 +157,12 @@ edges | test.rs:80:24:80:28 | RangeExpr | test.rs:80:13:80:20 | iter | | | test.rs:80:27:80:28 | 10 | test.rs:80:24:80:28 | RangeExpr | | | test.rs:81:9:85:9 | WhileExpr | test.rs:79:25:86:5 | BlockExpr | | -| test.rs:81:15:81:39 | LetExpr | test.rs:81:19:81:25 | TupleStructPat | | +| test.rs:81:15:81:39 | LetExpr | test.rs:81:29:81:32 | iter | | | test.rs:81:19:81:25 | TupleStructPat | test.rs:81:9:85:9 | WhileExpr | no-match | | test.rs:81:19:81:25 | TupleStructPat | test.rs:81:24:81:24 | x | match | | test.rs:81:24:81:24 | x | test.rs:82:17:82:17 | PathExpr | match | +| test.rs:81:29:81:32 | iter | test.rs:81:29:81:39 | MethodCallExpr | | +| test.rs:81:29:81:39 | MethodCallExpr | test.rs:81:19:81:25 | TupleStructPat | | | test.rs:81:41:85:9 | BlockExpr | test.rs:81:15:81:39 | LetExpr | | | test.rs:82:13:84:13 | IfExpr | test.rs:81:41:85:9 | BlockExpr | | | test.rs:82:17:82:17 | PathExpr | test.rs:82:21:82:21 | 5 | | @@ -233,10 +235,11 @@ edges | test.rs:113:25:113:38 | Param | test.rs:114:12:114:26 | LetExpr | | | test.rs:113:48:119:5 | BlockExpr | test.rs:113:5:119:5 | exit test_if_let_else (normal) | | | test.rs:114:9:118:9 | IfExpr | test.rs:113:48:119:5 | BlockExpr | | -| test.rs:114:12:114:26 | LetExpr | test.rs:114:16:114:22 | TupleStructPat | | +| test.rs:114:12:114:26 | LetExpr | test.rs:114:26:114:26 | a | | | test.rs:114:16:114:22 | TupleStructPat | test.rs:114:21:114:21 | n | match | | test.rs:114:16:114:22 | TupleStructPat | test.rs:117:13:117:13 | 0 | no-match | | test.rs:114:21:114:21 | n | test.rs:115:13:115:13 | n | match | +| test.rs:114:26:114:26 | a | test.rs:114:16:114:22 | TupleStructPat | | | test.rs:114:28:116:9 | BlockExpr | test.rs:114:9:118:9 | IfExpr | | | test.rs:115:13:115:13 | n | test.rs:114:28:116:9 | BlockExpr | | | test.rs:116:16:118:9 | BlockExpr | test.rs:114:9:118:9 | IfExpr | | @@ -248,10 +251,11 @@ edges | test.rs:121:43:126:5 | BlockExpr | test.rs:121:5:126:5 | exit test_if_let (normal) | | | test.rs:122:9:124:9 | ExprStmt | test.rs:122:12:122:26 | LetExpr | | | test.rs:122:9:124:9 | IfExpr | test.rs:125:9:125:9 | 0 | | -| test.rs:122:12:122:26 | LetExpr | test.rs:122:16:122:22 | TupleStructPat | | +| test.rs:122:12:122:26 | LetExpr | test.rs:122:26:122:26 | a | | | test.rs:122:16:122:22 | TupleStructPat | test.rs:122:9:124:9 | IfExpr | no-match | | test.rs:122:16:122:22 | TupleStructPat | test.rs:122:21:122:21 | n | match | | test.rs:122:21:122:21 | n | test.rs:123:13:123:13 | n | match | +| test.rs:122:26:122:26 | a | test.rs:122:16:122:22 | TupleStructPat | | | test.rs:122:28:124:9 | BlockExpr | test.rs:122:9:124:9 | IfExpr | | | test.rs:123:13:123:13 | n | test.rs:122:28:124:9 | BlockExpr | | | test.rs:125:9:125:9 | 0 | test.rs:121:43:126:5 | BlockExpr | | diff --git a/rust/ql/test/library-tests/variables/Cfg.expected b/rust/ql/test/library-tests/variables/Cfg.expected index db01e6c6e7f8..771d68b602d2 100644 --- a/rust/ql/test/library-tests/variables/Cfg.expected +++ b/rust/ql/test/library-tests/variables/Cfg.expected @@ -149,10 +149,11 @@ edges | variables.rs:74:19:74:40 | CallExpr | variables.rs:74:14:74:41 | CallExpr | | | variables.rs:74:32:74:39 | "Hello!" | variables.rs:74:19:74:40 | CallExpr | | | variables.rs:76:5:79:5 | IfExpr | variables.rs:73:19:80:1 | BlockExpr | | -| variables.rs:76:8:77:12 | LetExpr | variables.rs:76:12:76:23 | TupleStructPat | | +| variables.rs:76:8:77:12 | LetExpr | variables.rs:77:11:77:12 | s1 | | | variables.rs:76:12:76:23 | TupleStructPat | variables.rs:76:5:79:5 | IfExpr | no-match | | variables.rs:76:12:76:23 | TupleStructPat | variables.rs:76:17:76:22 | s2 | match | | variables.rs:76:17:76:22 | s2 | variables.rs:78:9:78:22 | ExprStmt | match | +| variables.rs:77:11:77:12 | s1 | variables.rs:76:12:76:23 | TupleStructPat | | | variables.rs:77:14:79:5 | BlockExpr | variables.rs:76:5:79:5 | IfExpr | | | variables.rs:78:9:78:17 | PathExpr | variables.rs:78:19:78:20 | s2 | | | variables.rs:78:9:78:21 | CallExpr | variables.rs:77:14:79:5 | BlockExpr | | @@ -184,10 +185,11 @@ edges | variables.rs:91:19:91:40 | CallExpr | variables.rs:91:14:91:41 | CallExpr | | | variables.rs:91:32:91:39 | "Hello!" | variables.rs:91:19:91:40 | CallExpr | | | variables.rs:93:5:96:5 | WhileExpr | variables.rs:90:19:97:1 | BlockExpr | | -| variables.rs:93:11:94:12 | LetExpr | variables.rs:93:15:93:26 | TupleStructPat | | +| variables.rs:93:11:94:12 | LetExpr | variables.rs:94:11:94:12 | s1 | | | variables.rs:93:15:93:26 | TupleStructPat | variables.rs:93:5:96:5 | WhileExpr | no-match | | variables.rs:93:15:93:26 | TupleStructPat | variables.rs:93:20:93:25 | s2 | match | | variables.rs:93:20:93:25 | s2 | variables.rs:95:9:95:22 | ExprStmt | match | +| variables.rs:94:11:94:12 | s1 | variables.rs:93:15:93:26 | TupleStructPat | | | variables.rs:94:14:96:5 | BlockExpr | variables.rs:93:11:94:12 | LetExpr | | | variables.rs:95:9:95:17 | PathExpr | variables.rs:95:19:95:20 | s2 | | | variables.rs:95:9:95:21 | CallExpr | variables.rs:94:14:96:5 | BlockExpr | | @@ -455,10 +457,11 @@ edges | variables.rs:224:13:224:27 | ExprStmt | variables.rs:224:13:224:21 | PathExpr | | | variables.rs:224:23:224:25 | a11 | variables.rs:224:13:224:26 | CallExpr | | | variables.rs:225:13:228:13 | IfExpr | variables.rs:223:12:229:9 | BlockExpr | | -| variables.rs:225:16:226:15 | LetExpr | variables.rs:225:20:225:36 | TupleStructPat | | +| variables.rs:225:16:226:15 | LetExpr | variables.rs:226:15:226:15 | e | | | variables.rs:225:20:225:36 | TupleStructPat | variables.rs:225:13:228:13 | IfExpr | no-match | | variables.rs:225:20:225:36 | TupleStructPat | variables.rs:225:33:225:35 | a12 | match | | variables.rs:225:33:225:35 | a12 | variables.rs:227:17:227:32 | ExprStmt | match | +| variables.rs:226:15:226:15 | e | variables.rs:225:20:225:36 | TupleStructPat | | | variables.rs:226:17:228:13 | BlockExpr | variables.rs:225:13:228:13 | IfExpr | | | variables.rs:227:17:227:25 | PathExpr | variables.rs:227:28:227:30 | a12 | | | variables.rs:227:17:227:31 | CallExpr | variables.rs:226:17:228:13 | BlockExpr | | @@ -674,7 +677,10 @@ edges | variables.rs:332:5:332:17 | ExprStmt | variables.rs:332:5:332:13 | PathExpr | | | variables.rs:332:15:332:15 | a | variables.rs:332:5:332:16 | CallExpr | | | variables.rs:333:5:333:27 | MethodCallExpr | variables.rs:334:5:334:17 | ExprStmt | | -| variables.rs:333:5:333:28 | ExprStmt | variables.rs:333:5:333:27 | MethodCallExpr | | +| variables.rs:333:5:333:28 | ExprStmt | variables.rs:333:25:333:26 | 10 | | +| variables.rs:333:6:333:11 | RefExpr | variables.rs:333:5:333:27 | MethodCallExpr | | +| variables.rs:333:11:333:11 | a | variables.rs:333:6:333:11 | RefExpr | | +| variables.rs:333:25:333:26 | 10 | variables.rs:333:11:333:11 | a | | | variables.rs:334:5:334:13 | PathExpr | variables.rs:334:15:334:15 | a | | | variables.rs:334:5:334:16 | CallExpr | variables.rs:329:17:335:1 | BlockExpr | | | variables.rs:334:5:334:17 | ExprStmt | variables.rs:334:5:334:13 | PathExpr | | From d013c8940d26b33e55e1b2215dab8d3ba5263eab Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> Date: Thu, 10 Oct 2024 21:37:44 +0100 Subject: [PATCH 068/217] Revert "Go: extractor/objecttypes consistency generics" --- go/extractor/extractor.go | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/go/extractor/extractor.go b/go/extractor/extractor.go index 936e0b6fdec8..c157f7c8f672 100644 --- a/go/extractor/extractor.go +++ b/go/extractor/extractor.go @@ -518,7 +518,6 @@ func extractMethod(tw *trap.Writer, meth *types.Func) trap.Label { // For more information on objects, see: // https://github.com/golang/example/blob/master/gotypes/README.md#objects func extractObject(tw *trap.Writer, obj types.Object, lbl trap.Label) { - checkObjectNotSpecialized(obj) name := obj.Name() isBuiltin := obj.Parent() == types.Universe var kind int @@ -1638,7 +1637,7 @@ func extractType(tw *trap.Writer, tp types.Type) trap.Label { // Note that methods coming from embedded interfaces can be // accessed through `Method(i)`, so there is no need to // deal with them separately. - meth := tp.Method(i).Origin() + meth := tp.Method(i) // Note that methods do not have a parent scope, so they are // not dealt with by `extractScopes` @@ -1708,7 +1707,7 @@ func extractType(tw *trap.Writer, tp types.Type) trap.Label { // ensure all methods have labels - note that methods do not have a // parent scope, so they are not dealt with by `extractScopes` for i := 0; i < origintp.NumMethods(); i++ { - meth := origintp.Method(i).Origin() + meth := origintp.Method(i) extractMethod(tw, meth) } @@ -1716,7 +1715,7 @@ func extractType(tw *trap.Writer, tp types.Type) trap.Label { // associate all methods of underlying interface with this type if underlyingInterface, ok := underlying.(*types.Interface); ok { for i := 0; i < underlyingInterface.NumMethods(); i++ { - methlbl := extractMethod(tw, underlyingInterface.Method(i).Origin()) + methlbl := extractMethod(tw, underlyingInterface.Method(i)) dbscheme.MethodHostsTable.Emit(tw, methlbl, lbl) } } @@ -1788,7 +1787,7 @@ func getTypeLabel(tw *trap.Writer, tp types.Type) (trap.Label, bool) { case *types.Interface: var b strings.Builder for i := 0; i < tp.NumMethods(); i++ { - meth := tp.Method(i).Origin() + meth := tp.Method(i) methLbl := extractType(tw, meth.Type()) if i > 0 { b.WriteString(",") @@ -2144,20 +2143,3 @@ func skipExtractingValueForLeftOperand(tw *trap.Writer, be *ast.BinaryExpr) bool } return true } - -// checkObjectNotSpecialized exits the program if `obj` is specialized. Note -// that specialization is only possible for function objects and variable -// objects. -func checkObjectNotSpecialized(obj types.Object) { - if funcObj, ok := obj.(*types.Func); ok && funcObj != funcObj.Origin() { - log.Fatalf("Encountered unexpected specialization %s of generic function object %s", funcObj.FullName(), funcObj.Origin().FullName()) - } - if varObj, ok := obj.(*types.Var); ok && varObj != varObj.Origin() { - log.Fatalf("Encountered unexpected specialization %s of generic variable object %s", varObj.String(), varObj.Origin().String()) - } - if typeNameObj, ok := obj.(*types.TypeName); ok { - if namedType, ok := typeNameObj.Type().(*types.Named); ok && namedType != namedType.Origin() { - log.Fatalf("Encountered type object for specialization %s of named type %s", namedType.String(), namedType.Origin().String()) - } - } -} From c66bd72620e58439241c00f01c3961d8ed9154a7 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Fri, 11 Oct 2024 09:52:30 +0200 Subject: [PATCH 069/217] Rust: rename to `CallExprBase` --- rust/extractor/src/generated/.generated.list | 2 +- rust/extractor/src/generated/top.rs | 122 +++++++++--------- rust/ql/.generated.list | 22 ++-- rust/ql/.gitattributes | 6 +- rust/ql/lib/codeql/rust/elements.qll | 2 +- rust/ql/lib/codeql/rust/elements/CallExpr.qll | 2 +- ...nOrMethodCallExpr.qll => CallExprBase.qll} | 6 +- .../codeql/rust/elements/MethodCallExpr.qll | 2 +- ...dCallExprImpl.qll => CallExprBaseImpl.qll} | 8 +- .../elements/internal/generated/CallExpr.qll | 4 +- ...nOrMethodCallExpr.qll => CallExprBase.qll} | 26 ++-- .../internal/generated/MethodCallExpr.qll | 6 +- .../internal/generated/ParentChild.qll | 68 +++++----- .../rust/elements/internal/generated/Raw.qll | 36 +++--- .../elements/internal/generated/Synth.qll | 68 +++++----- rust/ql/lib/rust.dbscheme | 38 +++--- rust/schema/annotations.py | 6 +- 17 files changed, 209 insertions(+), 215 deletions(-) rename rust/ql/lib/codeql/rust/elements/{FunctionOrMethodCallExpr.qll => CallExprBase.qll} (56%) rename rust/ql/lib/codeql/rust/elements/internal/{FunctionOrMethodCallExprImpl.qll => CallExprBaseImpl.qll} (62%) rename rust/ql/lib/codeql/rust/elements/internal/generated/{FunctionOrMethodCallExpr.qll => CallExprBase.qll} (51%) diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index 886def53f2da..e354f7a6efdd 100644 --- a/rust/extractor/src/generated/.generated.list +++ b/rust/extractor/src/generated/.generated.list @@ -1,2 +1,2 @@ mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 -top.rs 7269710572ed5f727107f19cf4002ec19b8a4149842b351c6c61dbeb1ec35e5c 7269710572ed5f727107f19cf4002ec19b8a4149842b351c6c61dbeb1ec35e5c +top.rs 6cb5c672cc7e8f2f3870c7d8b36714bfb42148fd94a097458d0011e135ea899a 6cb5c672cc7e8f2f3870c7d8b36714bfb42148fd94a097458d0011e135ea899a diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index fad605cab2e0..50db26e14a30 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -3614,6 +3614,51 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct CallExprBase { + _unused: () +} + +impl trap::TrapClass for CallExprBase { + fn class_name() -> &'static str { "CallExprBase" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme CallExprBase is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme CallExprBase is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme CallExprBase is a subclass of Expr + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme CallExprBase is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct CastExpr { pub id: trap::TrapId, @@ -4522,51 +4567,6 @@ impl From> for trap::Label { } } -#[derive(Debug)] -pub struct FunctionOrMethodCallExpr { - _unused: () -} - -impl trap::TrapClass for FunctionOrMethodCallExpr { - fn class_name() -> &'static str { "FunctionOrMethodCallExpr" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme FunctionOrMethodCallExpr is a subclass of AstNode - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme FunctionOrMethodCallExpr is a subclass of Element - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme FunctionOrMethodCallExpr is a subclass of Expr - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme FunctionOrMethodCallExpr is a subclass of Locatable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct IdentPat { pub id: trap::TrapId, @@ -7872,10 +7872,10 @@ impl trap::TrapEntry for CallExpr { fn emit(self, id: trap::Label, out: &mut trap::Writer) { out.add_tuple("call_exprs", vec![id.into()]); if let Some(v) = self.arg_list { - out.add_tuple("function_or_method_call_expr_arg_lists", vec![id.into(), v.into()]); + out.add_tuple("call_expr_base_arg_lists", vec![id.into(), v.into()]); } for (i, v) in self.attrs.into_iter().enumerate() { - out.add_tuple("function_or_method_call_expr_attrs", vec![id.into(), i.into(), v.into()]); + out.add_tuple("call_expr_base_attrs", vec![id.into(), i.into(), v.into()]); } if let Some(v) = self.expr { out.add_tuple("call_expr_exprs", vec![id.into(), v.into()]); @@ -7896,27 +7896,27 @@ impl From> for trap::Label { } } -impl From> for trap::Label { +impl From> for trap::Label { fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of Element + // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of CallExprBase unsafe { Self::from_untyped(value.as_untyped()) } } } -impl From> for trap::Label { +impl From> for trap::Label { fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of Expr + // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of Element unsafe { Self::from_untyped(value.as_untyped()) } } } -impl From> for trap::Label { +impl From> for trap::Label { fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of FunctionOrMethodCallExpr + // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of Expr unsafe { Self::from_untyped(value.as_untyped()) } @@ -8755,10 +8755,10 @@ impl trap::TrapEntry for MethodCallExpr { fn emit(self, id: trap::Label, out: &mut trap::Writer) { out.add_tuple("method_call_exprs", vec![id.into()]); if let Some(v) = self.arg_list { - out.add_tuple("function_or_method_call_expr_arg_lists", vec![id.into(), v.into()]); + out.add_tuple("call_expr_base_arg_lists", vec![id.into(), v.into()]); } for (i, v) in self.attrs.into_iter().enumerate() { - out.add_tuple("function_or_method_call_expr_attrs", vec![id.into(), i.into(), v.into()]); + out.add_tuple("call_expr_base_attrs", vec![id.into(), i.into(), v.into()]); } if let Some(v) = self.generic_arg_list { out.add_tuple("method_call_expr_generic_arg_lists", vec![id.into(), v.into()]); @@ -8785,27 +8785,27 @@ impl From> for trap::Label { } } -impl From> for trap::Label { +impl From> for trap::Label { fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Element + // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of CallExprBase unsafe { Self::from_untyped(value.as_untyped()) } } } -impl From> for trap::Label { +impl From> for trap::Label { fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Expr + // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Element unsafe { Self::from_untyped(value.as_untyped()) } } } -impl From> for trap::Label { +impl From> for trap::Label { fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of FunctionOrMethodCallExpr + // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Expr unsafe { Self::from_untyped(value.as_untyped()) } diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 59d71c496637..9cc24f2efe6f 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -14,7 +14,8 @@ lib/codeql/rust/elements/BinaryExpr.qll 394522da3bc3a716fc7bc40c3560143ca840f5d2 lib/codeql/rust/elements/BlockExpr.qll b952fd44b89de248931d4089834d2c9406f6f2fc1a3f5c2365156be4e55157cf daccc07ab11ac696679b9fadc99f40b1bf579c90bf6c7cca6e82eaa313932ede lib/codeql/rust/elements/BoxPat.qll 1b2c3fff171aa6aa238c9460b122f26c79e04577cea67fa856de99842ba873d4 0caf8d23ed6e0997a6b8751def27641582151fba6e24fccf798712a4690b42f1 lib/codeql/rust/elements/BreakExpr.qll 7ca3807a20e9a9a988d1fd7abebf240325ed422fcb45c719ba46272f031f94db dffb7379d3f3ba220acfbd05eb7bb6cfd9cfda211e9c8b1f5240ca5fa61be3fc -lib/codeql/rust/elements/CallExpr.qll 4232f42c54212fe9e8aa140194da324b77581395a4d5c899190d469609598668 a589e19792174b18ce39b74e19828bfe5c7ff796424c05f6a6084eab4ff16ab4 +lib/codeql/rust/elements/CallExpr.qll f336500ca7a611b164d48b90e80edb0c0d3816792b0ececce659ac1ff1ffeb3e f99a9c55466418ef53860c44d9f2d6161af4b492178ddd9e5870dff742b70ae5 +lib/codeql/rust/elements/CallExprBase.qll 2846202b5208b541977500286951d96487bf555838c6c16cdd006a71e383745a c789d412bf099c624329379e0c7d94fa0d23ae2edea7a25a2ea0f3c0042ccf62 lib/codeql/rust/elements/CastExpr.qll ba281bde130f43c486c4ad889539b77fba9e41afdf7980e50b6a8696a1ec7527 61257003d395896ec60729d0bc01da36697615bb725d07141255fbb5c44e50a0 lib/codeql/rust/elements/ClosureBinder.qll 977df800f97cc9b03fffb5e5e1fc6acd08a2938e04cb6ad91108784a15b0d510 f6fad4127226fe1dff2f16416d8a7fde5d8ab4a88f30e443ac5e5ff618de3e05 lib/codeql/rust/elements/ClosureExpr.qll 8f06357ae134e42c073eef994c83c04b8cf294fe33b286dbd75c0e705ce29d05 9d9e282d965fed723965376801d4afa49444d1d9be9b093d02e276729a2cf7ad @@ -41,7 +42,6 @@ lib/codeql/rust/elements/ForType.qll 0036bed8749358c356d78c4a0eef40d73e279628429 lib/codeql/rust/elements/FormatArgsArg.qll 5bc9b4cd1bac7131165836e93838c45452a08ea6011741cbddace3cbf9c69440 f825140e98dc9800d5c045402186793c7b21511448e2f6bf6402d1e06305219c lib/codeql/rust/elements/FormatArgsExpr.qll f2ffad5a1105b29a8437c8ed6cf918cfcf4d65ac164bbf1be0585c3b673ca749 3ba20dc312a0a994bb43b37b2db72cbd4e06061b97918fa0e84ce355070ffbeb lib/codeql/rust/elements/Function.qll 736c53408f8674c88c352cd1f08f7c77e51551c68ef802f2e1c1aaf3d44fa8e9 6b52dbea081a5e799f1a2cedd57be5485bc8e018ded7249a1852343053d849a6 -lib/codeql/rust/elements/FunctionOrMethodCallExpr.qll 69754853bd452c18a333e2bb70a401726cc115092a120662edac5b24586f1951 1d9226ea609d298ec76eaf6a25248c96315b14a5993ac7c8dfd7fd80e1c134fb lib/codeql/rust/elements/GenericArg.qll 5f11ce0e3c5f08de84db61f56ba1b984652455ba6b95a8b8a5b5a235913d4072 756b6a73d66fde45bdcc65ce2362a5b1391af2927e6d54b6550b3ecd5fd11e75 lib/codeql/rust/elements/GenericArgList.qll dcf274db517b0e8f19e4545d77f86cdd4066ff2805e68c808d0bb5750b49f569 1055a82929e850264e501b367ef4d314a3e6bb8943ec95f4284d157fb4d0092f lib/codeql/rust/elements/GenericParam.qll b58448b808d6dfa05db9574f54c22ce51f0b1d78784263c75a95d6bfc787067d 4afbab71fe717d7d7d3e2f60ea8c3d97bcb29b17b4efb79eabfe8f070edcb9bb @@ -76,7 +76,7 @@ lib/codeql/rust/elements/MatchArmList.qll e6c48fd7419d88e996b82eb45e4aa2686dfd07 lib/codeql/rust/elements/MatchExpr.qll e9ef1664f020823b6f4bb72d906a9dc0c1ee6432d4a9a13f7dbdbab2b2b1ee4d 38d71e5c487abcb5682293c573343be66e499a6e131bb630604c120d34b7777b lib/codeql/rust/elements/MatchGuard.qll 20754ab2009a7d40b50feece496ff7f38650586d79190ed2a372308594693694 471f8f118317efcf112f4ddfd60125ca2a9d9b3b08e6ee331c430961de7885ff lib/codeql/rust/elements/Meta.qll 9fa3216c86fa55ed5c0c4671708110a6ffc7c0f5d6cda8dda31aaff17f87534d c44ee2754dd71776ffd0a8a7d6c1ae8737c47e998e6bdb8efab5283625807cf4 -lib/codeql/rust/elements/MethodCallExpr.qll d19c02fdd2f6f649dfbf757c53f4af441f10842ca69f56b13d218e343961688b eafb571244dcbec1bb8106f8ec03c641ca383b51b615506bf0d7bc90a1aa1934 +lib/codeql/rust/elements/MethodCallExpr.qll 91b411e0fb1a0547dcad8726db460dccc61bed972741598d5cb3740593fe75a7 538d23b6db115bb699389d29a1829bb0449c08424a1fff80377828eb7ceb2563 lib/codeql/rust/elements/Missing.qll 70e6ac9790314752849c9888443c98223ccfc93a193998b7ce350b2c6ebe8ea4 e2f0623511acaa76b091f748d417714137a8b94f1f2bdbbd177f1c682c786dad lib/codeql/rust/elements/Module.qll 0bc85019177709256f8078d9de2a36f62f848d476225bff7bba1e35f249875c7 3fbb70e0c417a644dd0cada2c364c6e6876cfa16f37960e219c87e49c966c94e lib/codeql/rust/elements/Name.qll 3d7ed16c232912e30e5a075f5087ad344a8f76dcc27bc8f71a80c133802b89d7 036dc3ba0c20eb0907ef6dcc532214aa5de8e0de0fa819eca1fce0355b3741a3 @@ -184,6 +184,7 @@ lib/codeql/rust/elements/internal/BlockExprImpl.qll 36ac09e4a6eeeec22919b62b1d00 lib/codeql/rust/elements/internal/BoxPatConstructor.qll 153f110ba25fd6c889092bfd16f73bb610fa60d6e0c8965d5f44d2446fcd48a2 9324cf0d8aa29945551bf8ab64801d598f57aab8cd4e19bcd4e9ef8a4a4e06eb lib/codeql/rust/elements/internal/BoxPatImpl.qll d62a3cc1d5bab6bd258f702ec731ec57f0e5ef2672ab9de4b6f3b558078629eb 26b4fabb676adbbdb0d7f81449e493ee49380ea04d131f779714ac2434bb323a lib/codeql/rust/elements/internal/BreakExprConstructor.qll 356be043c28e0b34fdf925a119c945632ee883c6f5ebb9a27003c6a8d250afd9 bb77e66b04bb9489340e7506931559b94285c6904b6f9d2f83b214cba4f3cfd5 +lib/codeql/rust/elements/internal/CallExprBaseImpl.qll d2749cc1a9d7ee8bf7f34b6c3e0238a576a68e439a8c10a503c164ff45ffcbeb ffc7b0a8841945fe6736b0e1aed7d9ed69185db03dee2b16da121325b39397c7 lib/codeql/rust/elements/internal/CallExprConstructor.qll 742b38e862e2cf82fd1ecc4d4fc5b4782a9c7c07f031452b2bae7aa59d5aa13a cad6e0a8be21d91b20ac2ec16cab9c30eae810b452c0f1992ed87d5c7f4144dc lib/codeql/rust/elements/internal/CallExprImpl.qll 7e48610680ba6f2876a1a005ab0743496dd2364b9c44aca441bd33e11317e2d7 bb12c3c28156b40796fe3ba112760f87bb5abb323aab3c5b7bb3e0facaef8d35 lib/codeql/rust/elements/internal/CastExprConstructor.qll f3d6e10c4731f38a384675aeab3fba47d17b9e15648293787092bb3247ed808d d738a7751dbadb70aa1dcffcf8af7fa61d4cf8029798369a7e8620013afff4ed @@ -230,7 +231,6 @@ lib/codeql/rust/elements/internal/FormatArgsArgImpl.qll 601f7715e9a65bcfa7cea197 lib/codeql/rust/elements/internal/FormatArgsExprConstructor.qll ce29ff5a839b885b1ab7a02d6a381ae474ab1be3e6ee7dcfd7595bdf28e4b558 63bf957426871905a51ea319662a59e38104c197a1024360aca364dc145b11e8 lib/codeql/rust/elements/internal/FormatArgsExprImpl.qll bdb992ebc6be59311b486f40325b39f52a69921cfc66a731085cb184da00050f 6336e7770f9cb700f1b3914fd940c3423ab4e971b34ed8fcc79da80c1f1cdba3 lib/codeql/rust/elements/internal/FunctionConstructor.qll b50aea579938d03745dfbd8b5fa8498f7f83b967369f63d6875510e09ab7f5d2 19cca32aeaecaf9debc27329e8c39ecec69464bb1d89d7b09908a1d73a8d92a2 -lib/codeql/rust/elements/internal/FunctionOrMethodCallExprImpl.qll 34e7b5c95c8f0fdbd9c52159494e21046acbd0d62e1fb9b2eee53a11f15be261 105783845539bc44f05473efe8bedbc033fb5fb107c2daa77af664bfccb20bf6 lib/codeql/rust/elements/internal/GenericArgImpl.qll 6b1b804c357425c223f926e560a688e81506f5a35b95485cecf704e88cc009ee cc1ccf6a23dadc397e82664f3911d4b385d4c8ca80b1ee16d5275d9c936148dd lib/codeql/rust/elements/internal/GenericArgListConstructor.qll 46859bb3eb09d77987a18642d65ba2e13471a4dc9c0a83a192fddc82e37c335c 2c7d54c876269a88d3461b05745e73b06532b1616cae9b614ac94b28735d8fc4 lib/codeql/rust/elements/internal/GenericArgListImpl.qll 1a39ba7080147abccaaba451852c9c124fb6177f2ebd64e38ee74014444a34e1 80df3150c961936037ac02b46ef5f775c3f82e66490afbca00a016cb9eee798a @@ -461,7 +461,8 @@ lib/codeql/rust/elements/internal/generated/BinaryExpr.qll 64e9bd9c571edd6e5f3e7 lib/codeql/rust/elements/internal/generated/BlockExpr.qll 6fc90a80e60f017bf3418e45bcc35b5ddac59b51037c21aed3955d47c147ce4a 1f3f8e5107b0c6de381b7c94aab93dc5fd758a845c6ff9554888df453f1315d0 lib/codeql/rust/elements/internal/generated/BoxPat.qll ec946a3e671ab7417e04b0207967adad004df512c570c4f0780ca5816d12d75f b0e64860855c4e85914042b1a51034899ff7cd1b2c6857188de89310a2726ea3 lib/codeql/rust/elements/internal/generated/BreakExpr.qll 0f428a8b2f4209b134c2ffc3e1c93c30bc6b0e9c9172f140cefa88c1f77d8690 957b39f38ff6befe9061f55bc0b403c2f1c366dd0cf63b874bae6f8216576d76 -lib/codeql/rust/elements/internal/generated/CallExpr.qll 2ed74ea3da426b351949291ae728eb6d70de033cccc667712988cf416319e999 af84a17bf5512dc97d8781cb0aa868c7f5349932596f2600785d2432e15ece3a +lib/codeql/rust/elements/internal/generated/CallExpr.qll 23ee64e3bf643cd5e6ff705181d2bb31e1aeaffecb5bdce73836172dbf15f12f 34b280139b1f8f70d78e1432392f03c971be392e8cb68d014eb325d0c101bddd +lib/codeql/rust/elements/internal/generated/CallExprBase.qll cce796e36847249f416629bacf3ea146313084de3374587412e66c10d2917b83 c219aa2174321c161a4a742ca0605521687ca9a5ca32db453a5c62db6f7784cc lib/codeql/rust/elements/internal/generated/CastExpr.qll d6fbf02e9e202254666082a9116634d0eb933177866ac4c0a57b5e9c4bb4b383 477f67773492e3b82695461d56327c9db05a7d1a67e8d192406265f2ce369670 lib/codeql/rust/elements/internal/generated/ClosureBinder.qll 94c0dcdd4cd87d115659d496c88a98354bc7d4ddc0fa27028003bf7688b99987 d59d713b426dbbdb775df9092d176eea031dac1f14e468810f2fc8591399cd19 lib/codeql/rust/elements/internal/generated/ClosureExpr.qll f9047451cb8b53f8b77e1c01f7ef485d5b5a92999e0591c6702062050052fa2f 2252be8b3022c587a8c6ad93b64d856263be7bfe2938c1d063e7cad845dd38e2 @@ -488,7 +489,6 @@ lib/codeql/rust/elements/internal/generated/ForType.qll 3d43d044a1189281f09c55ca lib/codeql/rust/elements/internal/generated/FormatArgsArg.qll e07a1ae310f590003f1b88fada7dcf4847c99adb9d4c838d1c88e66e1da85c5f 0ef7342451fe2cb06e765fb4b33bb8c4a9b927f5edbc8feb5c6ba3655697f447 lib/codeql/rust/elements/internal/generated/FormatArgsExpr.qll 40d6daa7d2bafb33798a21d79774dc802cfbd7a31618ac3bd0149399ea2bf893 d1172e2151791228559004792e125fc4625f6a26ffad25f29efb0ad263bf8795 lib/codeql/rust/elements/internal/generated/Function.qll b239af1a8874802b8a311706c53d56e3ceaad7ed23a7f97d1694bf961b63768b 4bc3c23685fa05820222e472ab1cdb40a271f862727d3bd878d47de9c2e3f485 -lib/codeql/rust/elements/internal/generated/FunctionOrMethodCallExpr.qll 5c6e3b4e4d3a91d0bb934dd2402898767ef6156b7b419222dfbc144167780231 67c82e154ff4c68f601fd92ba8aad7a8dd5b688dc89189744e1515bb647e9669 lib/codeql/rust/elements/internal/generated/GenericArg.qll 464da0ba1c5ddcd1be68617167f177773d99b5ac4775ec8ea24d503e789a9099 6faa1033d59baf7c210ac4837a55781cfc054b7acbad8027faf4630dbfa6e101 lib/codeql/rust/elements/internal/generated/GenericArgList.qll b8cd936bba6f28344e28c98acf38acb8ef43af6ecf8367d79ed487e5b9da17cb 8b14331261e49d004807285b02fca190aafd62bfb9378b05c7d9c1e95525fe7b lib/codeql/rust/elements/internal/generated/GenericParam.qll a0285123f974f287154b706bf6688b86edf72a4adcec57346c654d962435651b b42c3915e9564b5b5c5282229bf882aa3309de26a77721b2255d6f4235c0cc38 @@ -523,7 +523,7 @@ lib/codeql/rust/elements/internal/generated/MatchArmList.qll 13362680c037fe83fef lib/codeql/rust/elements/internal/generated/MatchExpr.qll 689d65f690fe05bc262d0a5bfe69bb4f8a142db387c5765fcc4958a9b49989f8 2979cd2017d0538870d17b2b7592c75cc05b706bd36c9de3e5dc38fa3a957e5b lib/codeql/rust/elements/internal/generated/MatchGuard.qll 521a507883963106780f1782084c581fbcf1179863c7c15438c4db79e30e78dd 6226feffaaa8d828a42ece0c693e616cd375672eb987c3b7ff1ca15fa23c116a lib/codeql/rust/elements/internal/generated/Meta.qll f1ce7cdaf2a6fa3b86f0465e33a9521d254c032468427b276d93276ffd5142be 046d72c868ee2664b8a291de16320238ece9d0612c93c96a0d601e0b6079bf90 -lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll 89f5d6248ea338f0b3add9de4166df411bce2f8589b164d0a69db4650e4bcd71 3e13ddfa857e0a3655e7030b3d4ab411b09d6f0ea960b098f54ffcc1d8394d91 +lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll 0966b268c9d71a8007044d608935e0c07d2144eaafef4812ef259d68b00a06f4 b3a5ab7ec79a6cfa55f671288b8c7c946883fd2edc0b3fac68221ab742cf8604 lib/codeql/rust/elements/internal/generated/Missing.qll 16735d91df04a4e1ae52fae25db5f59a044e540755734bbab46b5fbb0fe6b0bd 28ca4e49fb7e6b4734be2f2f69e7c224c570344cc160ef80c5a5cd413e750dad lib/codeql/rust/elements/internal/generated/Module.qll ebae5d8963c9fd569c0fbad1d7770abd3fd2479437f236cbce0505ba9f9af52c fa3c382115fed18a26f1a755d8749a201b9489f82c09448a88fb8e9e1435fe5f lib/codeql/rust/elements/internal/generated/Name.qll 12aad57744b7d1b04454159536409244c47319aedd580acb58ee93ef9d7f837d 63fc67ccc085db22f82576a53489f15216a7c29d5b941b14a965eab481534e2e @@ -536,7 +536,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll c808c9d84dd7800573832b lib/codeql/rust/elements/internal/generated/ParenExpr.qll bc0731505bfe88516205ec360582a4222d2681d11342c93e15258590ddee82f2 d4bd6e0c80cf1d63746c88d4bcb3a01d4c75732e5da09e3ebd9437ced227fb60 lib/codeql/rust/elements/internal/generated/ParenPat.qll ce24b8f8ecbf0f204af200317405724063887257460c80cf250c39b2fdf37185 e7c87d37e1a0ca7ea03840017e1aa9ddb7f927f1f3b6396c0305b46aeee33db6 lib/codeql/rust/elements/internal/generated/ParenType.qll 9cc954d73f8330dcac7b475f97748b63af5c8766dee9d2f2872c0a7e4c903537 c07534c8a9c683c4a9b11d490095647e420de0a0bfc23273eaf6f31b00244273 -lib/codeql/rust/elements/internal/generated/ParentChild.qll 36a5d76d16a00cb18ee2e3193708b795e502ca9a92e72b8047e215961da3c5c8 dae8c9eda242e6d4c153f070ea4eefe1cbaae44aa148c5a79a852c9f1c8f7b2d +lib/codeql/rust/elements/internal/generated/ParentChild.qll 37dde0401161d1a4a668d89418b8f1d5afeaceecf7af54d4302ab30907a8a83e 8000db77bab203447063283adb8d0835731c802bc17ef4ffb39cbdb855cef993 lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll 299abce24762a5ab023f3cf1ab9718b83047e171aed42a8092e7a155914b1657 db1a23d18640c548f08c9f94823838b5e019ac85877c7b15df2d1493d1846572 lib/codeql/rust/elements/internal/generated/PathExpr.qll 17cdb0a7393258a207450f08e37178fc9d35d167f064ba6015be94246f3dc933 a75fdd280aff6d87e083a92030e041c2eb52b57cf7151d4a6989fcd31d6a64bf @@ -548,7 +548,7 @@ lib/codeql/rust/elements/internal/generated/PtrType.qll 5f12b6ad29b4e5ce51c205e2 lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll dc03515d678ba052c2ff2dd9f0883e0bce54cac740ba9a15e5173f292c1b6971 dc03515d678ba052c2ff2dd9f0883e0bce54cac740ba9a15e5173f292c1b6971 lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll efd93730de217cf50dcba5875595263a5eadf9f7e4e1272401342a094d158614 229b251b3d118932e31e78ac4dfb75f48b766f240f20d436062785606d44467b -lib/codeql/rust/elements/internal/generated/Raw.qll 468493674e9f891b6b289d07dd3f6d4369ab04411b8d20a81673f56dfe3abeb4 5876c9a5cc5ede7503b9f524184585abf8fba21fa94887033d2488205d3b4f94 +lib/codeql/rust/elements/internal/generated/Raw.qll ca7eab2abc07ed3b241694a1ab9bafb920b892b0b4e873e0d522c1b11e68195b 8a29d6f4a4a580c9d4bd43023e0e14fc0e539b82745e36918de44a689ca4477a lib/codeql/rust/elements/internal/generated/RecordExpr.qll eb6cb662e463f9260efae1a6ce874fa781172063b916ef1963f861e9942d308d 1a21cbccc8f3799ff13281e822818ebfb21d81591720a427cac3625512cb9d40 lib/codeql/rust/elements/internal/generated/RecordExprField.qll 7e9f8663d3b74ebbc9603b10c9912f082febba6bd73d344b100bbd3edf837802 fbe6b578e7fd5d5a6f21bbb8c388957ab7210a6a249ec71510a50fb35b319ea1 lib/codeql/rust/elements/internal/generated/RecordExprFieldList.qll 179a97211fe7aa6265085d4d54115cdbc0e1cd7c9b2135591e8f36d6432f13d3 dd44bbbc1e83a1ed3a587afb729d7debf7aeb7b63245de181726af13090e50c0 @@ -573,7 +573,7 @@ lib/codeql/rust/elements/internal/generated/Static.qll cae5313e08e4af44c46b25802 lib/codeql/rust/elements/internal/generated/Stmt.qll 8473ff532dd5cc9d7decaddcd174b94d610f6ca0aec8e473cc051dad9f3db917 6ef7d2b5237c2dbdcacbf7d8b39109d4dc100229f2b28b5c9e3e4fbf673ba72b lib/codeql/rust/elements/internal/generated/StmtList.qll a667193e32341e17400867c6e359878c4e645ef9f5f4d97676afc0283a33a026 a320ed678ee359302e2fc1b70a9476705cd616fcfa44a499d32f0c7715627f73 lib/codeql/rust/elements/internal/generated/Struct.qll 4d57f0db12dc7ad3e31e750a24172ef1505406b4dab16386af0674bd18bf8f4b 1a73c83df926b996f629316f74c61ea775be04532ab61b56af904223354f033e -lib/codeql/rust/elements/internal/generated/Synth.qll 908954d21685d16362d15c4170de397fd0af45bcd2038245b863196c96f0caeb 2a696c02a9c57411312ecbad592abd3718d4e73fbd070a2c5b03273358ed3c9d +lib/codeql/rust/elements/internal/generated/Synth.qll a87bb2f82978d4baf9234627d2c7769f2395ab6d164b12b72011f96a95096ce4 0342246219252dd29608e07398f4036d99d9b88d9b2e8e9873a93e9bb6d9535c lib/codeql/rust/elements/internal/generated/SynthConstructors.qll 518b68ccf6d0791bc0c141486261108bb1723e37743fc7f8e4167a1d61660531 518b68ccf6d0791bc0c141486261108bb1723e37743fc7f8e4167a1d61660531 lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b lib/codeql/rust/elements/internal/generated/TokenTree.qll 8577c2b097c1be2f0f7daa5acfcf146f78674a424d99563e08a84dd3e6d91b46 d2f30764e84dbfc0a6a5d3d8a5f935cd432413688cb32da9c94e420fbc10665c @@ -608,7 +608,7 @@ lib/codeql/rust/elements/internal/generated/WhileExpr.qll fec8a9211b82a80601bf73 lib/codeql/rust/elements/internal/generated/WildcardPat.qll d74b70b57a0a66bfae017a329352a5b27a6b9e73dd5521d627f680e810c6c59e 4b913b548ba27ff3c82fcd32cf996ff329cb57d176d3bebd0fcef394486ea499 lib/codeql/rust/elements/internal/generated/YeetExpr.qll cac328200872a35337b4bcb15c851afb4743f82c080f9738d295571eb01d7392 94af734eea08129b587fed849b643e7572800e8330c0b57d727d41abda47930b lib/codeql/rust/elements/internal/generated/YieldExpr.qll 37e5f0c1e373a22bbc53d8b7f2c0e1f476e5be5080b8437c5e964f4e83fad79a 4a9a68643401637bf48e5c2b2f74a6bf0ddcb4ff76f6bffb61d436b685621e85 -lib/codeql/rust/elements.qll c647c2f20c9d20d49214026ea0e2965d0b751db567baceaf7a9225a8efa2546b c647c2f20c9d20d49214026ea0e2965d0b751db567baceaf7a9225a8efa2546b +lib/codeql/rust/elements.qll 78908ca1e1988b47323eb47fa58bcceeb984022fa40f89fb0af4f7219d2dd77b 78908ca1e1988b47323eb47fa58bcceeb984022fa40f89fb0af4f7219d2dd77b test/extractor-tests/generated/Abi/Abi.ql 7f6e7dc4af86eca3ebdc79b10373988cd0871bd78b51997d3cffd969105e5fdd 2f936b6ca005c6157c755121584410c03e4a3949c23bee302fbe05ee10ce118f test/extractor-tests/generated/Abi/Abi_getAbiString.ql a496762fcec5a0887b87023bbf93e9b650f02e20113e25c44d6e4281ae8f5335 14109c7ce11ba25e3cd6e7f1b3fcb4cb00622f2a4eac91bfe43145c5f366bc52 test/extractor-tests/generated/ArgList/ArgList.ql e412927756e72165d0e7c5c9bd3fca89d08197bbf760db8fb7683c64bb2229bc 043dba8506946fbb87753e22c387987d7eded6ddb963aa067f9e60ef9024d684 diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index 63630aa20cca..6069457be452 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -17,6 +17,7 @@ /lib/codeql/rust/elements/BoxPat.qll linguist-generated /lib/codeql/rust/elements/BreakExpr.qll linguist-generated /lib/codeql/rust/elements/CallExpr.qll linguist-generated +/lib/codeql/rust/elements/CallExprBase.qll linguist-generated /lib/codeql/rust/elements/CastExpr.qll linguist-generated /lib/codeql/rust/elements/ClosureBinder.qll linguist-generated /lib/codeql/rust/elements/ClosureExpr.qll linguist-generated @@ -43,7 +44,6 @@ /lib/codeql/rust/elements/FormatArgsArg.qll linguist-generated /lib/codeql/rust/elements/FormatArgsExpr.qll linguist-generated /lib/codeql/rust/elements/Function.qll linguist-generated -/lib/codeql/rust/elements/FunctionOrMethodCallExpr.qll linguist-generated /lib/codeql/rust/elements/GenericArg.qll linguist-generated /lib/codeql/rust/elements/GenericArgList.qll linguist-generated /lib/codeql/rust/elements/GenericParam.qll linguist-generated @@ -186,6 +186,7 @@ /lib/codeql/rust/elements/internal/BoxPatConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/BoxPatImpl.qll linguist-generated /lib/codeql/rust/elements/internal/BreakExprConstructor.qll linguist-generated +/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll linguist-generated /lib/codeql/rust/elements/internal/CallExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/CallExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/CastExprConstructor.qll linguist-generated @@ -232,7 +233,6 @@ /lib/codeql/rust/elements/internal/FormatArgsExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/FormatArgsExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/FunctionConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/FunctionOrMethodCallExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/GenericArgImpl.qll linguist-generated /lib/codeql/rust/elements/internal/GenericArgListConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/GenericArgListImpl.qll linguist-generated @@ -464,6 +464,7 @@ /lib/codeql/rust/elements/internal/generated/BoxPat.qll linguist-generated /lib/codeql/rust/elements/internal/generated/BreakExpr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/CallExpr.qll linguist-generated +/lib/codeql/rust/elements/internal/generated/CallExprBase.qll linguist-generated /lib/codeql/rust/elements/internal/generated/CastExpr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/ClosureBinder.qll linguist-generated /lib/codeql/rust/elements/internal/generated/ClosureExpr.qll linguist-generated @@ -490,7 +491,6 @@ /lib/codeql/rust/elements/internal/generated/FormatArgsArg.qll linguist-generated /lib/codeql/rust/elements/internal/generated/FormatArgsExpr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/Function.qll linguist-generated -/lib/codeql/rust/elements/internal/generated/FunctionOrMethodCallExpr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/GenericArg.qll linguist-generated /lib/codeql/rust/elements/internal/generated/GenericArgList.qll linguist-generated /lib/codeql/rust/elements/internal/generated/GenericParam.qll linguist-generated diff --git a/rust/ql/lib/codeql/rust/elements.qll b/rust/ql/lib/codeql/rust/elements.qll index 3795ecbe6c55..77aad9315c19 100644 --- a/rust/ql/lib/codeql/rust/elements.qll +++ b/rust/ql/lib/codeql/rust/elements.qll @@ -20,6 +20,7 @@ import codeql.rust.elements.BlockExpr import codeql.rust.elements.BoxPat import codeql.rust.elements.BreakExpr import codeql.rust.elements.CallExpr +import codeql.rust.elements.CallExprBase import codeql.rust.elements.CastExpr import codeql.rust.elements.ClosureBinder import codeql.rust.elements.ClosureExpr @@ -46,7 +47,6 @@ import codeql.rust.elements.ForType import codeql.rust.elements.FormatArgsArg import codeql.rust.elements.FormatArgsExpr import codeql.rust.elements.Function -import codeql.rust.elements.FunctionOrMethodCallExpr import codeql.rust.elements.GenericArg import codeql.rust.elements.GenericArgList import codeql.rust.elements.GenericParam diff --git a/rust/ql/lib/codeql/rust/elements/CallExpr.qll b/rust/ql/lib/codeql/rust/elements/CallExpr.qll index bf637cb29a60..ab5631b07ca7 100644 --- a/rust/ql/lib/codeql/rust/elements/CallExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/CallExpr.qll @@ -4,8 +4,8 @@ */ private import internal.CallExprImpl +import codeql.rust.elements.CallExprBase import codeql.rust.elements.Expr -import codeql.rust.elements.FunctionOrMethodCallExpr /** * A function call expression. For example: diff --git a/rust/ql/lib/codeql/rust/elements/FunctionOrMethodCallExpr.qll b/rust/ql/lib/codeql/rust/elements/CallExprBase.qll similarity index 56% rename from rust/ql/lib/codeql/rust/elements/FunctionOrMethodCallExpr.qll rename to rust/ql/lib/codeql/rust/elements/CallExprBase.qll index 3635c33e324d..d59c4c705f7c 100644 --- a/rust/ql/lib/codeql/rust/elements/FunctionOrMethodCallExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/CallExprBase.qll @@ -1,9 +1,9 @@ // generated by codegen, do not edit /** - * This module provides the public class `FunctionOrMethodCallExpr`. + * This module provides the public class `CallExprBase`. */ -private import internal.FunctionOrMethodCallExprImpl +private import internal.CallExprBaseImpl import codeql.rust.elements.ArgList import codeql.rust.elements.Attr import codeql.rust.elements.Expr @@ -11,4 +11,4 @@ import codeql.rust.elements.Expr /** * A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details. */ -final class FunctionOrMethodCallExpr = Impl::FunctionOrMethodCallExpr; +final class CallExprBase = Impl::CallExprBase; diff --git a/rust/ql/lib/codeql/rust/elements/MethodCallExpr.qll b/rust/ql/lib/codeql/rust/elements/MethodCallExpr.qll index 3646d987f9fa..fca8b0861345 100644 --- a/rust/ql/lib/codeql/rust/elements/MethodCallExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/MethodCallExpr.qll @@ -4,8 +4,8 @@ */ private import internal.MethodCallExprImpl +import codeql.rust.elements.CallExprBase import codeql.rust.elements.Expr -import codeql.rust.elements.FunctionOrMethodCallExpr import codeql.rust.elements.GenericArgList import codeql.rust.elements.NameRef diff --git a/rust/ql/lib/codeql/rust/elements/internal/FunctionOrMethodCallExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll similarity index 62% rename from rust/ql/lib/codeql/rust/elements/internal/FunctionOrMethodCallExprImpl.qll rename to rust/ql/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll index 1ad34f210cfb..332ba0fb6b3f 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/FunctionOrMethodCallExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll @@ -1,19 +1,19 @@ // generated by codegen, remove this comment if you wish to edit this file /** - * This module provides a hand-modifiable wrapper around the generated class `FunctionOrMethodCallExpr`. + * This module provides a hand-modifiable wrapper around the generated class `CallExprBase`. * * INTERNAL: Do not use. */ -private import codeql.rust.elements.internal.generated.FunctionOrMethodCallExpr +private import codeql.rust.elements.internal.generated.CallExprBase /** - * INTERNAL: This module contains the customizable definition of `FunctionOrMethodCallExpr` and should not + * INTERNAL: This module contains the customizable definition of `CallExprBase` and should not * be referenced directly. */ module Impl { /** * A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details. */ - class FunctionOrMethodCallExpr extends Generated::FunctionOrMethodCallExpr { } + class CallExprBase extends Generated::CallExprBase { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/CallExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/CallExpr.qll index 66b4ce10cb71..2e41b664a4ee 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/CallExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/CallExpr.qll @@ -6,8 +6,8 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw +import codeql.rust.elements.internal.CallExprBaseImpl::Impl as CallExprBaseImpl import codeql.rust.elements.Expr -import codeql.rust.elements.internal.FunctionOrMethodCallExprImpl::Impl as FunctionOrMethodCallExprImpl /** * INTERNAL: This module contains the fully generated definition of `CallExpr` and should not @@ -25,7 +25,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::CallExpr` class directly. * Use the subclass `CallExpr`, where the following predicates are available. */ - class CallExpr extends Synth::TCallExpr, FunctionOrMethodCallExprImpl::FunctionOrMethodCallExpr { + class CallExpr extends Synth::TCallExpr, CallExprBaseImpl::CallExprBase { override string getAPrimaryQlClass() { result = "CallExpr" } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/FunctionOrMethodCallExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/CallExprBase.qll similarity index 51% rename from rust/ql/lib/codeql/rust/elements/internal/generated/FunctionOrMethodCallExpr.qll rename to rust/ql/lib/codeql/rust/elements/internal/generated/CallExprBase.qll index e4ecbaa1a699..046558c356d2 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/FunctionOrMethodCallExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/CallExprBase.qll @@ -1,6 +1,6 @@ // generated by codegen, do not edit /** - * This module provides the generated definition of `FunctionOrMethodCallExpr`. + * This module provides the generated definition of `CallExprBase`. * INTERNAL: Do not import directly. */ @@ -11,23 +11,23 @@ import codeql.rust.elements.Attr import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl /** - * INTERNAL: This module contains the fully generated definition of `FunctionOrMethodCallExpr` and should not + * INTERNAL: This module contains the fully generated definition of `CallExprBase` and should not * be referenced directly. */ module Generated { /** * A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details. - * INTERNAL: Do not reference the `Generated::FunctionOrMethodCallExpr` class directly. - * Use the subclass `FunctionOrMethodCallExpr`, where the following predicates are available. + * INTERNAL: Do not reference the `Generated::CallExprBase` class directly. + * Use the subclass `CallExprBase`, where the following predicates are available. */ - class FunctionOrMethodCallExpr extends Synth::TFunctionOrMethodCallExpr, ExprImpl::Expr { + class CallExprBase extends Synth::TCallExprBase, ExprImpl::Expr { /** - * Gets the argument list of this function or method call expression, if it exists. + * Gets the argument list of this call expression base, if it exists. */ ArgList getArgList() { result = - Synth::convertArgListFromRaw(Synth::convertFunctionOrMethodCallExprToRaw(this) - .(Raw::FunctionOrMethodCallExpr) + Synth::convertArgListFromRaw(Synth::convertCallExprBaseToRaw(this) + .(Raw::CallExprBase) .getArgList()) } @@ -37,22 +37,22 @@ module Generated { final predicate hasArgList() { exists(this.getArgList()) } /** - * Gets the `index`th attr of this function or method call expression (0-based). + * Gets the `index`th attr of this call expression base (0-based). */ Attr getAttr(int index) { result = - Synth::convertAttrFromRaw(Synth::convertFunctionOrMethodCallExprToRaw(this) - .(Raw::FunctionOrMethodCallExpr) + Synth::convertAttrFromRaw(Synth::convertCallExprBaseToRaw(this) + .(Raw::CallExprBase) .getAttr(index)) } /** - * Gets any of the attrs of this function or method call expression. + * Gets any of the attrs of this call expression base. */ final Attr getAnAttr() { result = this.getAttr(_) } /** - * Gets the number of attrs of this function or method call expression. + * Gets the number of attrs of this call expression base. */ final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll index de5cef9e70b5..4aeb89e8e85b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll @@ -6,8 +6,8 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw +import codeql.rust.elements.internal.CallExprBaseImpl::Impl as CallExprBaseImpl import codeql.rust.elements.Expr -import codeql.rust.elements.internal.FunctionOrMethodCallExprImpl::Impl as FunctionOrMethodCallExprImpl import codeql.rust.elements.GenericArgList import codeql.rust.elements.NameRef @@ -25,9 +25,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::MethodCallExpr` class directly. * Use the subclass `MethodCallExpr`, where the following predicates are available. */ - class MethodCallExpr extends Synth::TMethodCallExpr, - FunctionOrMethodCallExprImpl::FunctionOrMethodCallExpr - { + class MethodCallExpr extends Synth::TMethodCallExpr, CallExprBaseImpl::CallExprBase { override string getAPrimaryQlClass() { result = "MethodCallExpr" } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll index 4dbb92f77f92..5a895eff78b1 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -1380,6 +1380,28 @@ private module Impl { ) } + private Element getImmediateChildOfCallExprBase( + CallExprBase e, int index, string partialPredicateCall + ) { + exists(int b, int bExpr, int n, int nArgList, int nAttr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + nArgList = n + 1 and + nAttr = nArgList + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or + index = n and result = e.getArgList() and partialPredicateCall = "ArgList()" + or + result = e.getAttr(index - nArgList) and + partialPredicateCall = "Attr(" + (index - nArgList).toString() + ")" + ) + ) + } + private Element getImmediateChildOfCastExpr(CastExpr e, int index, string partialPredicateCall) { exists(int b, int bExpr, int n, int nAttr, int nExpr, int nTy | b = 0 and @@ -1691,28 +1713,6 @@ private module Impl { ) } - private Element getImmediateChildOfFunctionOrMethodCallExpr( - FunctionOrMethodCallExpr e, int index, string partialPredicateCall - ) { - exists(int b, int bExpr, int n, int nArgList, int nAttr | - b = 0 and - bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and - n = bExpr and - nArgList = n + 1 and - nAttr = nArgList + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - ( - none() - or - result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) - or - index = n and result = e.getArgList() and partialPredicateCall = "ArgList()" - or - result = e.getAttr(index - nArgList) and - partialPredicateCall = "Attr(" + (index - nArgList).toString() + ")" - ) - ) - } - private Element getImmediateChildOfIdentPat(IdentPat e, int index, string partialPredicateCall) { exists(int b, int bPat, int n, int nAttr, int nName, int nPat | b = 0 and @@ -2744,17 +2744,16 @@ private module Impl { } private Element getImmediateChildOfCallExpr(CallExpr e, int index, string partialPredicateCall) { - exists(int b, int bFunctionOrMethodCallExpr, int n, int nExpr | + exists(int b, int bCallExprBase, int n, int nExpr | b = 0 and - bFunctionOrMethodCallExpr = - b + 1 + - max(int i | i = -1 or exists(getImmediateChildOfFunctionOrMethodCallExpr(e, i, _)) | i) and - n = bFunctionOrMethodCallExpr and + bCallExprBase = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfCallExprBase(e, i, _)) | i) and + n = bCallExprBase and nExpr = n + 1 and ( none() or - result = getImmediateChildOfFunctionOrMethodCallExpr(e, index - b, partialPredicateCall) + result = getImmediateChildOfCallExprBase(e, index - b, partialPredicateCall) or index = n and result = e.getExpr() and partialPredicateCall = "Expr()" ) @@ -3080,21 +3079,18 @@ private module Impl { private Element getImmediateChildOfMethodCallExpr( MethodCallExpr e, int index, string partialPredicateCall ) { - exists( - int b, int bFunctionOrMethodCallExpr, int n, int nGenericArgList, int nNameRef, int nReceiver - | + exists(int b, int bCallExprBase, int n, int nGenericArgList, int nNameRef, int nReceiver | b = 0 and - bFunctionOrMethodCallExpr = - b + 1 + - max(int i | i = -1 or exists(getImmediateChildOfFunctionOrMethodCallExpr(e, i, _)) | i) and - n = bFunctionOrMethodCallExpr and + bCallExprBase = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfCallExprBase(e, i, _)) | i) and + n = bCallExprBase and nGenericArgList = n + 1 and nNameRef = nGenericArgList + 1 and nReceiver = nNameRef + 1 and ( none() or - result = getImmediateChildOfFunctionOrMethodCallExpr(e, index - b, partialPredicateCall) + result = getImmediateChildOfCallExprBase(e, index - b, partialPredicateCall) or index = n and result = e.getGenericArgList() and partialPredicateCall = "GenericArgList()" or diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index 57d3827561cf..28ee45ebef2a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -1395,6 +1395,22 @@ module Raw { Lifetime getLifetime() { break_expr_lifetimes(this, result) } } + /** + * INTERNAL: Do not use. + * A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details. + */ + class CallExprBase extends @call_expr_base, Expr { + /** + * Gets the argument list of this call expression base, if it exists. + */ + ArgList getArgList() { call_expr_base_arg_lists(this, result) } + + /** + * Gets the `index`th attr of this call expression base (0-based). + */ + Attr getAttr(int index) { call_expr_base_attrs(this, index, result) } + } + /** * INTERNAL: Do not use. * A cast expression. For example: @@ -1752,22 +1768,6 @@ module Raw { Expr getTemplate() { format_args_expr_templates(this, result) } } - /** - * INTERNAL: Do not use. - * A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details. - */ - class FunctionOrMethodCallExpr extends @function_or_method_call_expr, Expr { - /** - * Gets the argument list of this function or method call expression, if it exists. - */ - ArgList getArgList() { function_or_method_call_expr_arg_lists(this, result) } - - /** - * Gets the `index`th attr of this function or method call expression (0-based). - */ - Attr getAttr(int index) { function_or_method_call_expr_attrs(this, index, result) } - } - /** * INTERNAL: Do not use. * A binding pattern. For example: @@ -2959,7 +2959,7 @@ module Raw { * foo(1) = 4; * ``` */ - class CallExpr extends @call_expr, FunctionOrMethodCallExpr { + class CallExpr extends @call_expr, CallExprBase { override string toString() { result = "CallExpr" } /** @@ -3311,7 +3311,7 @@ module Raw { * x.foo::(42); * ``` */ - class MethodCallExpr extends @method_call_expr, FunctionOrMethodCallExpr { + class MethodCallExpr extends @method_call_expr, CallExprBase { override string toString() { result = "MethodCallExpr" } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll index 192f22dae05a..bd3ddf9feb47 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll @@ -606,28 +606,28 @@ module Synth { /** * INTERNAL: Do not use. */ - class TExpr = - TArrayExpr or TAsmExpr or TAwaitExpr or TBecomeExpr or TBinaryExpr or TBlockExpr or - TBreakExpr or TCastExpr or TClosureExpr or TContinueExpr or TFieldExpr or TForExpr or - TFormatArgsExpr or TFunctionOrMethodCallExpr or TIfExpr or TIndexExpr or TLetExpr or - TLiteralExpr or TLoopExpr or TMacroExpr or TMatchExpr or TOffsetOfExpr or TParenExpr or - TPathExpr or TPrefixExpr or TRangeExpr or TRecordExpr or TRefExpr or TReturnExpr or - TTryExpr or TTupleExpr or TUnderscoreExpr or TWhileExpr or TYeetExpr or TYieldExpr; + class TCallExprBase = TCallExpr or TMethodCallExpr; /** * INTERNAL: Do not use. */ - class TExternItem = TFunction or TMacroCall or TStatic or TTypeAlias; + class TExpr = + TArrayExpr or TAsmExpr or TAwaitExpr or TBecomeExpr or TBinaryExpr or TBlockExpr or + TBreakExpr or TCallExprBase or TCastExpr or TClosureExpr or TContinueExpr or TFieldExpr or + TForExpr or TFormatArgsExpr or TIfExpr or TIndexExpr or TLetExpr or TLiteralExpr or + TLoopExpr or TMacroExpr or TMatchExpr or TOffsetOfExpr or TParenExpr or TPathExpr or + TPrefixExpr or TRangeExpr or TRecordExpr or TRefExpr or TReturnExpr or TTryExpr or + TTupleExpr or TUnderscoreExpr or TWhileExpr or TYeetExpr or TYieldExpr; /** * INTERNAL: Do not use. */ - class TFieldList = TRecordFieldList or TTupleFieldList; + class TExternItem = TFunction or TMacroCall or TStatic or TTypeAlias; /** * INTERNAL: Do not use. */ - class TFunctionOrMethodCallExpr = TCallExpr or TMethodCallExpr; + class TFieldList = TRecordFieldList or TTupleFieldList; /** * INTERNAL: Do not use. @@ -1669,6 +1669,16 @@ module Synth { result = convertWherePredFromRaw(e) } + /** + * INTERNAL: Do not use. + * Converts a raw DB element to a synthesized `TCallExprBase`, if possible. + */ + TCallExprBase convertCallExprBaseFromRaw(Raw::Element e) { + result = convertCallExprFromRaw(e) + or + result = convertMethodCallExprFromRaw(e) + } + /** * INTERNAL: Do not use. * Converts a raw DB element to a synthesized `TElement`, if possible. @@ -1698,6 +1708,8 @@ module Synth { or result = convertBreakExprFromRaw(e) or + result = convertCallExprBaseFromRaw(e) + or result = convertCastExprFromRaw(e) or result = convertClosureExprFromRaw(e) @@ -1710,8 +1722,6 @@ module Synth { or result = convertFormatArgsExprFromRaw(e) or - result = convertFunctionOrMethodCallExprFromRaw(e) - or result = convertIfExprFromRaw(e) or result = convertIndexExprFromRaw(e) @@ -1779,16 +1789,6 @@ module Synth { result = convertTupleFieldListFromRaw(e) } - /** - * INTERNAL: Do not use. - * Converts a raw DB element to a synthesized `TFunctionOrMethodCallExpr`, if possible. - */ - TFunctionOrMethodCallExpr convertFunctionOrMethodCallExprFromRaw(Raw::Element e) { - result = convertCallExprFromRaw(e) - or - result = convertMethodCallExprFromRaw(e) - } - /** * INTERNAL: Do not use. * Converts a raw DB element to a synthesized `TGenericArg`, if possible. @@ -2947,6 +2947,16 @@ module Synth { result = convertWherePredToRaw(e) } + /** + * INTERNAL: Do not use. + * Converts a synthesized `TCallExprBase` to a raw DB element, if possible. + */ + Raw::Element convertCallExprBaseToRaw(TCallExprBase e) { + result = convertCallExprToRaw(e) + or + result = convertMethodCallExprToRaw(e) + } + /** * INTERNAL: Do not use. * Converts a synthesized `TElement` to a raw DB element, if possible. @@ -2976,6 +2986,8 @@ module Synth { or result = convertBreakExprToRaw(e) or + result = convertCallExprBaseToRaw(e) + or result = convertCastExprToRaw(e) or result = convertClosureExprToRaw(e) @@ -2988,8 +3000,6 @@ module Synth { or result = convertFormatArgsExprToRaw(e) or - result = convertFunctionOrMethodCallExprToRaw(e) - or result = convertIfExprToRaw(e) or result = convertIndexExprToRaw(e) @@ -3057,16 +3067,6 @@ module Synth { result = convertTupleFieldListToRaw(e) } - /** - * INTERNAL: Do not use. - * Converts a synthesized `TFunctionOrMethodCallExpr` to a raw DB element, if possible. - */ - Raw::Element convertFunctionOrMethodCallExprToRaw(TFunctionOrMethodCallExpr e) { - result = convertCallExprToRaw(e) - or - result = convertMethodCallExprToRaw(e) - } - /** * INTERNAL: Do not use. * Converts a synthesized `TGenericArg` to a raw DB element, if possible. diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index 113c3fe7d7e2..bb46706d3a35 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -273,13 +273,13 @@ closure_binder_generic_param_lists( | @binary_expr | @block_expr | @break_expr +| @call_expr_base | @cast_expr | @closure_expr | @continue_expr | @field_expr | @for_expr | @format_args_expr -| @function_or_method_call_expr | @if_expr | @index_expr | @let_expr @@ -1300,6 +1300,24 @@ break_expr_lifetimes( int lifetime: @lifetime ref ); +@call_expr_base = + @call_expr +| @method_call_expr +; + +#keyset[id] +call_expr_base_arg_lists( + int id: @call_expr_base ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +call_expr_base_attrs( + int id: @call_expr_base ref, + int index: int ref, + int attr: @attr ref +); + cast_exprs( unique int id: @cast_expr ); @@ -1570,24 +1588,6 @@ format_args_expr_templates( int template: @expr ref ); -@function_or_method_call_expr = - @call_expr -| @method_call_expr -; - -#keyset[id] -function_or_method_call_expr_arg_lists( - int id: @function_or_method_call_expr ref, - int arg_list: @arg_list ref -); - -#keyset[id, index] -function_or_method_call_expr_attrs( - int id: @function_or_method_call_expr ref, - int index: int ref, - int attr: @attr ref -); - ident_pats( unique int id: @ident_pat ); diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index 7fafb26bbb31..5dcd085e4050 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -185,7 +185,7 @@ class _: ``` """ -class FunctionOrMethodCallExpr(Expr): +class CallExprBase(Expr): """ A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details. """ @@ -193,7 +193,7 @@ class FunctionOrMethodCallExpr(Expr): attrs: list["Attr"] | child -@annotate(CallExpr, replace_bases={Expr: FunctionOrMethodCallExpr}) +@annotate(CallExpr, replace_bases={Expr: CallExprBase}) class _: """ A function call expression. For example: @@ -207,7 +207,7 @@ class _: arg_list: drop attrs: drop -@annotate(MethodCallExpr, replace_bases={Expr: FunctionOrMethodCallExpr}) +@annotate(MethodCallExpr, replace_bases={Expr: CallExprBase}) class _: """ A method call expression. For example: From 9fad5410c0bc3b6a7745990d130daf1884fc735b Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Thu, 10 Oct 2024 16:50:20 +0200 Subject: [PATCH 070/217] Rust: implement CFG for macros --- .../internal/ControlFlowGraphImpl.qll | 54 +++++++++++++++++-- .../test/library-tests/variables/Cfg.expected | 38 +++++++++++-- .../unusedentities/UnreachableCode.expected | 24 --------- 3 files changed, 83 insertions(+), 33 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index 8bb27c3d9910..92124ee17c0c 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -143,8 +143,7 @@ class BlockExprTree extends StandardPostOrderTree, BlockExpr { override AstNode getChildNode(int i) { result = super.getStmtList().getStatement(i) or - not exists(super.getStmtList().getStatement(i)) and - (exists(super.getStmtList().getStatement(i - 1)) or i = 0) and + i = super.getStmtList().getNumberOfStatements() and result = super.getStmtList().getTailExpr() } @@ -241,6 +240,14 @@ class IfExprTree extends PostOrderTree instanceof IfExpr { } } +class FormatArgsExprTree extends StandardPostOrderTree instanceof FormatArgsExpr { + override AstNode getChildNode(int i) { + i = -1 and result = super.getTemplate() + or + result = super.getArg(i).getExpr() + } +} + class IndexExprTree extends StandardPostOrderTree instanceof IndexExpr { override AstNode getChildNode(int i) { i = 0 and result = super.getBase() @@ -249,7 +256,12 @@ class IndexExprTree extends StandardPostOrderTree instanceof IndexExpr { } } -class ItemTree extends LeafTree, Item { } +class ItemTree extends LeafTree, Item { + ItemTree() { + not this instanceof MacroCall and + this = [any(StmtList s).getAStatement(), any(MacroStmts s).getAStatement()] + } +} // `LetExpr` is a pre-order tree such that the pattern itself ends up // dominating successors in the graph in the same way that patterns do in @@ -391,8 +403,40 @@ class ForExprTree extends LoopingExprTree instanceof ForExpr { } } -// TODO: replace with expanded macro once the extractor supports it -class MacroExprTree extends LeafTree, MacroExpr { } +class MacroCallTree extends ControlFlowTree instanceof MacroCall { + override predicate first(AstNode first) { + first(super.getExpanded(), first) + or + not exists(super.getExpanded()) and first = this + } + + override predicate last(AstNode last, Completion c) { + last(super.getExpanded(), last, c) + or + not exists(super.getExpanded()) and last = this + } + + override predicate succ(AstNode pred, AstNode succ, Completion c) { none() } + + override predicate propagatesAbnormal(AstNode child) { none() } +} + +class MacroExprTree extends StandardPostOrderTree instanceof MacroExpr { + override AstNode getChildNode(int i) { i = 0 and result = super.getMacroCall() } +} + +class MacroPatTree extends StandardPostOrderTree instanceof MacroExpr { + override AstNode getChildNode(int i) { i = 0 and result = super.getMacroCall() } +} + +class MacroStmtsTree extends StandardPreOrderTree instanceof MacroStmts { + override AstNode getChildNode(int i) { + result = super.getStatement(i) + or + i = super.getNumberOfStatements() and + result = super.getExpr() + } +} class MatchArmTree extends ControlFlowTree instanceof MatchArm { override predicate propagatesAbnormal(AstNode child) { child = super.getExpr() } diff --git a/rust/ql/test/library-tests/variables/Cfg.expected b/rust/ql/test/library-tests/variables/Cfg.expected index 89e7aaec297e..aaec24d6b555 100644 --- a/rust/ql/test/library-tests/variables/Cfg.expected +++ b/rust/ql/test/library-tests/variables/Cfg.expected @@ -3,12 +3,30 @@ edges | variables.rs:3:1:5:1 | exit print_str (normal) | variables.rs:3:1:5:1 | exit print_str | | | variables.rs:3:23:5:1 | BlockExpr | variables.rs:3:1:5:1 | exit print_str (normal) | | | variables.rs:4:5:4:21 | MacroExpr | variables.rs:3:23:5:1 | BlockExpr | | -| variables.rs:4:5:4:22 | ExprStmt | variables.rs:4:5:4:21 | MacroExpr | | +| variables.rs:4:5:4:21 | PathExpr | variables.rs:4:14:4:17 | "{}\\n" | | +| variables.rs:4:5:4:22 | ExprStmt | variables.rs:4:14:4:20 | MacroStmts | | +| variables.rs:4:14:4:17 | "{}\\n" | variables.rs:4:20:4:20 | s | | +| variables.rs:4:14:4:20 | BlockExpr | variables.rs:4:5:4:21 | MacroExpr | | +| variables.rs:4:14:4:20 | CallExpr | variables.rs:4:14:4:20 | BlockExpr | | +| variables.rs:4:14:4:20 | ExprStmt | variables.rs:4:5:4:21 | PathExpr | | +| variables.rs:4:14:4:20 | FormatArgsExpr | variables.rs:4:14:4:20 | MacroExpr | | +| variables.rs:4:14:4:20 | MacroExpr | variables.rs:4:14:4:20 | CallExpr | | +| variables.rs:4:14:4:20 | MacroStmts | variables.rs:4:14:4:20 | ExprStmt | | +| variables.rs:4:20:4:20 | s | variables.rs:4:14:4:20 | FormatArgsExpr | | | variables.rs:7:1:9:1 | enter print_i64 | variables.rs:8:5:8:22 | ExprStmt | | | variables.rs:7:1:9:1 | exit print_i64 (normal) | variables.rs:7:1:9:1 | exit print_i64 | | | variables.rs:7:22:9:1 | BlockExpr | variables.rs:7:1:9:1 | exit print_i64 (normal) | | | variables.rs:8:5:8:21 | MacroExpr | variables.rs:7:22:9:1 | BlockExpr | | -| variables.rs:8:5:8:22 | ExprStmt | variables.rs:8:5:8:21 | MacroExpr | | +| variables.rs:8:5:8:21 | PathExpr | variables.rs:8:14:8:17 | "{}\\n" | | +| variables.rs:8:5:8:22 | ExprStmt | variables.rs:8:14:8:20 | MacroStmts | | +| variables.rs:8:14:8:17 | "{}\\n" | variables.rs:8:20:8:20 | i | | +| variables.rs:8:14:8:20 | BlockExpr | variables.rs:8:5:8:21 | MacroExpr | | +| variables.rs:8:14:8:20 | CallExpr | variables.rs:8:14:8:20 | BlockExpr | | +| variables.rs:8:14:8:20 | ExprStmt | variables.rs:8:5:8:21 | PathExpr | | +| variables.rs:8:14:8:20 | FormatArgsExpr | variables.rs:8:14:8:20 | MacroExpr | | +| variables.rs:8:14:8:20 | MacroExpr | variables.rs:8:14:8:20 | CallExpr | | +| variables.rs:8:14:8:20 | MacroStmts | variables.rs:8:14:8:20 | ExprStmt | | +| variables.rs:8:20:8:20 | i | variables.rs:8:14:8:20 | FormatArgsExpr | | | variables.rs:11:1:14:1 | enter immutable_variable | variables.rs:12:5:12:17 | LetStmt | | | variables.rs:11:1:14:1 | exit immutable_variable (normal) | variables.rs:11:1:14:1 | exit immutable_variable | | | variables.rs:11:25:14:1 | BlockExpr | variables.rs:11:1:14:1 | exit immutable_variable (normal) | | @@ -149,12 +167,16 @@ edges | variables.rs:82:1:88:1 | exit let_pattern4 (normal) | variables.rs:82:1:88:1 | exit let_pattern4 | | | variables.rs:82:19:88:1 | BlockExpr | variables.rs:82:1:88:1 | exit let_pattern4 (normal) | | | variables.rs:83:5:86:10 | LetStmt | variables.rs:83:34:83:37 | PathExpr | | -| variables.rs:83:9:83:16 | TupleStructPat | variables.rs:85:13:85:19 | MacroExpr | no-match | +| variables.rs:83:9:83:16 | TupleStructPat | variables.rs:85:13:85:19 | MacroStmts | no-match | | variables.rs:83:9:83:16 | TupleStructPat | variables.rs:87:5:87:18 | ExprStmt | match | | variables.rs:83:34:83:37 | PathExpr | variables.rs:83:39:83:42 | "x5" | | | variables.rs:83:34:83:43 | CallExpr | variables.rs:83:9:83:16 | TupleStructPat | | | variables.rs:83:39:83:42 | "x5" | variables.rs:83:34:83:43 | CallExpr | | +| variables.rs:85:13:85:19 | "not yet implemented" | variables.rs:85:13:85:19 | CallExpr | | +| variables.rs:85:13:85:19 | CallExpr | variables.rs:85:13:85:19 | MacroExpr | | | variables.rs:85:13:85:19 | MacroExpr | variables.rs:84:14:86:9 | BlockExpr | | +| variables.rs:85:13:85:19 | MacroStmts | variables.rs:85:13:85:19 | PathExpr | | +| variables.rs:85:13:85:19 | PathExpr | variables.rs:85:13:85:19 | "not yet implemented" | | | variables.rs:87:5:87:13 | PathExpr | variables.rs:87:15:87:16 | x5 | | | variables.rs:87:5:87:17 | CallExpr | variables.rs:82:19:88:1 | BlockExpr | | | variables.rs:87:5:87:18 | ExprStmt | variables.rs:87:5:87:13 | PathExpr | | @@ -279,10 +301,18 @@ edges | variables.rs:163:14:163:22 | PathExpr | variables.rs:163:24:163:34 | id_variable | | | variables.rs:163:14:163:35 | CallExpr | variables.rs:160:5:169:5 | MatchExpr | | | variables.rs:163:24:163:34 | id_variable | variables.rs:163:14:163:35 | CallExpr | | -| variables.rs:164:9:164:38 | RecordPat | variables.rs:165:13:165:52 | MacroExpr | match | +| variables.rs:164:9:164:38 | RecordPat | variables.rs:165:22:165:51 | MacroStmts | match | | variables.rs:164:9:164:38 | RecordPat | variables.rs:167:9:167:29 | RecordPat | no-match | | variables.rs:164:43:166:9 | BlockExpr | variables.rs:160:5:169:5 | MatchExpr | | | variables.rs:165:13:165:52 | MacroExpr | variables.rs:164:43:166:9 | BlockExpr | | +| variables.rs:165:13:165:52 | PathExpr | variables.rs:165:22:165:51 | "Found an id in another range\\n" | | +| variables.rs:165:22:165:51 | "Found an id in another range\\n" | variables.rs:165:22:165:51 | FormatArgsExpr | | +| variables.rs:165:22:165:51 | BlockExpr | variables.rs:165:13:165:52 | MacroExpr | | +| variables.rs:165:22:165:51 | CallExpr | variables.rs:165:22:165:51 | BlockExpr | | +| variables.rs:165:22:165:51 | ExprStmt | variables.rs:165:13:165:52 | PathExpr | | +| variables.rs:165:22:165:51 | FormatArgsExpr | variables.rs:165:22:165:51 | MacroExpr | | +| variables.rs:165:22:165:51 | MacroExpr | variables.rs:165:22:165:51 | CallExpr | | +| variables.rs:165:22:165:51 | MacroStmts | variables.rs:165:22:165:51 | ExprStmt | | | variables.rs:167:9:167:29 | RecordPat | variables.rs:168:13:168:21 | PathExpr | match | | variables.rs:168:13:168:21 | PathExpr | variables.rs:168:23:168:24 | id | | | variables.rs:168:13:168:25 | CallExpr | variables.rs:160:5:169:5 | MatchExpr | | diff --git a/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected b/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected index dac61fb99462..18831b723278 100644 --- a/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected +++ b/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected @@ -1,34 +1,10 @@ -| main.rs:14:14:14:24 | ExprStmt | This code is never reached. | -| main.rs:17:18:17:28 | ExprStmt | This code is never reached. | -| main.rs:20:14:20:24 | ExprStmt | This code is never reached. | -| main.rs:21:5:21:19 | ExprStmt | This code is never reached. | -| main.rs:21:5:21:19 | ExprStmt | This code is never reached. | -| main.rs:39:14:39:24 | ExprStmt | This code is never reached. | -| main.rs:48:14:48:24 | ExprStmt | This code is never reached. | -| main.rs:56:14:56:24 | ExprStmt | This code is never reached. | -| main.rs:60:14:60:24 | ExprStmt | This code is never reached. | -| main.rs:68:14:68:24 | ExprStmt | This code is never reached. | -| main.rs:94:14:94:45 | ExprStmt | This code is never reached. | -| main.rs:97:14:97:38 | ExprStmt | This code is never reached. | -| main.rs:99:14:99:38 | ExprStmt | This code is never reached. | -| main.rs:112:14:112:32 | ExprStmt | This code is never reached. | -| main.rs:117:18:117:33 | ExprStmt | This code is never reached. | -| main.rs:171:18:171:29 | ExprStmt | This code is never reached. | -| main.rs:176:9:176:24 | ExprStmt | This code is never reached. | -| main.rs:176:9:176:24 | ExprStmt | This code is never reached. | -| main.rs:332:11:332:51 | ExprStmt | This code is never reached. | | unreachable.rs:12:3:12:17 | ExprStmt | This code is never reached. | | unreachable.rs:20:3:20:17 | ExprStmt | This code is never reached. | | unreachable.rs:32:3:32:17 | ExprStmt | This code is never reached. | | unreachable.rs:39:3:39:17 | ExprStmt | This code is never reached. | | unreachable.rs:60:2:60:16 | ExprStmt | This code is never reached. | -| unreachable.rs:66:10:66:19 | ExprStmt | This code is never reached. | | unreachable.rs:100:16:100:23 | ExprStmt | This code is never reached. | -| unreachable.rs:101:3:101:17 | ExprStmt | This code is never reached. | -| unreachable.rs:102:16:102:23 | ExprStmt | This code is never reached. | | unreachable.rs:108:15:108:22 | ExprStmt | This code is never reached. | -| unreachable.rs:109:3:109:17 | ExprStmt | This code is never reached. | -| unreachable.rs:110:15:110:22 | ExprStmt | This code is never reached. | | unreachable.rs:124:2:124:16 | ExprStmt | This code is never reached. | | unreachable.rs:134:2:134:16 | ExprStmt | This code is never reached. | | unreachable.rs:141:3:141:17 | ExprStmt | This code is never reached. | From b284a2a7c0aa778832b1b52798b546beb2bdae6e Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 11 Oct 2024 12:00:30 +0200 Subject: [PATCH 071/217] Rust: Add `Callable` as a base class of `Function` and `ClosureExpr` --- misc/codegen/lib/schemadefs.py | 5 ++++- rust/schema/annotations.py | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/misc/codegen/lib/schemadefs.py b/misc/codegen/lib/schemadefs.py index ea8d6cf09ce7..199043de7e6f 100644 --- a/misc/codegen/lib/schemadefs.py +++ b/misc/codegen/lib/schemadefs.py @@ -1,6 +1,7 @@ from typing import ( Callable as _Callable, Dict as _Dict, + List as _List, ClassVar as _ClassVar, ) from misc.codegen.lib import schema as _schema @@ -278,7 +279,7 @@ def __or__(self, other: _schema.PropertyModifier): drop = object() -def annotate(annotated_cls: type, replace_bases: _Dict[type, type] | None = None) -> _Callable[[type], _PropertyAnnotation]: +def annotate(annotated_cls: type, add_bases: _List[type] | None = None, replace_bases: _Dict[type, type] | None = None) -> _Callable[[type], _PropertyAnnotation]: """ Add or modify schema annotations after a class has been defined previously. @@ -295,6 +296,8 @@ def decorator(cls: type) -> _PropertyAnnotation: _ClassPragma(p, value=v)(annotated_cls) if replace_bases: annotated_cls.__bases__ = tuple(replace_bases.get(b, b) for b in annotated_cls.__bases__) + if add_bases: + annotated_cls.__bases__ = tuple(annotated_cls.__bases__) + tuple(add_bases) for a in dir(cls): if a.startswith(_schema.inheritable_pragma_prefix): setattr(annotated_cls, a, getattr(cls, a)) diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index 5dcd085e4050..1d829951c43f 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -1520,3 +1520,21 @@ class _: todo!() ``` """ + +class Callable(AstNode): + """ + A callable. Either a `Function` or a `ClosureExpr`. + """ + param_list: optional["ParamList"] | child + attrs: list["Attr"] | child + +@annotate(Function, add_bases=[Callable]) +class _: + param_list: drop + attrs: drop + + +@annotate(ClosureExpr, add_bases=[Callable]) +class _: + param_list: drop + attrs: drop From 8cc349e85f76697e92d4ce9c1166681ae63d0353 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 11 Oct 2024 12:00:49 +0200 Subject: [PATCH 072/217] Rust: Run codegen --- rust/extractor/src/generated/.generated.list | 2 +- rust/extractor/src/generated/top.rs | 80 ++++++++++++++++--- rust/ql/.generated.list | 23 +++--- rust/ql/.gitattributes | 3 + rust/ql/lib/codeql/rust/elements.qll | 1 + rust/ql/lib/codeql/rust/elements/Callable.qll | 14 ++++ .../lib/codeql/rust/elements/ClosureExpr.qll | 3 +- rust/ql/lib/codeql/rust/elements/Function.qll | 3 +- .../rust/elements/internal/CallableImpl.qll | 19 +++++ .../elements/internal/generated/Callable.qll | 57 +++++++++++++ .../internal/generated/ClosureExpr.qll | 40 +--------- .../elements/internal/generated/Function.qll | 38 +-------- .../internal/generated/ParentChild.qll | 72 +++++++++-------- .../rust/elements/internal/generated/Raw.qll | 40 +++++----- .../elements/internal/generated/Synth.qll | 33 +++++++- rust/ql/lib/rust.dbscheme | 45 +++++------ .../generated/ClosureExpr/ClosureExpr.ql | 13 ++- .../generated/Function/Function.ql | 19 +++-- 18 files changed, 304 insertions(+), 201 deletions(-) create mode 100644 rust/ql/lib/codeql/rust/elements/Callable.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/CallableImpl.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/generated/Callable.qll diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index 0f2bb009eebc..c4cff89bf313 100644 --- a/rust/extractor/src/generated/.generated.list +++ b/rust/extractor/src/generated/.generated.list @@ -1,2 +1,2 @@ mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 -top.rs 170c3892b5cbb8be28ae420a92ebab3b96b354c3b7ea2ba96edec64e639e8455 170c3892b5cbb8be28ae420a92ebab3b96b354c3b7ea2ba96edec64e639e8455 +top.rs 7c68cdb6a44e3f1ac27601f006a8c583ef1e5f198fd9c30a6710ffade2612d80 7c68cdb6a44e3f1ac27601f006a8c583ef1e5f198fd9c30a6710ffade2612d80 diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index 33f321246d4c..29521e96a3a4 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -390,6 +390,42 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct Callable { + _unused: () +} + +impl trap::TrapClass for Callable { + fn class_name() -> &'static str { "Callable" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Callable is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Callable is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Callable is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct ClosureBinder { pub id: trap::TrapId, @@ -3769,6 +3805,7 @@ impl From> for trap::Label { #[derive(Debug)] pub struct ClosureExpr { pub id: trap::TrapId, + pub param_list: Option>, pub attrs: Vec>, pub body: Option>, pub closure_binder: Option>, @@ -3777,7 +3814,6 @@ pub struct ClosureExpr { pub is_gen: bool, pub is_move: bool, pub is_static: bool, - pub param_list: Option>, pub ret_type: Option>, } @@ -3788,8 +3824,11 @@ impl trap::TrapEntry for ClosureExpr { fn emit(self, id: trap::Label, out: &mut trap::Writer) { out.add_tuple("closure_exprs", vec![id.into()]); + if let Some(v) = self.param_list { + out.add_tuple("callable_param_lists", vec![id.into(), v.into()]); + } for (i, v) in self.attrs.into_iter().enumerate() { - out.add_tuple("closure_expr_attrs", vec![id.into(), i.into(), v.into()]); + out.add_tuple("callable_attrs", vec![id.into(), i.into(), v.into()]); } if let Some(v) = self.body { out.add_tuple("closure_expr_bodies", vec![id.into(), v.into()]); @@ -3812,9 +3851,6 @@ impl trap::TrapEntry for ClosureExpr { if self.is_static { out.add_tuple("closure_expr_is_static", vec![id.into()]); } - if let Some(v) = self.param_list { - out.add_tuple("closure_expr_param_lists", vec![id.into(), v.into()]); - } if let Some(v) = self.ret_type { out.add_tuple("closure_expr_ret_types", vec![id.into(), v.into()]); } @@ -3834,6 +3870,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme ClosureExpr is a subclass of Callable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + impl From> for trap::Label { fn from(value: trap::Label) -> Self { // SAFETY: this is safe because in the dbscheme ClosureExpr is a subclass of Element @@ -8400,8 +8445,9 @@ impl From> for trap::Label { #[derive(Debug)] pub struct Function { pub id: trap::TrapId, - pub abi: Option>, + pub param_list: Option>, pub attrs: Vec>, + pub abi: Option>, pub body: Option>, pub generic_param_list: Option>, pub is_async: bool, @@ -8410,7 +8456,6 @@ pub struct Function { pub is_gen: bool, pub is_unsafe: bool, pub name: Option>, - pub param_list: Option>, pub ret_type: Option>, pub visibility: Option>, pub where_clause: Option>, @@ -8423,11 +8468,14 @@ impl trap::TrapEntry for Function { fn emit(self, id: trap::Label, out: &mut trap::Writer) { out.add_tuple("functions", vec![id.into()]); - if let Some(v) = self.abi { - out.add_tuple("function_abis", vec![id.into(), v.into()]); + if let Some(v) = self.param_list { + out.add_tuple("callable_param_lists", vec![id.into(), v.into()]); } for (i, v) in self.attrs.into_iter().enumerate() { - out.add_tuple("function_attrs", vec![id.into(), i.into(), v.into()]); + out.add_tuple("callable_attrs", vec![id.into(), i.into(), v.into()]); + } + if let Some(v) = self.abi { + out.add_tuple("function_abis", vec![id.into(), v.into()]); } if let Some(v) = self.body { out.add_tuple("function_bodies", vec![id.into(), v.into()]); @@ -8453,9 +8501,6 @@ impl trap::TrapEntry for Function { if let Some(v) = self.name { out.add_tuple("function_names", vec![id.into(), v.into()]); } - if let Some(v) = self.param_list { - out.add_tuple("function_param_lists", vec![id.into(), v.into()]); - } if let Some(v) = self.ret_type { out.add_tuple("function_ret_types", vec![id.into(), v.into()]); } @@ -8490,6 +8535,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Function is a subclass of Callable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + impl From> for trap::Label { fn from(value: trap::Label) -> Self { // SAFETY: this is safe because in the dbscheme Function is a subclass of Element diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 5938d23a7b5e..4d8f4fe0c9f5 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -16,9 +16,10 @@ lib/codeql/rust/elements/BoxPat.qll 1b2c3fff171aa6aa238c9460b122f26c79e04577cea6 lib/codeql/rust/elements/BreakExpr.qll 7ca3807a20e9a9a988d1fd7abebf240325ed422fcb45c719ba46272f031f94db dffb7379d3f3ba220acfbd05eb7bb6cfd9cfda211e9c8b1f5240ca5fa61be3fc lib/codeql/rust/elements/CallExpr.qll f336500ca7a611b164d48b90e80edb0c0d3816792b0ececce659ac1ff1ffeb3e f99a9c55466418ef53860c44d9f2d6161af4b492178ddd9e5870dff742b70ae5 lib/codeql/rust/elements/CallExprBase.qll 2846202b5208b541977500286951d96487bf555838c6c16cdd006a71e383745a c789d412bf099c624329379e0c7d94fa0d23ae2edea7a25a2ea0f3c0042ccf62 +lib/codeql/rust/elements/Callable.qll e1ed21a7e6bd2426f6ccd0e46cee506d8ebf90a6fdc4dca0979157da439853aa 02f6c09710116ce82157aec9a5ec706983c38e4d85cc631327baf8d409b018c6 lib/codeql/rust/elements/CastExpr.qll ba281bde130f43c486c4ad889539b77fba9e41afdf7980e50b6a8696a1ec7527 61257003d395896ec60729d0bc01da36697615bb725d07141255fbb5c44e50a0 lib/codeql/rust/elements/ClosureBinder.qll 977df800f97cc9b03fffb5e5e1fc6acd08a2938e04cb6ad91108784a15b0d510 f6fad4127226fe1dff2f16416d8a7fde5d8ab4a88f30e443ac5e5ff618de3e05 -lib/codeql/rust/elements/ClosureExpr.qll 8f06357ae134e42c073eef994c83c04b8cf294fe33b286dbd75c0e705ce29d05 9d9e282d965fed723965376801d4afa49444d1d9be9b093d02e276729a2cf7ad +lib/codeql/rust/elements/ClosureExpr.qll 192f67bb98d455f7de9eb871fc8f7353dfd991b857ed9fe65d01ef8610ece852 af99426b33dcf19ca4b97817dd94dd102cb0884c30bf7d947e9e6762e1c152ee lib/codeql/rust/elements/Comment.qll fedad50575125e9a64a8a8776a8c1dbf1e76df990f01849d9f0955f9d74cb2a6 8eb1afad1e1007a4f0090fdac65d81726b23eda6517d067fd0185f70f17635ab lib/codeql/rust/elements/Const.qll 2843a870e2abdf5b63fbea13f8a9ec4981b74369adec2ed3ce00a7d6f5a6fee3 c0bdb467cce63dcd3c65b21ef0836d8bf4e6c8d7d70049df8581fd35fdd03083 lib/codeql/rust/elements/ConstArg.qll f37b34417503bbd2f3ce09b3211d8fa71f6a954970c2738c73be6c55f204e58e 15ef5e189b67cfdfe4d16909e0b411ac8fdd4ef187c328bdede03a1a5e416b54 @@ -41,7 +42,7 @@ lib/codeql/rust/elements/ForExpr.qll 312804d53dd9236a2f2a15c9d6ec348b46e139a54eb lib/codeql/rust/elements/ForType.qll 0036bed8749358c356d78c4a0eef40d73e2796284293cde5604ae70ddd6d0470 4edcaf8f7c67d42ebe3ebb1be6a7643758717d4fe88f5f648b6a1c5ff4ee4de7 lib/codeql/rust/elements/FormatArgsArg.qll 5bc9b4cd1bac7131165836e93838c45452a08ea6011741cbddace3cbf9c69440 f825140e98dc9800d5c045402186793c7b21511448e2f6bf6402d1e06305219c lib/codeql/rust/elements/FormatArgsExpr.qll f2ffad5a1105b29a8437c8ed6cf918cfcf4d65ac164bbf1be0585c3b673ca749 3ba20dc312a0a994bb43b37b2db72cbd4e06061b97918fa0e84ce355070ffbeb -lib/codeql/rust/elements/Function.qll 736c53408f8674c88c352cd1f08f7c77e51551c68ef802f2e1c1aaf3d44fa8e9 6b52dbea081a5e799f1a2cedd57be5485bc8e018ded7249a1852343053d849a6 +lib/codeql/rust/elements/Function.qll 2c76c2c7036891996b1f0ebde16c414edf37ebb44ff9c3483088dc6218733e07 d84d017d98aa240bf3bee6502a030aa8cfb7ed95425ffa9853e73b41485e1f4a lib/codeql/rust/elements/GenericArg.qll 5f11ce0e3c5f08de84db61f56ba1b984652455ba6b95a8b8a5b5a235913d4072 756b6a73d66fde45bdcc65ce2362a5b1391af2927e6d54b6550b3ecd5fd11e75 lib/codeql/rust/elements/GenericArgList.qll dcf274db517b0e8f19e4545d77f86cdd4066ff2805e68c808d0bb5750b49f569 1055a82929e850264e501b367ef4d314a3e6bb8943ec95f4284d157fb4d0092f lib/codeql/rust/elements/GenericParam.qll b58448b808d6dfa05db9574f54c22ce51f0b1d78784263c75a95d6bfc787067d 4afbab71fe717d7d7d3e2f60ea8c3d97bcb29b17b4efb79eabfe8f070edcb9bb @@ -187,6 +188,7 @@ lib/codeql/rust/elements/internal/BreakExprConstructor.qll 356be043c28e0b34fdf92 lib/codeql/rust/elements/internal/CallExprBaseImpl.qll d2749cc1a9d7ee8bf7f34b6c3e0238a576a68e439a8c10a503c164ff45ffcbeb ffc7b0a8841945fe6736b0e1aed7d9ed69185db03dee2b16da121325b39397c7 lib/codeql/rust/elements/internal/CallExprConstructor.qll 742b38e862e2cf82fd1ecc4d4fc5b4782a9c7c07f031452b2bae7aa59d5aa13a cad6e0a8be21d91b20ac2ec16cab9c30eae810b452c0f1992ed87d5c7f4144dc lib/codeql/rust/elements/internal/CallExprImpl.qll 7e48610680ba6f2876a1a005ab0743496dd2364b9c44aca441bd33e11317e2d7 bb12c3c28156b40796fe3ba112760f87bb5abb323aab3c5b7bb3e0facaef8d35 +lib/codeql/rust/elements/internal/CallableImpl.qll 917a7d298583e15246428f32fba4cde6fc57a1790262731be27a96baddd8cf5e c5c0848024e0fe3fbb775e7750cf1a2c2dfa454a5aef0df55fec3d0a6fe99190 lib/codeql/rust/elements/internal/CastExprConstructor.qll f3d6e10c4731f38a384675aeab3fba47d17b9e15648293787092bb3247ed808d d738a7751dbadb70aa1dcffcf8af7fa61d4cf8029798369a7e8620013afff4ed lib/codeql/rust/elements/internal/CastExprImpl.qll 3c57b75f01efc70013ba3f05bd79fe2747fe1d1de47b84ff73b06ad38b4f1093 da813adc3390d23ec0643e37226a58e8afdb78e889380ad265d7531a344b841c lib/codeql/rust/elements/internal/ClosureBinderConstructor.qll 6e376ab9d40308e95bcdaf1cc892472c92099d477720192cd382d2c4e0d9c8a1 60a0efe50203ad5bb97bdfc06d602182edcc48ac9670f2d27a9675bd9fd8e19f @@ -463,9 +465,10 @@ lib/codeql/rust/elements/internal/generated/BoxPat.qll ec946a3e671ab7417e04b0207 lib/codeql/rust/elements/internal/generated/BreakExpr.qll 0f428a8b2f4209b134c2ffc3e1c93c30bc6b0e9c9172f140cefa88c1f77d8690 957b39f38ff6befe9061f55bc0b403c2f1c366dd0cf63b874bae6f8216576d76 lib/codeql/rust/elements/internal/generated/CallExpr.qll 23ee64e3bf643cd5e6ff705181d2bb31e1aeaffecb5bdce73836172dbf15f12f 34b280139b1f8f70d78e1432392f03c971be392e8cb68d014eb325d0c101bddd lib/codeql/rust/elements/internal/generated/CallExprBase.qll cce796e36847249f416629bacf3ea146313084de3374587412e66c10d2917b83 c219aa2174321c161a4a742ca0605521687ca9a5ca32db453a5c62db6f7784cc +lib/codeql/rust/elements/internal/generated/Callable.qll b0502b5263b7bcd18e740f284f992c0e600e37d68556e3e0ba54a2ac42b94934 bda3e1eea11cacf5a9b932cd72efc2de6105103e8c575880fcd0cd89daadf068 lib/codeql/rust/elements/internal/generated/CastExpr.qll d6fbf02e9e202254666082a9116634d0eb933177866ac4c0a57b5e9c4bb4b383 477f67773492e3b82695461d56327c9db05a7d1a67e8d192406265f2ce369670 lib/codeql/rust/elements/internal/generated/ClosureBinder.qll 94c0dcdd4cd87d115659d496c88a98354bc7d4ddc0fa27028003bf7688b99987 d59d713b426dbbdb775df9092d176eea031dac1f14e468810f2fc8591399cd19 -lib/codeql/rust/elements/internal/generated/ClosureExpr.qll a10596deeb7b9799f0c0d9e9dfe43f5ff58ba03a9a444d581a240a99ca06a949 e94c2f6cd0190d108d0b91340227d45fb6b8c8c2c6a0476358fe75ea7f7a7760 +lib/codeql/rust/elements/internal/generated/ClosureExpr.qll 70bb3d961e4dc62ad2c9b80d8cbe1e1d5792eafa00a2b0730c06cf6e8a164105 acb3c5200877fda8dffc65b4aa1d4deeb806e035aefecf4da7f0ce03e0b3a477 lib/codeql/rust/elements/internal/generated/Comment.qll cd1ef861e3803618f9f78a4ac00516d50ecfecdca1c1d14304dc5327cbe07a3b 8b67345aeb15beb5895212228761ea3496297846c93fd2127b417406ae87c201 lib/codeql/rust/elements/internal/generated/Const.qll 40464df9d8baacbc85bd137c7d1661684c957c407b2363ea60d90946be93de4c a3316beae55f570a5ca4b1172ef8267d7acb1104cc7a5e9efc58d9fc8224500f lib/codeql/rust/elements/internal/generated/ConstArg.qll e2451cac6ee464f5b64883d60d534996fcff061a520517ac792116238a11e185 1dd6d4b073b0970448a52bbe2468cd160dfe108971dbf9ae9305900bd22ef146 @@ -488,7 +491,7 @@ lib/codeql/rust/elements/internal/generated/ForExpr.qll 541b62b48911d4999f9ed64a lib/codeql/rust/elements/internal/generated/ForType.qll 3d43d044a1189281f09c55caafb6c8020a836f49e2866077086101925a573cf2 646b59bfd1b428aaf7211f574c49f79cb4c6a79ca151aa0663b2b31480298721 lib/codeql/rust/elements/internal/generated/FormatArgsArg.qll e07a1ae310f590003f1b88fada7dcf4847c99adb9d4c838d1c88e66e1da85c5f 0ef7342451fe2cb06e765fb4b33bb8c4a9b927f5edbc8feb5c6ba3655697f447 lib/codeql/rust/elements/internal/generated/FormatArgsExpr.qll 40d6daa7d2bafb33798a21d79774dc802cfbd7a31618ac3bd0149399ea2bf893 d1172e2151791228559004792e125fc4625f6a26ffad25f29efb0ad263bf8795 -lib/codeql/rust/elements/internal/generated/Function.qll c8826307fcb18daf8c59552a5c629a0e59e83e7f676b4a30408a042ecc216a46 ae27a8a709c187ffd6fa7e25e7850555d1be6633d6ee304457a4481135402dcb +lib/codeql/rust/elements/internal/generated/Function.qll f285ee0c771f897eba6db34a7e98f3cfb7db91b0df252ff4b37fc9d779de0bfb 07401e832565ff376acda219514c2e2bbe4ae5058c76a73b40ca6ca66f1626c7 lib/codeql/rust/elements/internal/generated/GenericArg.qll 464da0ba1c5ddcd1be68617167f177773d99b5ac4775ec8ea24d503e789a9099 6faa1033d59baf7c210ac4837a55781cfc054b7acbad8027faf4630dbfa6e101 lib/codeql/rust/elements/internal/generated/GenericArgList.qll b8cd936bba6f28344e28c98acf38acb8ef43af6ecf8367d79ed487e5b9da17cb 8b14331261e49d004807285b02fca190aafd62bfb9378b05c7d9c1e95525fe7b lib/codeql/rust/elements/internal/generated/GenericParam.qll a0285123f974f287154b706bf6688b86edf72a4adcec57346c654d962435651b b42c3915e9564b5b5c5282229bf882aa3309de26a77721b2255d6f4235c0cc38 @@ -536,7 +539,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll c808c9d84dd7800573832b lib/codeql/rust/elements/internal/generated/ParenExpr.qll bc0731505bfe88516205ec360582a4222d2681d11342c93e15258590ddee82f2 d4bd6e0c80cf1d63746c88d4bcb3a01d4c75732e5da09e3ebd9437ced227fb60 lib/codeql/rust/elements/internal/generated/ParenPat.qll ce24b8f8ecbf0f204af200317405724063887257460c80cf250c39b2fdf37185 e7c87d37e1a0ca7ea03840017e1aa9ddb7f927f1f3b6396c0305b46aeee33db6 lib/codeql/rust/elements/internal/generated/ParenType.qll 9cc954d73f8330dcac7b475f97748b63af5c8766dee9d2f2872c0a7e4c903537 c07534c8a9c683c4a9b11d490095647e420de0a0bfc23273eaf6f31b00244273 -lib/codeql/rust/elements/internal/generated/ParentChild.qll 9c600678b3616c3c263fa317753a9ca8ad4ed7efd0e5195dd7eade054c513692 8000db77bab203447063283adb8d0835731c802bc17ef4ffb39cbdb855cef993 +lib/codeql/rust/elements/internal/generated/ParentChild.qll 4af9df75abf8215aa746c9063368911ee94f84b91d71ccf8e6f3acdab02adc03 08855e899a703d5ed63d63db7749ab353367166987ac56ae10875d93975f934a lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll 299abce24762a5ab023f3cf1ab9718b83047e171aed42a8092e7a155914b1657 db1a23d18640c548f08c9f94823838b5e019ac85877c7b15df2d1493d1846572 lib/codeql/rust/elements/internal/generated/PathExpr.qll 17cdb0a7393258a207450f08e37178fc9d35d167f064ba6015be94246f3dc933 a75fdd280aff6d87e083a92030e041c2eb52b57cf7151d4a6989fcd31d6a64bf @@ -548,7 +551,7 @@ lib/codeql/rust/elements/internal/generated/PtrType.qll 40099c5a4041314b66932dfd lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll dc03515d678ba052c2ff2dd9f0883e0bce54cac740ba9a15e5173f292c1b6971 dc03515d678ba052c2ff2dd9f0883e0bce54cac740ba9a15e5173f292c1b6971 lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll efd93730de217cf50dcba5875595263a5eadf9f7e4e1272401342a094d158614 229b251b3d118932e31e78ac4dfb75f48b766f240f20d436062785606d44467b -lib/codeql/rust/elements/internal/generated/Raw.qll 632497608201b6c7bafcb093c0a1e115cec75a648b06e831c2116d88fd29a435 7c8736dfdd22fdbfce8ee8858144da538c4327e8ca880bd92a6e7feaa1199d7d +lib/codeql/rust/elements/internal/generated/Raw.qll ff4874c063c0338443293c807108ecdb878ff2a6a97932c2bafe1c5d2a5486ed 4db42119a06518aeb33bfe9156d884e046afff540c98f07fa81c22bb11c063ad lib/codeql/rust/elements/internal/generated/RecordExpr.qll eb6cb662e463f9260efae1a6ce874fa781172063b916ef1963f861e9942d308d 1a21cbccc8f3799ff13281e822818ebfb21d81591720a427cac3625512cb9d40 lib/codeql/rust/elements/internal/generated/RecordExprField.qll 7e9f8663d3b74ebbc9603b10c9912f082febba6bd73d344b100bbd3edf837802 fbe6b578e7fd5d5a6f21bbb8c388957ab7210a6a249ec71510a50fb35b319ea1 lib/codeql/rust/elements/internal/generated/RecordExprFieldList.qll 179a97211fe7aa6265085d4d54115cdbc0e1cd7c9b2135591e8f36d6432f13d3 dd44bbbc1e83a1ed3a587afb729d7debf7aeb7b63245de181726af13090e50c0 @@ -573,7 +576,7 @@ lib/codeql/rust/elements/internal/generated/Static.qll 5fbd6879858cf356d4bdaa6da lib/codeql/rust/elements/internal/generated/Stmt.qll 8473ff532dd5cc9d7decaddcd174b94d610f6ca0aec8e473cc051dad9f3db917 6ef7d2b5237c2dbdcacbf7d8b39109d4dc100229f2b28b5c9e3e4fbf673ba72b lib/codeql/rust/elements/internal/generated/StmtList.qll a667193e32341e17400867c6e359878c4e645ef9f5f4d97676afc0283a33a026 a320ed678ee359302e2fc1b70a9476705cd616fcfa44a499d32f0c7715627f73 lib/codeql/rust/elements/internal/generated/Struct.qll 4d57f0db12dc7ad3e31e750a24172ef1505406b4dab16386af0674bd18bf8f4b 1a73c83df926b996f629316f74c61ea775be04532ab61b56af904223354f033e -lib/codeql/rust/elements/internal/generated/Synth.qll a87bb2f82978d4baf9234627d2c7769f2395ab6d164b12b72011f96a95096ce4 0342246219252dd29608e07398f4036d99d9b88d9b2e8e9873a93e9bb6d9535c +lib/codeql/rust/elements/internal/generated/Synth.qll 277fd5258498732937682a2b6982405b6cb515f4631a6e0dc6f1a2545ffa54cb 0d3db7534cf9c1c73fc5863b9048f8bca4fe69615e9cdba8f521c36f02155878 lib/codeql/rust/elements/internal/generated/SynthConstructors.qll 518b68ccf6d0791bc0c141486261108bb1723e37743fc7f8e4167a1d61660531 518b68ccf6d0791bc0c141486261108bb1723e37743fc7f8e4167a1d61660531 lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b lib/codeql/rust/elements/internal/generated/TokenTree.qll 8577c2b097c1be2f0f7daa5acfcf146f78674a424d99563e08a84dd3e6d91b46 d2f30764e84dbfc0a6a5d3d8a5f935cd432413688cb32da9c94e420fbc10665c @@ -608,7 +611,7 @@ lib/codeql/rust/elements/internal/generated/WhileExpr.qll fec8a9211b82a80601bf73 lib/codeql/rust/elements/internal/generated/WildcardPat.qll d74b70b57a0a66bfae017a329352a5b27a6b9e73dd5521d627f680e810c6c59e 4b913b548ba27ff3c82fcd32cf996ff329cb57d176d3bebd0fcef394486ea499 lib/codeql/rust/elements/internal/generated/YeetExpr.qll cac328200872a35337b4bcb15c851afb4743f82c080f9738d295571eb01d7392 94af734eea08129b587fed849b643e7572800e8330c0b57d727d41abda47930b lib/codeql/rust/elements/internal/generated/YieldExpr.qll 37e5f0c1e373a22bbc53d8b7f2c0e1f476e5be5080b8437c5e964f4e83fad79a 4a9a68643401637bf48e5c2b2f74a6bf0ddcb4ff76f6bffb61d436b685621e85 -lib/codeql/rust/elements.qll 78908ca1e1988b47323eb47fa58bcceeb984022fa40f89fb0af4f7219d2dd77b 78908ca1e1988b47323eb47fa58bcceeb984022fa40f89fb0af4f7219d2dd77b +lib/codeql/rust/elements.qll 0e469834ccc4b5db3d35d9521d98e3c8b1911f8c5cd70d35d4cd52cb81c73722 0e469834ccc4b5db3d35d9521d98e3c8b1911f8c5cd70d35d4cd52cb81c73722 test/extractor-tests/generated/Abi/Abi.ql 7f6e7dc4af86eca3ebdc79b10373988cd0871bd78b51997d3cffd969105e5fdd 2f936b6ca005c6157c755121584410c03e4a3949c23bee302fbe05ee10ce118f test/extractor-tests/generated/Abi/Abi_getAbiString.ql a496762fcec5a0887b87023bbf93e9b650f02e20113e25c44d6e4281ae8f5335 14109c7ce11ba25e3cd6e7f1b3fcb4cb00622f2a4eac91bfe43145c5f366bc52 test/extractor-tests/generated/ArgList/ArgList.ql e412927756e72165d0e7c5c9bd3fca89d08197bbf760db8fb7683c64bb2229bc 043dba8506946fbb87753e22c387987d7eded6ddb963aa067f9e60ef9024d684 @@ -667,7 +670,7 @@ test/extractor-tests/generated/CastExpr/CastExpr_getExpr.ql c37186b8f3e3dab8ae28 test/extractor-tests/generated/CastExpr/CastExpr_getTy.ql ad5d6e260e1495ba360bd2ade3b60f09705a86a08d618acf8c4aff342c8ee200 c02c1dc65ba9160bc28827e40473915de5403bdc91c16d9d8b6778aa97314a1b test/extractor-tests/generated/ClosureBinder/ClosureBinder.ql 42516df87ac28c814d65f6739b2ede6eaa41c505d64756a3b8c7e0ca79895230 8b840f92ec033a4ef5edbe52bed909d8be0fffddf6d3e4bfaf9a8bc174fa2f2c test/extractor-tests/generated/ClosureBinder/ClosureBinder_getGenericParamList.ql 71010c43a78a7abe8e63c94353f4b7eb97aca011755d200e7087467c1e3b7a68 2c834328f783ec5032544a692f7e23975bac0228b52b9f8fde46ef46a5f22a5f -test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql 430d566d8176d7b98d6cde6c35f9420249236eddb084f9c7cbb091cc683ff063 6b8127425cad540a1e407ff7b387f3924253da980f46e5a678aeb2870ba6ec7b +test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql f25f9b32e5c0cd61e4b75053a5af4640a08b115ea5a4310ab95df450f6dfe1c4 9b731218857fa16776e29bce084c2ec1526b24e15f46d4f24047917d77d4646a test/extractor-tests/generated/ClosureExpr/ClosureExpr_getAttr.ql f7f803afa4e2a5976c911fdf8a91ec607c2f998e22531b9c69a63d85579e34c3 1296acd0fb97e1484aa3f1d5ba09d18088001186f3ba5821eb3218a931ca0d54 test/extractor-tests/generated/ClosureExpr/ClosureExpr_getBody.ql 22a973a61274e87620e38338b29beef395818b95a88e2261fff197f7a78a8f76 bd28ed426e4d07823044db869aa8022dc81e8599d156e3e0e7cd49be914a1f36 test/extractor-tests/generated/ClosureExpr/ClosureExpr_getClosureBinder.ql cbfcf89b8efb5cb9b7bfbea26b5a78b3d4c7994cbf03d5ca60b61ee1b5cb4be5 621431277732ef79c585cb0b7199c49b14c597ee6b594a70d9e6966a09d40a9f @@ -739,7 +742,7 @@ test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr.ql 0cd439f61569ecf0 test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getArg.ql 8f692486be1546b914b17abdff4a989dfbaa889bfa1fc44597f4357806c1a1dd da9fd237e31e9c8dd0ef0c3c968157815b87d3e8dcdfd74674c988ce2ab6d270 test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getAttr.ql 1f9bf1344f942e65c3a3591b6ae04d3f5a2a1a65459bce0d976698de7d8a5958 02acb861d8ab4d32cf144c589881a888c3da5e2ade27e8c85fec3ae45219bb3b test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getTemplate.ql c912ac37275cbe7b3b29607bed1a3190c80779436422c14a475113e1bfd91a54 ef90f67a9b952a38ce557b1afbf0b5ce8551e83ddfaad8309a0c9523e40b5ea7 -test/extractor-tests/generated/Function/Function.ql 28776a499f21ab36c9dfcb905861cf0bf0a2c51f24d6d9401ca45f67d9f982b0 1ded959dfd9c216975572c4577c6a2d4c56a2d3d4a2dd5b0f3f90adff98d86aa +test/extractor-tests/generated/Function/Function.ql 1287fabd4677a151248331c76c3e389af7cd9f41b943b50dfc42217c6a8dfef0 8187ed07e77aa0cf68da885159a965d14b4888252210b217e6752581ff986e8d test/extractor-tests/generated/Function/Function_getAbi.ql e5c9c97de036ddd51cae5d99d41847c35c6b2eabbbd145f4467cb501edc606d8 0b81511528bd0ef9e63b19edfc3cb638d8af43eb87d018fad69d6ef8f8221454 test/extractor-tests/generated/Function/Function_getAttr.ql 44067ee11bdec8e91774ff10de0704a8c5c1b60816d587378e86bf3d82e1f660 b4bebf9441bda1f2d1e34e9261e07a7468cbabf53cf8047384f3c8b11869f04e test/extractor-tests/generated/Function/Function_getBody.ql cf2716a751e309deba703ee4da70e607aae767c1961d3c0ac5b6728f7791f608 3beaf4032924720cb881ef6618a3dd22316f88635c86cbc1be60e3bdad173e21 diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index 6069457be452..5509a8f1c933 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -18,6 +18,7 @@ /lib/codeql/rust/elements/BreakExpr.qll linguist-generated /lib/codeql/rust/elements/CallExpr.qll linguist-generated /lib/codeql/rust/elements/CallExprBase.qll linguist-generated +/lib/codeql/rust/elements/Callable.qll linguist-generated /lib/codeql/rust/elements/CastExpr.qll linguist-generated /lib/codeql/rust/elements/ClosureBinder.qll linguist-generated /lib/codeql/rust/elements/ClosureExpr.qll linguist-generated @@ -189,6 +190,7 @@ /lib/codeql/rust/elements/internal/CallExprBaseImpl.qll linguist-generated /lib/codeql/rust/elements/internal/CallExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/CallExprImpl.qll linguist-generated +/lib/codeql/rust/elements/internal/CallableImpl.qll linguist-generated /lib/codeql/rust/elements/internal/CastExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/CastExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ClosureBinderConstructor.qll linguist-generated @@ -465,6 +467,7 @@ /lib/codeql/rust/elements/internal/generated/BreakExpr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/CallExpr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/CallExprBase.qll linguist-generated +/lib/codeql/rust/elements/internal/generated/Callable.qll linguist-generated /lib/codeql/rust/elements/internal/generated/CastExpr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/ClosureBinder.qll linguist-generated /lib/codeql/rust/elements/internal/generated/ClosureExpr.qll linguist-generated diff --git a/rust/ql/lib/codeql/rust/elements.qll b/rust/ql/lib/codeql/rust/elements.qll index 77aad9315c19..a8f9b4ff86f6 100644 --- a/rust/ql/lib/codeql/rust/elements.qll +++ b/rust/ql/lib/codeql/rust/elements.qll @@ -21,6 +21,7 @@ import codeql.rust.elements.BoxPat import codeql.rust.elements.BreakExpr import codeql.rust.elements.CallExpr import codeql.rust.elements.CallExprBase +import codeql.rust.elements.Callable import codeql.rust.elements.CastExpr import codeql.rust.elements.ClosureBinder import codeql.rust.elements.ClosureExpr diff --git a/rust/ql/lib/codeql/rust/elements/Callable.qll b/rust/ql/lib/codeql/rust/elements/Callable.qll new file mode 100644 index 000000000000..c42262a1854a --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/Callable.qll @@ -0,0 +1,14 @@ +// generated by codegen, do not edit +/** + * This module provides the public class `Callable`. + */ + +private import internal.CallableImpl +import codeql.rust.elements.AstNode +import codeql.rust.elements.Attr +import codeql.rust.elements.ParamList + +/** + * A callable. Either a `Function` or a `ClosureExpr`. + */ +final class Callable = Impl::Callable; diff --git a/rust/ql/lib/codeql/rust/elements/ClosureExpr.qll b/rust/ql/lib/codeql/rust/elements/ClosureExpr.qll index 9dee274c4a3b..cfcf18e48b24 100644 --- a/rust/ql/lib/codeql/rust/elements/ClosureExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/ClosureExpr.qll @@ -4,10 +4,9 @@ */ private import internal.ClosureExprImpl -import codeql.rust.elements.Attr +import codeql.rust.elements.Callable import codeql.rust.elements.ClosureBinder import codeql.rust.elements.Expr -import codeql.rust.elements.ParamList import codeql.rust.elements.RetType /** diff --git a/rust/ql/lib/codeql/rust/elements/Function.qll b/rust/ql/lib/codeql/rust/elements/Function.qll index 0c1ea3b16523..2557429f60fa 100644 --- a/rust/ql/lib/codeql/rust/elements/Function.qll +++ b/rust/ql/lib/codeql/rust/elements/Function.qll @@ -6,13 +6,12 @@ private import internal.FunctionImpl import codeql.rust.elements.Abi import codeql.rust.elements.AssocItem -import codeql.rust.elements.Attr import codeql.rust.elements.BlockExpr +import codeql.rust.elements.Callable import codeql.rust.elements.ExternItem import codeql.rust.elements.GenericParamList import codeql.rust.elements.Item import codeql.rust.elements.Name -import codeql.rust.elements.ParamList import codeql.rust.elements.RetType import codeql.rust.elements.Visibility import codeql.rust.elements.WhereClause diff --git a/rust/ql/lib/codeql/rust/elements/internal/CallableImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CallableImpl.qll new file mode 100644 index 000000000000..d604b4d239f0 --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/CallableImpl.qll @@ -0,0 +1,19 @@ +// generated by codegen, remove this comment if you wish to edit this file +/** + * This module provides a hand-modifiable wrapper around the generated class `Callable`. + * + * INTERNAL: Do not use. + */ + +private import codeql.rust.elements.internal.generated.Callable + +/** + * INTERNAL: This module contains the customizable definition of `Callable` and should not + * be referenced directly. + */ +module Impl { + /** + * A callable. Either a `Function` or a `ClosureExpr`. + */ + class Callable extends Generated::Callable { } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Callable.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Callable.qll new file mode 100644 index 000000000000..710cfe2078e3 --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Callable.qll @@ -0,0 +1,57 @@ +// generated by codegen, do not edit +/** + * This module provides the generated definition of `Callable`. + * INTERNAL: Do not import directly. + */ + +private import codeql.rust.elements.internal.generated.Synth +private import codeql.rust.elements.internal.generated.Raw +import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl +import codeql.rust.elements.Attr +import codeql.rust.elements.ParamList + +/** + * INTERNAL: This module contains the fully generated definition of `Callable` and should not + * be referenced directly. + */ +module Generated { + /** + * A callable. Either a `Function` or a `ClosureExpr`. + * INTERNAL: Do not reference the `Generated::Callable` class directly. + * Use the subclass `Callable`, where the following predicates are available. + */ + class Callable extends Synth::TCallable, AstNodeImpl::AstNode { + /** + * Gets the parameter list of this callable, if it exists. + */ + ParamList getParamList() { + result = + Synth::convertParamListFromRaw(Synth::convertCallableToRaw(this) + .(Raw::Callable) + .getParamList()) + } + + /** + * Holds if `getParamList()` exists. + */ + final predicate hasParamList() { exists(this.getParamList()) } + + /** + * Gets the `index`th attr of this callable (0-based). + */ + Attr getAttr(int index) { + result = + Synth::convertAttrFromRaw(Synth::convertCallableToRaw(this).(Raw::Callable).getAttr(index)) + } + + /** + * Gets any of the attrs of this callable. + */ + final Attr getAnAttr() { result = this.getAttr(_) } + + /** + * Gets the number of attrs of this callable. + */ + final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } + } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ClosureExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ClosureExpr.qll index 6538501d9a26..0e107c2301d2 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ClosureExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ClosureExpr.qll @@ -6,11 +6,10 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw -import codeql.rust.elements.Attr +import codeql.rust.elements.internal.CallableImpl::Impl as CallableImpl import codeql.rust.elements.ClosureBinder import codeql.rust.elements.Expr import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl -import codeql.rust.elements.ParamList import codeql.rust.elements.RetType /** @@ -32,29 +31,9 @@ module Generated { * INTERNAL: Do not reference the `Generated::ClosureExpr` class directly. * Use the subclass `ClosureExpr`, where the following predicates are available. */ - class ClosureExpr extends Synth::TClosureExpr, ExprImpl::Expr { + class ClosureExpr extends Synth::TClosureExpr, ExprImpl::Expr, CallableImpl::Callable { override string getAPrimaryQlClass() { result = "ClosureExpr" } - /** - * Gets the `index`th attr of this closure expression (0-based). - */ - Attr getAttr(int index) { - result = - Synth::convertAttrFromRaw(Synth::convertClosureExprToRaw(this) - .(Raw::ClosureExpr) - .getAttr(index)) - } - - /** - * Gets any of the attrs of this closure expression. - */ - final Attr getAnAttr() { result = this.getAttr(_) } - - /** - * Gets the number of attrs of this closure expression. - */ - final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } - /** * Gets the body of this closure expression, if it exists. */ @@ -108,21 +87,6 @@ module Generated { */ predicate isStatic() { Synth::convertClosureExprToRaw(this).(Raw::ClosureExpr).isStatic() } - /** - * Gets the parameter list of this closure expression, if it exists. - */ - ParamList getParamList() { - result = - Synth::convertParamListFromRaw(Synth::convertClosureExprToRaw(this) - .(Raw::ClosureExpr) - .getParamList()) - } - - /** - * Holds if `getParamList()` exists. - */ - final predicate hasParamList() { exists(this.getParamList()) } - /** * Gets the ret type of this closure expression, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Function.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Function.qll index 4c4513d9e33b..cc0179cb15b9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Function.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Function.qll @@ -8,13 +8,12 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.Abi import codeql.rust.elements.internal.AssocItemImpl::Impl as AssocItemImpl -import codeql.rust.elements.Attr import codeql.rust.elements.BlockExpr +import codeql.rust.elements.internal.CallableImpl::Impl as CallableImpl import codeql.rust.elements.internal.ExternItemImpl::Impl as ExternItemImpl import codeql.rust.elements.GenericParamList import codeql.rust.elements.internal.ItemImpl::Impl as ItemImpl import codeql.rust.elements.Name -import codeql.rust.elements.ParamList import codeql.rust.elements.RetType import codeql.rust.elements.Visibility import codeql.rust.elements.WhereClause @@ -39,7 +38,7 @@ module Generated { * Use the subclass `Function`, where the following predicates are available. */ class Function extends Synth::TFunction, AssocItemImpl::AssocItem, ExternItemImpl::ExternItem, - ItemImpl::Item + ItemImpl::Item, CallableImpl::Callable { override string getAPrimaryQlClass() { result = "Function" } @@ -55,24 +54,6 @@ module Generated { */ final predicate hasAbi() { exists(this.getAbi()) } - /** - * Gets the `index`th attr of this function (0-based). - */ - Attr getAttr(int index) { - result = - Synth::convertAttrFromRaw(Synth::convertFunctionToRaw(this).(Raw::Function).getAttr(index)) - } - - /** - * Gets any of the attrs of this function. - */ - final Attr getAnAttr() { result = this.getAttr(_) } - - /** - * Gets the number of attrs of this function. - */ - final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } - /** * Gets the body of this function, if it exists. */ @@ -139,21 +120,6 @@ module Generated { */ final predicate hasName() { exists(this.getName()) } - /** - * Gets the parameter list of this function, if it exists. - */ - ParamList getParamList() { - result = - Synth::convertParamListFromRaw(Synth::convertFunctionToRaw(this) - .(Raw::Function) - .getParamList()) - } - - /** - * Holds if `getParamList()` exists. - */ - final predicate hasParamList() { exists(this.getParamList()) } - /** * Gets the ret type of this function, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll index 5a895eff78b1..dfa27ba311af 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -163,6 +163,26 @@ private module Impl { ) } + private Element getImmediateChildOfCallable(Callable e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n, int nParamList, int nAttr | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + nParamList = n + 1 and + nAttr = nParamList + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or + index = n and result = e.getParamList() and partialPredicateCall = "ParamList()" + or + result = e.getAttr(index - nParamList) and + partialPredicateCall = "Attr(" + (index - nParamList).toString() + ")" + ) + ) + } + private Element getImmediateChildOfClosureBinder( ClosureBinder e, int index, string partialPredicateCall ) { @@ -1428,35 +1448,27 @@ private module Impl { private Element getImmediateChildOfClosureExpr( ClosureExpr e, int index, string partialPredicateCall ) { - exists( - int b, int bExpr, int n, int nAttr, int nBody, int nClosureBinder, int nParamList, - int nRetType - | + exists(int b, int bExpr, int bCallable, int n, int nBody, int nClosureBinder, int nRetType | b = 0 and bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and - n = bExpr and - nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nBody = nAttr + 1 and + bCallable = + bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfCallable(e, i, _)) | i) and + n = bCallable and + nBody = n + 1 and nClosureBinder = nBody + 1 and - nParamList = nClosureBinder + 1 and - nRetType = nParamList + 1 and + nRetType = nClosureBinder + 1 and ( none() or result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) or - result = e.getAttr(index - n) and - partialPredicateCall = "Attr(" + (index - n).toString() + ")" + result = getImmediateChildOfCallable(e, index - bExpr, partialPredicateCall) or - index = nAttr and result = e.getBody() and partialPredicateCall = "Body()" + index = n and result = e.getBody() and partialPredicateCall = "Body()" or index = nBody and result = e.getClosureBinder() and partialPredicateCall = "ClosureBinder()" or - index = nClosureBinder and - result = e.getParamList() and - partialPredicateCall = "ParamList()" - or - index = nParamList and result = e.getRetType() and partialPredicateCall = "RetType()" + index = nClosureBinder and result = e.getRetType() and partialPredicateCall = "RetType()" ) ) } @@ -2893,23 +2905,22 @@ private module Impl { private Element getImmediateChildOfFunction(Function e, int index, string partialPredicateCall) { exists( - int b, int bAssocItem, int bExternItem, int bItem, int n, int nAbi, int nAttr, int nBody, - int nGenericParamList, int nName, int nParamList, int nRetType, int nVisibility, - int nWhereClause + int b, int bAssocItem, int bExternItem, int bItem, int bCallable, int n, int nAbi, int nBody, + int nGenericParamList, int nName, int nRetType, int nVisibility, int nWhereClause | b = 0 and bAssocItem = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAssocItem(e, i, _)) | i) and bExternItem = bAssocItem + 1 + max(int i | i = -1 or exists(getImmediateChildOfExternItem(e, i, _)) | i) and bItem = bExternItem + 1 + max(int i | i = -1 or exists(getImmediateChildOfItem(e, i, _)) | i) and - n = bItem and + bCallable = + bItem + 1 + max(int i | i = -1 or exists(getImmediateChildOfCallable(e, i, _)) | i) and + n = bCallable and nAbi = n + 1 and - nAttr = nAbi + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nBody = nAttr + 1 and + nBody = nAbi + 1 and nGenericParamList = nBody + 1 and nName = nGenericParamList + 1 and - nParamList = nName + 1 and - nRetType = nParamList + 1 and + nRetType = nName + 1 and nVisibility = nRetType + 1 and nWhereClause = nVisibility + 1 and ( @@ -2921,12 +2932,11 @@ private module Impl { or result = getImmediateChildOfItem(e, index - bExternItem, partialPredicateCall) or - index = n and result = e.getAbi() and partialPredicateCall = "Abi()" + result = getImmediateChildOfCallable(e, index - bItem, partialPredicateCall) or - result = e.getAttr(index - nAbi) and - partialPredicateCall = "Attr(" + (index - nAbi).toString() + ")" + index = n and result = e.getAbi() and partialPredicateCall = "Abi()" or - index = nAttr and result = e.getBody() and partialPredicateCall = "Body()" + index = nAbi and result = e.getBody() and partialPredicateCall = "Body()" or index = nBody and result = e.getGenericParamList() and @@ -2934,9 +2944,7 @@ private module Impl { or index = nGenericParamList and result = e.getName() and partialPredicateCall = "Name()" or - index = nName and result = e.getParamList() and partialPredicateCall = "ParamList()" - or - index = nParamList and result = e.getRetType() and partialPredicateCall = "RetType()" + index = nName and result = e.getRetType() and partialPredicateCall = "RetType()" or index = nRetType and result = e.getVisibility() and partialPredicateCall = "Visibility()" or diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index 04c3e68d5ba3..165b28904ffc 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -123,6 +123,22 @@ module Raw { Meta getMeta() { attr_meta(this, result) } } + /** + * INTERNAL: Do not use. + * A callable. Either a `Function` or a `ClosureExpr`. + */ + class Callable extends @callable, AstNode { + /** + * Gets the parameter list of this callable, if it exists. + */ + ParamList getParamList() { callable_param_lists(this, result) } + + /** + * Gets the `index`th attr of this callable (0-based). + */ + Attr getAttr(int index) { callable_attrs(this, index, result) } + } + /** * INTERNAL: Do not use. * A ClosureBinder. For example: @@ -1500,14 +1516,9 @@ module Raw { * static |x| yield x; * ``` */ - class ClosureExpr extends @closure_expr, Expr { + class ClosureExpr extends @closure_expr, Expr, Callable { override string toString() { result = "ClosureExpr" } - /** - * Gets the `index`th attr of this closure expression (0-based). - */ - Attr getAttr(int index) { closure_expr_attrs(this, index, result) } - /** * Gets the body of this closure expression, if it exists. */ @@ -1543,11 +1554,6 @@ module Raw { */ predicate isStatic() { closure_expr_is_static(this) } - /** - * Gets the parameter list of this closure expression, if it exists. - */ - ParamList getParamList() { closure_expr_param_lists(this, result) } - /** * Gets the ret type of this closure expression, if it exists. */ @@ -3275,7 +3281,7 @@ module Raw { * } * ``` */ - class Function extends @function, AssocItem, ExternItem, Item { + class Function extends @function, AssocItem, ExternItem, Item, Callable { override string toString() { result = "Function" } /** @@ -3283,11 +3289,6 @@ module Raw { */ Abi getAbi() { function_abis(this, result) } - /** - * Gets the `index`th attr of this function (0-based). - */ - Attr getAttr(int index) { function_attrs(this, index, result) } - /** * Gets the body of this function, if it exists. */ @@ -3328,11 +3329,6 @@ module Raw { */ Name getName() { function_names(this, result) } - /** - * Gets the parameter list of this function, if it exists. - */ - ParamList getParamList() { function_param_lists(this, result) } - /** * Gets the ret type of this function, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll index bd3ddf9feb47..51fdcc965d94 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll @@ -592,8 +592,8 @@ module Synth { * INTERNAL: Do not use. */ class TAstNode = - TAbi or TArgList or TAssocItem or TAssocItemList or TAttr or TClosureBinder or TExpr or - TExternItem or TExternItemList or TFieldList or TFormatArgsArg or TGenericArg or + TAbi or TArgList or TAssocItem or TAssocItemList or TAttr or TCallable or TClosureBinder or + TExpr or TExternItem or TExternItemList or TFieldList or TFormatArgsArg or TGenericArg or TGenericArgList or TGenericParam or TGenericParamList or TItemList or TLabel or TLetElse or TLifetime or TMatchArm or TMatchArmList or TMatchGuard or TMeta or TName or TNameRef or TParam or TParamList or TPat or TPath or TPathSegment or TRecordExprField or @@ -608,6 +608,11 @@ module Synth { */ class TCallExprBase = TCallExpr or TMethodCallExpr; + /** + * INTERNAL: Do not use. + */ + class TCallable = TClosureExpr or TFunction; + /** * INTERNAL: Do not use. */ @@ -1568,6 +1573,8 @@ module Synth { or result = convertAttrFromRaw(e) or + result = convertCallableFromRaw(e) + or result = convertClosureBinderFromRaw(e) or result = convertExprFromRaw(e) @@ -1679,6 +1686,16 @@ module Synth { result = convertMethodCallExprFromRaw(e) } + /** + * INTERNAL: Do not use. + * Converts a raw DB element to a synthesized `TCallable`, if possible. + */ + TCallable convertCallableFromRaw(Raw::Element e) { + result = convertClosureExprFromRaw(e) + or + result = convertFunctionFromRaw(e) + } + /** * INTERNAL: Do not use. * Converts a raw DB element to a synthesized `TElement`, if possible. @@ -2846,6 +2863,8 @@ module Synth { or result = convertAttrToRaw(e) or + result = convertCallableToRaw(e) + or result = convertClosureBinderToRaw(e) or result = convertExprToRaw(e) @@ -2957,6 +2976,16 @@ module Synth { result = convertMethodCallExprToRaw(e) } + /** + * INTERNAL: Do not use. + * Converts a synthesized `TCallable` to a raw DB element, if possible. + */ + Raw::Element convertCallableToRaw(TCallable e) { + result = convertClosureExprToRaw(e) + or + result = convertFunctionToRaw(e) + } + /** * INTERNAL: Do not use. * Converts a synthesized `TElement` to a raw DB element, if possible. diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index 811d90f148d3..bcfb0db8795a 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -139,6 +139,7 @@ locatable_locations( | @assoc_item | @assoc_item_list | @attr +| @callable | @closure_binder | @expr | @extern_item @@ -255,6 +256,24 @@ attr_meta( int meta: @meta ref ); +@callable = + @closure_expr +| @function +; + +#keyset[id] +callable_param_lists( + int id: @callable ref, + int param_list: @param_list ref +); + +#keyset[id, index] +callable_attrs( + int id: @callable ref, + int index: int ref, + int attr: @attr ref +); + closure_binders( unique int id: @closure_binder ); @@ -1395,13 +1414,6 @@ closure_exprs( unique int id: @closure_expr ); -#keyset[id, index] -closure_expr_attrs( - int id: @closure_expr ref, - int index: int ref, - int attr: @attr ref -); - #keyset[id] closure_expr_bodies( int id: @closure_expr ref, @@ -1439,12 +1451,6 @@ closure_expr_is_static( int id: @closure_expr ref ); -#keyset[id] -closure_expr_param_lists( - int id: @closure_expr ref, - int param_list: @param_list ref -); - #keyset[id] closure_expr_ret_types( int id: @closure_expr ref, @@ -2733,13 +2739,6 @@ function_abis( int abi: @abi ref ); -#keyset[id, index] -function_attrs( - int id: @function ref, - int index: int ref, - int attr: @attr ref -); - #keyset[id] function_bodies( int id: @function ref, @@ -2783,12 +2782,6 @@ function_names( int name: @name ref ); -#keyset[id] -function_param_lists( - int id: @function ref, - int param_list: @param_list ref -); - #keyset[id] function_ret_types( int id: @function ref, diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql index f55b0c78d22a..b4b3dddc6798 100644 --- a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql @@ -3,12 +3,12 @@ import codeql.rust.elements import TestUtils from - ClosureExpr x, int getNumberOfAttrs, string hasBody, string hasClosureBinder, string isAsync, - string isConst, string isGen, string isMove, string isStatic, string hasParamList, - string hasRetType + ClosureExpr x, string hasParamList, int getNumberOfAttrs, string hasBody, string hasClosureBinder, + string isAsync, string isConst, string isGen, string isMove, string isStatic, string hasRetType where toBeTested(x) and not x.isUnknown() and + (if x.hasParamList() then hasParamList = "yes" else hasParamList = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasBody() then hasBody = "yes" else hasBody = "no") and (if x.hasClosureBinder() then hasClosureBinder = "yes" else hasClosureBinder = "no") and @@ -17,8 +17,7 @@ where (if x.isGen() then isGen = "yes" else isGen = "no") and (if x.isMove() then isMove = "yes" else isMove = "no") and (if x.isStatic() then isStatic = "yes" else isStatic = "no") and - (if x.hasParamList() then hasParamList = "yes" else hasParamList = "no") and if x.hasRetType() then hasRetType = "yes" else hasRetType = "no" -select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasBody:", hasBody, "hasClosureBinder:", - hasClosureBinder, "isAsync:", isAsync, "isConst:", isConst, "isGen:", isGen, "isMove:", isMove, - "isStatic:", isStatic, "hasParamList:", hasParamList, "hasRetType:", hasRetType +select x, "hasParamList:", hasParamList, "getNumberOfAttrs:", getNumberOfAttrs, "hasBody:", hasBody, + "hasClosureBinder:", hasClosureBinder, "isAsync:", isAsync, "isConst:", isConst, "isGen:", isGen, + "isMove:", isMove, "isStatic:", isStatic, "hasRetType:", hasRetType diff --git a/rust/ql/test/extractor-tests/generated/Function/Function.ql b/rust/ql/test/extractor-tests/generated/Function/Function.ql index 9f4fed07e57d..202cbe558bfb 100644 --- a/rust/ql/test/extractor-tests/generated/Function/Function.ql +++ b/rust/ql/test/extractor-tests/generated/Function/Function.ql @@ -3,14 +3,15 @@ import codeql.rust.elements import TestUtils from - Function x, string hasAbi, int getNumberOfAttrs, string hasBody, string hasGenericParamList, - string isAsync, string isConst, string isDefault, string isGen, string isUnsafe, string hasName, - string hasParamList, string hasRetType, string hasVisibility, string hasWhereClause + Function x, string hasParamList, int getNumberOfAttrs, string hasAbi, string hasBody, + string hasGenericParamList, string isAsync, string isConst, string isDefault, string isGen, + string isUnsafe, string hasName, string hasRetType, string hasVisibility, string hasWhereClause where toBeTested(x) and not x.isUnknown() and - (if x.hasAbi() then hasAbi = "yes" else hasAbi = "no") and + (if x.hasParamList() then hasParamList = "yes" else hasParamList = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasAbi() then hasAbi = "yes" else hasAbi = "no") and (if x.hasBody() then hasBody = "yes" else hasBody = "no") and (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no") and (if x.isAsync() then isAsync = "yes" else isAsync = "no") and @@ -19,12 +20,10 @@ where (if x.isGen() then isGen = "yes" else isGen = "no") and (if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no") and (if x.hasName() then hasName = "yes" else hasName = "no") and - (if x.hasParamList() then hasParamList = "yes" else hasParamList = "no") and (if x.hasRetType() then hasRetType = "yes" else hasRetType = "no") and (if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no") and if x.hasWhereClause() then hasWhereClause = "yes" else hasWhereClause = "no" -select x, "hasAbi:", hasAbi, "getNumberOfAttrs:", getNumberOfAttrs, "hasBody:", hasBody, - "hasGenericParamList:", hasGenericParamList, "isAsync:", isAsync, "isConst:", isConst, - "isDefault:", isDefault, "isGen:", isGen, "isUnsafe:", isUnsafe, "hasName:", hasName, - "hasParamList:", hasParamList, "hasRetType:", hasRetType, "hasVisibility:", hasVisibility, - "hasWhereClause:", hasWhereClause +select x, "hasParamList:", hasParamList, "getNumberOfAttrs:", getNumberOfAttrs, "hasAbi:", hasAbi, + "hasBody:", hasBody, "hasGenericParamList:", hasGenericParamList, "isAsync:", isAsync, "isConst:", + isConst, "isDefault:", isDefault, "isGen:", isGen, "isUnsafe:", isUnsafe, "hasName:", hasName, + "hasRetType:", hasRetType, "hasVisibility:", hasVisibility, "hasWhereClause:", hasWhereClause From 45710e23c65b9851b68fba59814014827a79aa05 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 9 Oct 2024 10:56:22 +0100 Subject: [PATCH 073/217] Always use generic method object --- go/extractor/extractor.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/go/extractor/extractor.go b/go/extractor/extractor.go index c157f7c8f672..03190183c26f 100644 --- a/go/extractor/extractor.go +++ b/go/extractor/extractor.go @@ -1637,7 +1637,7 @@ func extractType(tw *trap.Writer, tp types.Type) trap.Label { // Note that methods coming from embedded interfaces can be // accessed through `Method(i)`, so there is no need to // deal with them separately. - meth := tp.Method(i) + meth := tp.Method(i).Origin() // Note that methods do not have a parent scope, so they are // not dealt with by `extractScopes` @@ -1707,7 +1707,7 @@ func extractType(tw *trap.Writer, tp types.Type) trap.Label { // ensure all methods have labels - note that methods do not have a // parent scope, so they are not dealt with by `extractScopes` for i := 0; i < origintp.NumMethods(); i++ { - meth := origintp.Method(i) + meth := origintp.Method(i).Origin() extractMethod(tw, meth) } @@ -1715,7 +1715,7 @@ func extractType(tw *trap.Writer, tp types.Type) trap.Label { // associate all methods of underlying interface with this type if underlyingInterface, ok := underlying.(*types.Interface); ok { for i := 0; i < underlyingInterface.NumMethods(); i++ { - methlbl := extractMethod(tw, underlyingInterface.Method(i)) + methlbl := extractMethod(tw, underlyingInterface.Method(i).Origin()) dbscheme.MethodHostsTable.Emit(tw, methlbl, lbl) } } @@ -1787,7 +1787,7 @@ func getTypeLabel(tw *trap.Writer, tp types.Type) (trap.Label, bool) { case *types.Interface: var b strings.Builder for i := 0; i < tp.NumMethods(); i++ { - meth := tp.Method(i) + meth := tp.Method(i).Origin() methLbl := extractType(tw, meth.Type()) if i > 0 { b.WriteString(",") From a81030916007918e11073e4442c76694c55606e1 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 9 Oct 2024 11:09:26 +0100 Subject: [PATCH 074/217] Add check for specialized objects --- go/extractor/extractor.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/go/extractor/extractor.go b/go/extractor/extractor.go index 03190183c26f..f3209e8abdaf 100644 --- a/go/extractor/extractor.go +++ b/go/extractor/extractor.go @@ -518,6 +518,7 @@ func extractMethod(tw *trap.Writer, meth *types.Func) trap.Label { // For more information on objects, see: // https://github.com/golang/example/blob/master/gotypes/README.md#objects func extractObject(tw *trap.Writer, obj types.Object, lbl trap.Label) { + checkObjectNotSpecialized(obj) name := obj.Name() isBuiltin := obj.Parent() == types.Universe var kind int @@ -2143,3 +2144,15 @@ func skipExtractingValueForLeftOperand(tw *trap.Writer, be *ast.BinaryExpr) bool } return true } + +// checkObjectNotSpecialized exits the program if `obj` is specialized. Note +// that specialization is only possible for function objects and variable +// objects. +func checkObjectNotSpecialized(obj types.Object) { + if funcObj, ok := obj.(*types.Func); ok && funcObj != funcObj.Origin() { + log.Fatalf("Encountered unexpected specialization %s of generic function object %s", funcObj.FullName(), funcObj.Origin().FullName()) + } + if varObj, ok := obj.(*types.Var); ok && varObj != varObj.Origin() { + log.Fatalf("Encountered unexpected specialization %s of generic variable object %s", varObj.String(), varObj.Origin().String()) + } +} From 6bf6ed6f48642c651c8fb9afaacc9920c5eda897 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 9 Oct 2024 11:19:49 +0100 Subject: [PATCH 075/217] Add check for object for specialized named type --- go/extractor/extractor.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/go/extractor/extractor.go b/go/extractor/extractor.go index f3209e8abdaf..936e0b6fdec8 100644 --- a/go/extractor/extractor.go +++ b/go/extractor/extractor.go @@ -2155,4 +2155,9 @@ func checkObjectNotSpecialized(obj types.Object) { if varObj, ok := obj.(*types.Var); ok && varObj != varObj.Origin() { log.Fatalf("Encountered unexpected specialization %s of generic variable object %s", varObj.String(), varObj.Origin().String()) } + if typeNameObj, ok := obj.(*types.TypeName); ok { + if namedType, ok := typeNameObj.Type().(*types.Named); ok && namedType != namedType.Origin() { + log.Fatalf("Encountered type object for specialization %s of named type %s", namedType.String(), namedType.Origin().String()) + } + } } From 9381dda4a90f46215e9e2ca4b850c232242f14b2 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 11 Oct 2024 10:53:14 +0100 Subject: [PATCH 076/217] Use un-specialized field when extracting struct types --- go/extractor/extractor.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/extractor/extractor.go b/go/extractor/extractor.go index 936e0b6fdec8..bea57eeec8d7 100644 --- a/go/extractor/extractor.go +++ b/go/extractor/extractor.go @@ -1608,7 +1608,7 @@ func extractType(tw *trap.Writer, tp types.Type) trap.Label { case *types.Struct: kind = dbscheme.StructType.Index() for i := 0; i < tp.NumFields(); i++ { - field := tp.Field(i) + field := tp.Field(i).Origin() // ensure the field is associated with a label - note that // struct fields do not have a parent scope, so they are not From 0ec40afa4cdd31881523bc833176b75697b656b9 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 11 Oct 2024 12:44:35 +0200 Subject: [PATCH 077/217] Rust: Update expected test output --- .../generated/ClosureExpr/ClosureExpr.expected | 10 +++++----- .../generated/Function/Function.expected | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.expected b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.expected index 18fb82716295..fb665ca8f605 100644 --- a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.expected @@ -1,5 +1,5 @@ -| gen_closure_expr.rs:5:5:5:13 | ClosureExpr | getNumberOfAttrs: | 0 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasParamList: | yes | hasRetType: | no | -| gen_closure_expr.rs:6:5:6:34 | ClosureExpr | getNumberOfAttrs: | 0 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | yes | isStatic: | no | hasParamList: | yes | hasRetType: | yes | -| gen_closure_expr.rs:7:5:7:27 | ClosureExpr | getNumberOfAttrs: | 0 | hasBody: | yes | hasClosureBinder: | no | isAsync: | yes | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasParamList: | yes | hasRetType: | no | -| gen_closure_expr.rs:8:6:9:15 | ClosureExpr | getNumberOfAttrs: | 1 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasParamList: | yes | hasRetType: | no | -| gen_closure_expr.rs:10:6:11:23 | ClosureExpr | getNumberOfAttrs: | 1 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | yes | hasParamList: | yes | hasRetType: | no | +| gen_closure_expr.rs:5:5:5:13 | ClosureExpr | hasParamList: | yes | getNumberOfAttrs: | 0 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasRetType: | no | +| gen_closure_expr.rs:6:5:6:34 | ClosureExpr | hasParamList: | yes | getNumberOfAttrs: | 0 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | yes | isStatic: | no | hasRetType: | yes | +| gen_closure_expr.rs:7:5:7:27 | ClosureExpr | hasParamList: | yes | getNumberOfAttrs: | 0 | hasBody: | yes | hasClosureBinder: | no | isAsync: | yes | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasRetType: | no | +| gen_closure_expr.rs:8:6:9:15 | ClosureExpr | hasParamList: | yes | getNumberOfAttrs: | 1 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasRetType: | no | +| gen_closure_expr.rs:10:6:11:23 | ClosureExpr | hasParamList: | yes | getNumberOfAttrs: | 1 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | yes | hasRetType: | no | diff --git a/rust/ql/test/extractor-tests/generated/Function/Function.expected b/rust/ql/test/extractor-tests/generated/Function/Function.expected index cf2de6ac0a6d..7346f3958cbb 100644 --- a/rust/ql/test/extractor-tests/generated/Function/Function.expected +++ b/rust/ql/test/extractor-tests/generated/Function/Function.expected @@ -1,2 +1,2 @@ -| gen_function.rs:3:1:4:38 | foo | hasAbi: | no | getNumberOfAttrs: | 0 | hasBody: | yes | hasGenericParamList: | no | isAsync: | no | isConst: | no | isDefault: | no | isGen: | no | isUnsafe: | no | hasName: | yes | hasParamList: | yes | hasRetType: | yes | hasVisibility: | no | hasWhereClause: | no | -| gen_function.rs:7:5:7:13 | bar | hasAbi: | no | getNumberOfAttrs: | 0 | hasBody: | no | hasGenericParamList: | no | isAsync: | no | isConst: | no | isDefault: | no | isGen: | no | isUnsafe: | no | hasName: | yes | hasParamList: | yes | hasRetType: | no | hasVisibility: | no | hasWhereClause: | no | +| gen_function.rs:3:1:4:38 | foo | hasParamList: | yes | getNumberOfAttrs: | 0 | hasAbi: | no | hasBody: | yes | hasGenericParamList: | no | isAsync: | no | isConst: | no | isDefault: | no | isGen: | no | isUnsafe: | no | hasName: | yes | hasRetType: | yes | hasVisibility: | no | hasWhereClause: | no | +| gen_function.rs:7:5:7:13 | bar | hasParamList: | yes | getNumberOfAttrs: | 0 | hasAbi: | no | hasBody: | no | hasGenericParamList: | no | isAsync: | no | isConst: | no | isDefault: | no | isGen: | no | isUnsafe: | no | hasName: | yes | hasRetType: | no | hasVisibility: | no | hasWhereClause: | no | From 6ade2a8054ba0ec275a625ebfff2e10424a8b6e7 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Fri, 11 Oct 2024 11:33:46 +0200 Subject: [PATCH 078/217] Rust: address comments --- rust/extractor/src/main.rs | 18 ++- rust/extractor/src/rust_analyzer.rs | 43 ++++---- rust/extractor/src/translate/base.rs | 157 ++++++++++++++------------- 3 files changed, 119 insertions(+), 99 deletions(-) diff --git a/rust/extractor/src/main.rs b/rust/extractor/src/main.rs index f258f240935d..adcb6f681ae1 100644 --- a/rust/extractor/src/main.rs +++ b/rust/extractor/src/main.rs @@ -7,7 +7,7 @@ use anyhow::Context; use archive::Archiver; use ra_ap_ide_db::line_index::{LineCol, LineIndex}; use ra_ap_project_model::ProjectManifest; -use rust_analyzer::RustAnalyzer; +use rust_analyzer::{ParseResult, RustAnalyzer}; mod archive; mod config; pub mod generated; @@ -23,8 +23,14 @@ fn extract( ) { archiver.archive(file); - let (ast, input, parse_errors, file_id, semi) = rust_analyzer.parse(file); - let line_index = LineIndex::new(input.as_ref()); + let ParseResult { + ast, + text, + errors, + file_id, + semantics, + } = rust_analyzer.parse(file); + let line_index = LineIndex::new(text.as_ref()); let display_path = file.to_string_lossy(); let mut trap = traps.create("source", file); let label = trap.emit_file(file); @@ -34,14 +40,14 @@ fn extract( label, line_index, file_id, - semi, + semantics, ); - for err in parse_errors { + for err in errors { translator.emit_parse_error(&ast, &err); } let no_location = (LineCol { line: 0, col: 0 }, LineCol { line: 0, col: 0 }); - if translator.semi.is_none() { + if translator.semantics.is_none() { translator.emit_diagnostic( trap::DiagnosticSeverity::Warning, "semantics".to_owned(), diff --git a/rust/extractor/src/rust_analyzer.rs b/rust/extractor/src/rust_analyzer.rs index 648b58e2169d..80c34658a647 100644 --- a/rust/extractor/src/rust_analyzer.rs +++ b/rust/extractor/src/rust_analyzer.rs @@ -25,7 +25,13 @@ pub enum RustAnalyzer { WithDatabase { db: RootDatabase, vfs: Vfs }, WithoutDatabase(), } - +pub struct ParseResult<'a> { + pub ast: SourceFile, + pub text: Arc, + pub errors: Vec, + pub file_id: Option, + pub semantics: Option>, +} impl RustAnalyzer { pub fn new(project: &ProjectManifest, scratch_dir: &Path) -> Self { let config = CargoConfig { @@ -51,16 +57,7 @@ impl RustAnalyzer { } } } - pub fn parse( - &mut self, - path: &Path, - ) -> ( - SourceFile, - Arc, - Vec, - Option, - Option>, - ) { + pub fn parse(&mut self, path: &Path) -> ParseResult<'_> { let mut errors = Vec::new(); let input = match std::fs::read(path) { Ok(data) => data, @@ -82,28 +79,34 @@ impl RustAnalyzer { .and_then(|x| vfs.file_id(&x)) { db.set_file_text(file_id, &input); - let semi = Semantics::new(db); + let semantics = Semantics::new(db); let file_id = EditionedFileId::current_edition(file_id); - let source_file = semi.parse(file_id); + let source_file = semantics.parse(file_id); errors.extend( db.parse_errors(file_id) .into_iter() .flat_map(|x| x.to_vec()), ); - return ( - source_file, - input.as_ref().into(), + return ParseResult { + ast: source_file, + text: input.as_ref().into(), errors, - Some(file_id), - Some(semi), - ); + file_id: Some(file_id), + semantics: Some(semantics), + }; } } let parse = ra_ap_syntax::ast::SourceFile::parse(&input, Edition::CURRENT); errors.extend(parse.errors()); errors.extend(err); - (parse.tree(), input.as_ref().into(), errors, None, None) + ParseResult { + ast: parse.tree(), + text: input.as_ref().into(), + errors, + file_id: None, + semantics: None, + } } } diff --git a/rust/extractor/src/translate/base.rs b/rust/extractor/src/translate/base.rs index d6467b9dc700..721e2f1a537e 100644 --- a/rust/extractor/src/translate/base.rs +++ b/rust/extractor/src/translate/base.rs @@ -6,13 +6,15 @@ use codeql_extractor::trap::{self}; use log::Level; use ra_ap_hir::db::ExpandDatabase; use ra_ap_hir::Semantics; +use ra_ap_hir_expand::ExpandTo; use ra_ap_ide_db::line_index::{LineCol, LineIndex}; use ra_ap_ide_db::RootDatabase; use ra_ap_parser::SyntaxKind; use ra_ap_span::{EditionedFileId, TextSize}; use ra_ap_syntax::ast::RangeItem; use ra_ap_syntax::{ - ast, AstNode, NodeOrToken, SyntaxElementChildren, SyntaxError, SyntaxToken, TextRange, + ast, AstNode, NodeOrToken, SyntaxElementChildren, SyntaxError, SyntaxNode, SyntaxToken, + TextRange, }; #[macro_export] @@ -80,7 +82,7 @@ pub struct Translator<'a> { label: trap::Label, line_index: LineIndex, file_id: Option, - pub semi: Option>, + pub semantics: Option>, } impl<'a> Translator<'a> { @@ -90,7 +92,7 @@ impl<'a> Translator<'a> { label: trap::Label, line_index: LineIndex, file_id: Option, - semi: Option>, + semantics: Option>, ) -> Translator<'a> { Translator { trap, @@ -98,7 +100,7 @@ impl<'a> Translator<'a> { label, line_index, file_id, - semi, + semantics, } } fn location(&self, range: TextRange) -> (LineCol, LineCol) { @@ -122,8 +124,8 @@ impl<'a> Translator<'a> { } pub fn text_range_for_node(&mut self, node: &impl ast::AstNode) -> Option { - if let Some(semi) = self.semi.as_ref() { - let file_range = semi.original_range(node.syntax()); + if let Some(semantics) = self.semantics.as_ref() { + let file_range = semantics.original_range(node.syntax()); let file_id = self.file_id?; if file_id == file_range.file_id { Some(file_range.range) @@ -235,64 +237,75 @@ impl<'a> Translator<'a> { } } } + fn emit_macro_expansion_parse_errors(&mut self, mcall: &ast::MacroCall, expanded: &SyntaxNode) { + let semantics = self.semantics.as_ref().unwrap(); + if let Some(value) = semantics + .hir_file_for(expanded) + .macro_file() + .and_then(|macro_file| { + semantics + .db + .parse_macro_expansion_error(macro_file.macro_call_id) + }) + { + if let Some(err) = &value.err { + let (message, _error) = err.render_to_string(semantics.db); + + if err.span().anchor.file_id == semantics.hir_file_for(mcall.syntax()) { + let location = err.span().range + + semantics + .db + .ast_id_map(err.span().anchor.file_id.into()) + .get_erased(err.span().anchor.ast_id) + .text_range() + .start(); + self.emit_parse_error(mcall, &SyntaxError::new(message, location)); + }; + } + for err in value.value.iter() { + self.emit_parse_error(mcall, err); + } + } + } + + fn emit_expanded_as( + &mut self, + expand_to: ExpandTo, + expanded: SyntaxNode, + ) -> Option> { + match expand_to { + ra_ap_hir_expand::ExpandTo::Statements => { + ast::MacroStmts::cast(expanded).map(|x| self.emit_macro_stmts(x).into()) + } + ra_ap_hir_expand::ExpandTo::Items => { + ast::MacroItems::cast(expanded).map(|x| self.emit_macro_items(x).into()) + } + + ra_ap_hir_expand::ExpandTo::Pattern => { + ast::Pat::cast(expanded).map(|x| self.emit_pat(x).into()) + } + ra_ap_hir_expand::ExpandTo::Type => { + ast::Type::cast(expanded).map(|x| self.emit_type(x).into()) + } + ra_ap_hir_expand::ExpandTo::Expr => { + ast::Expr::cast(expanded).map(|x| self.emit_expr(x).into()) + } + } + } pub(crate) fn extract_macro_call_expanded( &mut self, mcall: &ast::MacroCall, label: Label, ) { - if let Some(semi) = &self.semi { - if let Some(expanded) = semi.expand(mcall) { - if let Some(value) = - semi.hir_file_for(&expanded) - .macro_file() - .and_then(|macro_file| { - semi.db - .parse_macro_expansion_error(macro_file.macro_call_id) - }) - { - if let Some(err) = &value.err { - let (message, _error) = err.render_to_string(semi.db); - - if err.span().anchor.file_id == semi.hir_file_for(mcall.syntax()) { - let location = err.span().range - + semi - .db - .ast_id_map(err.span().anchor.file_id.into()) - .get_erased(err.span().anchor.ast_id) - .text_range() - .start(); - self.emit_parse_error(mcall, &SyntaxError::new(message, location)); - }; - } - for err in value.value.iter() { - self.emit_parse_error(mcall, err); - } - } - let expand_to = ra_ap_hir_expand::ExpandTo::from_call_site(mcall); - let kind = expanded.kind(); - let value: Option> = match expand_to { - ra_ap_hir_expand::ExpandTo::Statements => { - ast::MacroStmts::cast(expanded).map(|x| self.emit_macro_stmts(x).into()) - } - ra_ap_hir_expand::ExpandTo::Items => { - ast::MacroItems::cast(expanded).map(|x| self.emit_macro_items(x).into()) - } - - ra_ap_hir_expand::ExpandTo::Pattern => { - ast::Pat::cast(expanded).map(|x| self.emit_pat(x).into()) - } - ra_ap_hir_expand::ExpandTo::Type => { - ast::Type::cast(expanded).map(|x| self.emit_type(x).into()) - } - ra_ap_hir_expand::ExpandTo::Expr => { - ast::Expr::cast(expanded).map(|x| self.emit_expr(x).into()) - } - }; - if let Some(value) = value { - MacroCall::emit_expanded(label, value, &mut self.trap.writer); - } else { - let range = self.text_range_for_node(mcall); - self.emit_parse_error(mcall, &SyntaxError::new( + if let Some(expanded) = self.semantics.as_ref().and_then(|s| s.expand(mcall)) { + self.emit_macro_expansion_parse_errors(mcall, &expanded); + let expand_to = ra_ap_hir_expand::ExpandTo::from_call_site(mcall); + let kind = expanded.kind(); + if let Some(value) = self.emit_expanded_as(expand_to, expanded) { + MacroCall::emit_expanded(label, value, &mut self.trap.writer); + } else { + let range = self.text_range_for_node(mcall); + self.emit_parse_error(mcall, &SyntaxError::new( format!( "macro expansion failed: the macro '{}' expands to {:?} but a {:?} was expected", mcall.path().map(|p| p.to_string()).unwrap_or_default(), @@ -300,21 +313,19 @@ impl<'a> Translator<'a> { ), range.unwrap_or_else(|| TextRange::empty(TextSize::from(0))), )); - } - } else { - let range = self.text_range_for_node(mcall); - - self.emit_parse_error( - mcall, - &SyntaxError::new( - format!( - "macro expansion failed: could not resolve macro '{}'", - mcall.path().map(|p| p.to_string()).unwrap_or_default() - ), - range.unwrap_or_else(|| TextRange::empty(TextSize::from(0))), - ), - ); } + } else { + let range = self.text_range_for_node(mcall); + self.emit_parse_error( + mcall, + &SyntaxError::new( + format!( + "macro expansion failed: could not resolve macro '{}'", + mcall.path().map(|p| p.to_string()).unwrap_or_default() + ), + range.unwrap_or_else(|| TextRange::empty(TextSize::from(0))), + ), + ); } } } From 659ce6f1caa2c6ec6607fcf9992a4f5aa4fdbb72 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Fri, 11 Oct 2024 13:45:10 +0200 Subject: [PATCH 079/217] Rust: fix CodeQL alert --- .../codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index 92124ee17c0c..d132ac525c5c 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -413,7 +413,9 @@ class MacroCallTree extends ControlFlowTree instanceof MacroCall { override predicate last(AstNode last, Completion c) { last(super.getExpanded(), last, c) or - not exists(super.getExpanded()) and last = this + not exists(super.getExpanded()) and + last = this and + completionIsValidFor(c, last) } override predicate succ(AstNode pred, AstNode succ, Completion c) { none() } From ffd6b9864c3b7108f20d192031202ebed3d37cbc Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 11 Oct 2024 14:27:42 +0200 Subject: [PATCH 080/217] Address review comments --- .../rust/controlflow/internal/Completion.qll | 19 +++++-------- .../internal/ControlFlowGraphImpl.qll | 28 ++++++------------- 2 files changed, 16 insertions(+), 31 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll b/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll index fc67c32045b7..256b058f823e 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll @@ -117,10 +117,9 @@ class BooleanCompletion extends ConditionalCompletion, TBooleanCompletion { override string toString() { result = "boolean(" + value + ")" } } -/** Holds if node `pat` has the constant match value `value`. */ +/** Holds if `pat` is guaranteed to match. */ pragma[nomagic] -private predicate isMatchConstant(Pat pat, boolean value) { - value = true and +private predicate isIrrefutablePattern(Pat pat) { ( pat instanceof WildcardPat or @@ -128,18 +127,18 @@ private predicate isMatchConstant(Pat pat, boolean value) { or pat instanceof RestPat or - // `let` statements without an `else` branch must be exhaustive + // `let` statements without an `else` branch must be irrefutible pat = any(LetStmt let | not let.hasLetElse()).getPat() or - // `match` expressions must be exhaustive, so last arm cannot fail + // `match` expressions must be irrefutible, so last arm cannot fail pat = any(MatchExpr me).getLastArm().getPat() or - // parameter patterns must be exhaustive + // parameter patterns must be irrefutible pat = any(Param p).getPat() ) and not pat = any(ForExpr for).getPat() // workaround until `for` loops are desugared or - exists(Pat parent | isMatchConstant(parent, value) | + exists(Pat parent | isIrrefutablePattern(parent) | pat = parent.(BoxPat).getPat() or pat = parent.(IdentPat).getPat() @@ -166,11 +165,7 @@ class MatchCompletion extends TMatchCompletion, ConditionalCompletion { override predicate isValidForSpecific(AstNode e) { e instanceof Pat and - ( - isMatchConstant(e, value) - or - not isMatchConstant(e, _) - ) + if isIrrefutablePattern(e) then value = true else any() } override MatchSuccessor getAMatchingSuccessorType() { result.getValue() = value } diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index 6c0c257767a7..cc797dcb3de9 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -179,12 +179,14 @@ class CastExprTree extends StandardPostOrderTree instanceof CastExpr { override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } } -// Closures have their own CFG scope, so we need to make sure that their -// CFG is not mixed with the surrounding CFG. This is done by retrofitting -// `first`, `propagatesAbnormal`, and `succ` below. -class ClosureExprTree extends StandardPostOrderTree, ClosureExpr { +class ClosureExprTree extends StandardTree, ClosureExpr { override predicate first(AstNode first) { first = this } + override predicate last(AstNode last, Completion c) { + last = this and + completionIsValidFor(c, this) + } + override predicate propagatesAbnormal(AstNode child) { none() } override AstNode getChildNode(int i) { @@ -193,11 +195,6 @@ class ClosureExprTree extends StandardPostOrderTree, ClosureExpr { i = this.getParamList().getNumberOfParams() and result = this.getBody() } - - override predicate succ(AstNode pred, AstNode succ, Completion c) { - super.succ(pred, succ, c) and - not succ = this - } } class ContinueExprTree extends LeafTree, ContinueExpr { @@ -218,11 +215,9 @@ class FieldExprTree extends StandardPostOrderTree instanceof FieldExpr { override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } } -// Functions have their own CFG scope, so we need to make sure that their -// CFG is not mixed with the surrounding CFG in case of nested functions. -// This is done by retrofitting `last`, `propagatesAbnormal`, and `succ` -// below. -class FunctionTree extends StandardPreOrderTree, Function { +class FunctionTree extends StandardTree, Function { + override predicate first(AstNode first) { first = this } + override predicate last(AstNode last, Completion c) { last = this and completionIsValidFor(c, this) @@ -236,11 +231,6 @@ class FunctionTree extends StandardPreOrderTree, Function { i = this.getParamList().getNumberOfParams() and result = this.getBody() } - - override predicate succ(AstNode pred, AstNode succ, Completion c) { - super.succ(pred, succ, c) and - not pred = this - } } class ParamTree extends StandardPostOrderTree, Param { From 156ddd3fae75d3752ae81444e9f78108635584d6 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 11 Oct 2024 14:24:25 +0100 Subject: [PATCH 081/217] Kotlin: Log our verbosity level This happens at `info` level, which is logged by default. --- .../src/main/kotlin/KotlinExtractorExtension.kt | 1 + java/kotlin-extractor/src/main/kotlin/utils/Logger.kt | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 3850d690a61c..1fc8ee37fc03 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -140,6 +140,7 @@ class KotlinExtractorExtension( val logger = Logger(loggerBase, tw) logger.info("Extraction started") logger.flush() + logger.infoVerbosity() logger.info("Extraction for invocation TRAP file $invocationTrapFile") logger.flush() logger.info("Kotlin version ${KotlinCompilerVersion.getVersion()}") diff --git a/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt index 1eda875be2fc..dfbb5fdf8e29 100644 --- a/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt +++ b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt @@ -244,6 +244,10 @@ open class LoggerBase(val logCounter: LogCounter) { } } + fun infoVerbosity(dtw: DiagnosticTrapWriter) { + info(dtw, "Kotlin extractor verbosity is " + verbosity.toString()) + } + fun warn(dtw: DiagnosticTrapWriter, msg: String, extraInfo: String?) { if (verbosity >= 2) { diagnostic(dtw, Severity.Warn, msg, extraInfo) @@ -301,6 +305,10 @@ open class Logger(val loggerBase: LoggerBase, val dtw: DiagnosticTrapWriter) { loggerBase.info(dtw, msg) } + fun infoVerbosity() { + loggerBase.infoVerbosity(dtw) + } + private fun warn(msg: String, extraInfo: String?) { loggerBase.warn(dtw, msg, extraInfo) } From e91efaa92effb73d240b6b9766fe7eb391b69d90 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Thu, 11 Apr 2024 16:02:49 +0200 Subject: [PATCH 082/217] python: do not extract stdlib by default --- .../cli-integration-test/extract-stdlib/test.sh | 4 ++-- python/extractor/semmle/cmdline.py | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/python/extractor/cli-integration-test/extract-stdlib/test.sh b/python/extractor/cli-integration-test/extract-stdlib/test.sh index 6a61becd25c0..937cf08ce435 100755 --- a/python/extractor/cli-integration-test/extract-stdlib/test.sh +++ b/python/extractor/cli-integration-test/extract-stdlib/test.sh @@ -13,10 +13,10 @@ rm -rf dbs mkdir dbs -CODEQL_EXTRACTOR_PYTHON_DONT_EXTRACT_STDLIB=True $CODEQL database create dbs/without-stdlib --language python --source-root repo_dir/ +$CODEQL database create dbs/without-stdlib --language python --source-root repo_dir/ $CODEQL query run --database dbs/without-stdlib query.ql > query.without-stdlib.actual diff query.without-stdlib.expected query.without-stdlib.actual -LGTM_INDEX_EXCLUDE="/usr/lib/**" $CODEQL database create dbs/with-stdlib --language python --source-root repo_dir/ +LGTM_INDEX_EXCLUDE="/usr/lib/**" CODEQL_EXTRACTOR_PYTHON_EXTRACT_STDLIB=True $CODEQL database create dbs/with-stdlib --language python --source-root repo_dir/ $CODEQL query run --database dbs/with-stdlib query.ql > query.with-stdlib.actual diff query.with-stdlib.expected query.with-stdlib.actual diff --git a/python/extractor/semmle/cmdline.py b/python/extractor/semmle/cmdline.py index 9c2ff4a32744..79f974279bcb 100644 --- a/python/extractor/semmle/cmdline.py +++ b/python/extractor/semmle/cmdline.py @@ -102,8 +102,10 @@ def make_parser(): config_options.add_option("--colorize", dest="colorize", default=False, action="store_true", help = """Colorize the logging output.""") - config_options.add_option("--dont-extract-stdlib", dest="extract_stdlib", default=True, action="store_false", - help="Do not extract the standard library.") + config_options.add_option("--dont-extract-stdlib", dest="extract_stdlib", action="store_false", + help="This flag is deprecated; not extracting the standard library is now the default.") + config_options.add_option("--extract-stdlib", dest="extract_stdlib", default=False, action="store_true", + help="Extract the standard library.") parser.add_option_group(config_options) @@ -226,8 +228,16 @@ def parse(command_line): if 'CODEQL_EXTRACTOR_PYTHON_DONT_EXTRACT_STDLIB' in os.environ: options.extract_stdlib = False + print ("Warning: CODEQL_EXTRACTOR_PYTHON_DONT_EXTRACT_STDLIB is deprecated; the default is now to not extract the standard library.") + + if 'CODEQL_EXTRACTOR_PYTHON_EXTRACT_STDLIB' in os.environ: + options.extract_stdlib = True options.prune = True + + if options.extract_stdlib: + print ("Warning: The analysis will extract the standard library. This behavior is deprecated and will be removed in a future release. We expect it to be gone in CLI version 2.20.0.") + return options, args def split_and_flatten(options_list, div): From bb78c2a67e21d165552a38c970a170b9dfbf9a62 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 9 Oct 2024 23:27:00 +0200 Subject: [PATCH 083/217] Python: update test expectations --- .../PointsTo/class_properties/ClassValues.expected | 3 --- .../3/library-tests/PointsTo/imports/Runtime.expected | 4 ---- .../PointsTo/imports/RuntimeWithType.expected | 4 ---- .../regressions/subprocess-assert/ClassValue.expected | 4 ++-- .../modules/general/moduleobject_test.expected | 1 - python/ql/test/3/library-tests/six/pointsto.expected | 4 ++-- python/ql/test/3/query-tests/Summary/LinesOfCode.expected | 2 +- .../Variables/undefined/UndefinedExport.expected | 2 ++ python/ql/test/extractor-tests/flags/Flags.expected | 2 +- .../test/library-tests/PointsTo/decorators/Test.expected | 2 -- .../library-tests/PointsTo/decorators/Values.expected | 4 ++-- .../PointsTo/general/GlobalPointsTo.expected | 4 ---- .../library-tests/PointsTo/general/LocalPointsTo.expected | 4 ---- .../PointsTo/general/LocalPointsToType.expected | 4 ---- .../test/library-tests/PointsTo/guarded/PointsTo.expected | 4 ---- .../PointsTo/guarded/PointsToWithType.expected | 4 ---- .../ql/test/library-tests/PointsTo/new/NameSpace.expected | 3 --- .../PointsTo/new/PointsToWithContext.expected | 8 -------- .../library-tests/PointsTo/new/PointsToWithType.expected | 8 -------- python/ql/test/library-tests/PointsTo/new/Values.expected | 8 +++----- .../conflict-stdlib/LocalModuleWithRef.expected | 1 - .../conflict-stdlib/ModuleWithLocalRef.expected | 2 +- .../dataflow/coverage-py3/argumentRoutingTest.expected | 4 ++++ .../dataflow/fieldflow/UnresolvedCalls.expected | 4 ++++ .../frameworks/stdlib/InlineTaintTest.expected | 1 + .../library-tests/modules/duplicate_name/Modules.expected | 2 -- .../WeakFilePermissions.expected | 1 - .../Statements/no_effect/StatementNoEffect.expected | 2 ++ 28 files changed, 25 insertions(+), 71 deletions(-) diff --git a/python/ql/test/3/library-tests/PointsTo/class_properties/ClassValues.expected b/python/ql/test/3/library-tests/PointsTo/class_properties/ClassValues.expected index 537882af86f7..2c6a15909646 100644 --- a/python/ql/test/3/library-tests/PointsTo/class_properties/ClassValues.expected +++ b/python/ql/test/3/library-tests/PointsTo/class_properties/ClassValues.expected @@ -1,9 +1,6 @@ -| mapping | builtin-class collections.OrderedDict | -| mapping | builtin-class collections.defaultdict | | mapping | builtin-class dict | | mapping | class MyDictSubclass | | mapping | class MyMappingABC | -| mapping | class OrderedDict | | neither sequence nor mapping | builtin-class set | | sequence | builtin-class bytes | | sequence | builtin-class list | diff --git a/python/ql/test/3/library-tests/PointsTo/imports/Runtime.expected b/python/ql/test/3/library-tests/PointsTo/imports/Runtime.expected index f1dcc270a3ed..fe825523ca21 100644 --- a/python/ql/test/3/library-tests/PointsTo/imports/Runtime.expected +++ b/python/ql/test/3/library-tests/PointsTo/imports/Runtime.expected @@ -44,14 +44,10 @@ | test.py | 15 | ControlFlowNode for moduleX | Module package.moduleX | Entry node for Module package.moduleX | | test.py | 16 | ControlFlowNode for Attribute | class Y | ControlFlowNode for ClassExpr | | test.py | 16 | ControlFlowNode for moduleX | Module package.moduleX | Entry node for Module package.moduleX | -| test.py | 19 | ControlFlowNode for ImportExpr | Module tty | ControlFlowNode for ImportExpr | -| test.py | 19 | ControlFlowNode for tty | Module tty | ControlFlowNode for ImportExpr | | test.py | 22 | ControlFlowNode for Attribute | Builtin-function exc_info | ControlFlowNode for from sys import * | | test.py | 22 | ControlFlowNode for x | Module package.x | Entry node for Module package.x | | test.py | 24 | ControlFlowNode for IntegerLiteral | int 0 | ControlFlowNode for IntegerLiteral | | test.py | 24 | ControlFlowNode for argv | int 0 | ControlFlowNode for IntegerLiteral | | test.py | 27 | ControlFlowNode for ImportExpr | Module sys | ControlFlowNode for ImportExpr | | test.py | 31 | ControlFlowNode for argv | list object | ControlFlowNode for from sys import * | -| test.py | 33 | ControlFlowNode for ImportExpr | Module socket | ControlFlowNode for ImportExpr | -| test.py | 34 | ControlFlowNode for timeout | builtin-class TimeoutError | ControlFlowNode for from _socket import * | | x.py | 2 | ControlFlowNode for ImportExpr | Module sys | ControlFlowNode for ImportExpr | diff --git a/python/ql/test/3/library-tests/PointsTo/imports/RuntimeWithType.expected b/python/ql/test/3/library-tests/PointsTo/imports/RuntimeWithType.expected index 60cc3c6b52db..e55d70d073df 100644 --- a/python/ql/test/3/library-tests/PointsTo/imports/RuntimeWithType.expected +++ b/python/ql/test/3/library-tests/PointsTo/imports/RuntimeWithType.expected @@ -44,14 +44,10 @@ | test.py | 15 | ControlFlowNode for moduleX | Module package.moduleX | builtin-class module | Entry node for Module package.moduleX | | test.py | 16 | ControlFlowNode for Attribute | class Y | builtin-class type | ControlFlowNode for ClassExpr | | test.py | 16 | ControlFlowNode for moduleX | Module package.moduleX | builtin-class module | Entry node for Module package.moduleX | -| test.py | 19 | ControlFlowNode for ImportExpr | Module tty | builtin-class module | ControlFlowNode for ImportExpr | -| test.py | 19 | ControlFlowNode for tty | Module tty | builtin-class module | ControlFlowNode for ImportExpr | | test.py | 22 | ControlFlowNode for Attribute | Builtin-function exc_info | builtin-class builtin_function_or_method | ControlFlowNode for from sys import * | | test.py | 22 | ControlFlowNode for x | Module package.x | builtin-class module | Entry node for Module package.x | | test.py | 24 | ControlFlowNode for IntegerLiteral | int 0 | builtin-class int | ControlFlowNode for IntegerLiteral | | test.py | 24 | ControlFlowNode for argv | int 0 | builtin-class int | ControlFlowNode for IntegerLiteral | | test.py | 27 | ControlFlowNode for ImportExpr | Module sys | builtin-class module | ControlFlowNode for ImportExpr | | test.py | 31 | ControlFlowNode for argv | list object | builtin-class list | ControlFlowNode for from sys import * | -| test.py | 33 | ControlFlowNode for ImportExpr | Module socket | builtin-class module | ControlFlowNode for ImportExpr | -| test.py | 34 | ControlFlowNode for timeout | builtin-class TimeoutError | builtin-class type | ControlFlowNode for from _socket import * | | x.py | 2 | ControlFlowNode for ImportExpr | Module sys | builtin-class module | ControlFlowNode for ImportExpr | diff --git a/python/ql/test/3/library-tests/PointsTo/regressions/subprocess-assert/ClassValue.expected b/python/ql/test/3/library-tests/PointsTo/regressions/subprocess-assert/ClassValue.expected index 1c02b5ee6c6e..ef899d04d790 100644 --- a/python/ql/test/3/library-tests/PointsTo/regressions/subprocess-assert/ClassValue.expected +++ b/python/ql/test/3/library-tests/PointsTo/regressions/subprocess-assert/ClassValue.expected @@ -1,3 +1,3 @@ -| mwe_failure.py:7:1:7:23 | class MyTest | | -| mwe_failure_2.py:7:1:7:23 | class MyTest | | +| mwe_failure.py:7:1:7:23 | class MyTest | class TestCase | +| mwe_failure_2.py:7:1:7:23 | class MyTest | class TestCase | | mwe_success.py:7:1:7:23 | class MyTest | class TestCase | diff --git a/python/ql/test/3/library-tests/modules/general/moduleobject_test.expected b/python/ql/test/3/library-tests/modules/general/moduleobject_test.expected index eed40d8d9329..53f645c9a9ee 100644 --- a/python/ql/test/3/library-tests/modules/general/moduleobject_test.expected +++ b/python/ql/test/3/library-tests/modules/general/moduleobject_test.expected @@ -37,7 +37,6 @@ | Module package.assistant | e | Wrong() | | Module package.assistant | f | int 1 | | Module package.helper | __name__ | str u'package.helper' | -| Module package.helper | absolute_import | _Feature() | | Module package.helper | assistant | Module package.assistant | | Module package.helper | d | int 4 | | Module package.helper | e | int 5 | diff --git a/python/ql/test/3/library-tests/six/pointsto.expected b/python/ql/test/3/library-tests/six/pointsto.expected index 83f61848b7cd..85a50cad8085 100644 --- a/python/ql/test/3/library-tests/six/pointsto.expected +++ b/python/ql/test/3/library-tests/six/pointsto.expected @@ -1,7 +1,7 @@ | six | Package six | | six.moves | Package six.moves | -| six.moves.http_client | Module http.client | -| six.moves.http_client.HTTPConnection | class HTTPConnection | +| six.moves.http_client | Missing module http.client | +| six.moves.http_client.HTTPConnection | Missing module attribute http.client.HTTPConnection | | six.moves.range | builtin-class range | | six.moves.urllib | Package six.moves.urllib | | six.moves.urllib.parse | Module six.moves.urllib_parse | diff --git a/python/ql/test/3/query-tests/Summary/LinesOfCode.expected b/python/ql/test/3/query-tests/Summary/LinesOfCode.expected index 183d68cab22a..74c7709367a7 100644 --- a/python/ql/test/3/query-tests/Summary/LinesOfCode.expected +++ b/python/ql/test/3/query-tests/Summary/LinesOfCode.expected @@ -1 +1 @@ -| 51 | +| 11 | diff --git a/python/ql/test/3/query-tests/Variables/undefined/UndefinedExport.expected b/python/ql/test/3/query-tests/Variables/undefined/UndefinedExport.expected index 2b1ef223673e..6bd8188ed3de 100644 --- a/python/ql/test/3/query-tests/Variables/undefined/UndefinedExport.expected +++ b/python/ql/test/3/query-tests/Variables/undefined/UndefinedExport.expected @@ -1,4 +1,6 @@ | UndefinedExport.py:3:18:3:20 | StringLiteral | The name 'y' is exported by __all__ but is not defined. | | UndefinedExport.py:3:23:3:25 | StringLiteral | The name 'z' is exported by __all__ but is not defined. | | UndefinedExport.py:3:28:3:35 | StringLiteral | The name 'module' is exported by __all__ but is not defined. | +| enum_convert.py:8:13:8:19 | StringLiteral | The name 'Maybe' is exported by __all__ but is not defined. | +| enum_convert.py:8:22:8:32 | StringLiteral | The name 'Maybe_not' is exported by __all__ but is not defined. | | package/__init__.py:1:23:1:34 | StringLiteral | The name 'not_exists' is exported by __all__ but is not defined. | diff --git a/python/ql/test/extractor-tests/flags/Flags.expected b/python/ql/test/extractor-tests/flags/Flags.expected index 380cf9a08241..eeb4db916e73 100644 --- a/python/ql/test/extractor-tests/flags/Flags.expected +++ b/python/ql/test/extractor-tests/flags/Flags.expected @@ -1,7 +1,7 @@ | options.all | False | | options.colorize | True | | options.context_cost | 11 | -| options.extract_stdlib | True | +| options.extract_stdlib | False | | options.guess | False | | options.help | False | | options.ignore_missing_modules | False | diff --git a/python/ql/test/library-tests/PointsTo/decorators/Test.expected b/python/ql/test/library-tests/PointsTo/decorators/Test.expected index 4352b429ca01..4e465134ef63 100644 --- a/python/ql/test/library-tests/PointsTo/decorators/Test.expected +++ b/python/ql/test/library-tests/PointsTo/decorators/Test.expected @@ -1,4 +1,3 @@ -| 1 | ControlFlowNode for functools | Module functools | test.py:1 | | 3 | ControlFlowNode for annotate | Function annotate | test.py:3 | | 4 | ControlFlowNode for inner | Function inner | test.py:4 | | 5 | ControlFlowNode for func | Function func1 | test.py:23 | @@ -11,7 +10,6 @@ | 13 | ControlFlowNode for wrapper | Function wrapper | test.py:10 | | 15 | ControlFlowNode for wraps2 | Function wraps2 | test.py:15 | | 16 | ControlFlowNode for func | Function func3 | test.py:31 | -| 16 | ControlFlowNode for functools | Module functools | test.py:1 | | 17 | ControlFlowNode for args | args | test.py:17 | | 17 | ControlFlowNode for wrapper | Attribute()() | test.py:16 | | 18 | ControlFlowNode for args | args | test.py:17 | diff --git a/python/ql/test/library-tests/PointsTo/decorators/Values.expected b/python/ql/test/library-tests/PointsTo/decorators/Values.expected index d9887d944f16..c63ec2d22ccd 100644 --- a/python/ql/test/library-tests/PointsTo/decorators/Values.expected +++ b/python/ql/test/library-tests/PointsTo/decorators/Values.expected @@ -7,8 +7,8 @@ | test.py:11:21:11:24 | ControlFlowNode for args | runtime | instance of tuple | | test.py:13:12:13:18 | ControlFlowNode for wrapper | runtime | Function wraps1.wrapper | | test.py:13:12:13:18 | ControlFlowNode for wrapper | test.py:26 from import | Function wraps1.wrapper | -| test.py:16:6:16:14 | ControlFlowNode for functools | runtime | Module functools | -| test.py:16:6:16:14 | ControlFlowNode for functools | test.py:30 from import | Module functools | +| test.py:16:6:16:14 | ControlFlowNode for functools | runtime | Missing module functools | +| test.py:16:6:16:14 | ControlFlowNode for functools | test.py:30 from import | Missing module functools | | test.py:16:22:16:25 | ControlFlowNode for func | runtime | Unknown value | | test.py:16:22:16:25 | ControlFlowNode for func | test.py:30 from import | Function func3 | | test.py:18:21:18:24 | ControlFlowNode for args | runtime | instance of tuple | diff --git a/python/ql/test/library-tests/PointsTo/general/GlobalPointsTo.expected b/python/ql/test/library-tests/PointsTo/general/GlobalPointsTo.expected index 9040788529a8..85c8304b58aa 100644 --- a/python/ql/test/library-tests/PointsTo/general/GlobalPointsTo.expected +++ b/python/ql/test/library-tests/PointsTo/general/GlobalPointsTo.expected @@ -87,10 +87,6 @@ | Module pointsto_test | 69 | ControlFlowNode for X | class X | | Module pointsto_test | 70 | ControlFlowNode for Attribute | deco() | | Module pointsto_test | 70 | ControlFlowNode for X | class X | -| Module pointsto_test | 72 | ControlFlowNode for ImportExpr | Module abc | -| Module pointsto_test | 72 | ControlFlowNode for ImportMember | Function abstractmethod | -| Module pointsto_test | 72 | ControlFlowNode for abstractmethod | Function abstractmethod | -| Module pointsto_test | 73 | ControlFlowNode for abstractmethod | Function abstractmethod | | Module pointsto_test | 75 | ControlFlowNode for C | class C | | Module pointsto_test | 75 | ControlFlowNode for C() | C() | | Module pointsto_test | 75 | ControlFlowNode for type | builtin-class type | diff --git a/python/ql/test/library-tests/PointsTo/general/LocalPointsTo.expected b/python/ql/test/library-tests/PointsTo/general/LocalPointsTo.expected index b94942506153..fc4970a8c0cc 100644 --- a/python/ql/test/library-tests/PointsTo/general/LocalPointsTo.expected +++ b/python/ql/test/library-tests/PointsTo/general/LocalPointsTo.expected @@ -95,10 +95,6 @@ | 69 | ControlFlowNode for X | class X | | 70 | ControlFlowNode for Attribute | deco() | | 70 | ControlFlowNode for X | class X | -| 72 | ControlFlowNode for ImportExpr | Module abc | -| 72 | ControlFlowNode for ImportMember | Function abstractmethod | -| 72 | ControlFlowNode for abstractmethod | Function abstractmethod | -| 73 | ControlFlowNode for abstractmethod | Function abstractmethod | | 75 | ControlFlowNode for C | class C | | 75 | ControlFlowNode for C() | C() | | 75 | ControlFlowNode for type | builtin-class type | diff --git a/python/ql/test/library-tests/PointsTo/general/LocalPointsToType.expected b/python/ql/test/library-tests/PointsTo/general/LocalPointsToType.expected index 15f283ac4b97..92dde139cdec 100644 --- a/python/ql/test/library-tests/PointsTo/general/LocalPointsToType.expected +++ b/python/ql/test/library-tests/PointsTo/general/LocalPointsToType.expected @@ -95,10 +95,6 @@ | 69 | ControlFlowNode for Attribute | Attribute | builtin-class method | | 69 | ControlFlowNode for X | class X | builtin-class type | | 70 | ControlFlowNode for X | class X | builtin-class type | -| 72 | ControlFlowNode for ImportExpr | Module abc | builtin-class module | -| 72 | ControlFlowNode for ImportMember | Function abstractmethod | builtin-class function | -| 72 | ControlFlowNode for abstractmethod | Function abstractmethod | builtin-class function | -| 73 | ControlFlowNode for abstractmethod | Function abstractmethod | builtin-class function | | 75 | ControlFlowNode for C | class C | builtin-class type | | 75 | ControlFlowNode for C() | C() | class C | | 75 | ControlFlowNode for type | builtin-class type | builtin-class type | diff --git a/python/ql/test/library-tests/PointsTo/guarded/PointsTo.expected b/python/ql/test/library-tests/PointsTo/guarded/PointsTo.expected index b6872c3a4e62..8c83b21f782c 100644 --- a/python/ql/test/library-tests/PointsTo/guarded/PointsTo.expected +++ b/python/ql/test/library-tests/PointsTo/guarded/PointsTo.expected @@ -70,7 +70,3 @@ | type_test.py | 55 | ControlFlowNode for arg | class E | 29 | | type_test.py | 67 | ControlFlowNode for x | float 1.0 | 62 | | type_test.py | 67 | ControlFlowNode for x | int 0 | 62 | -| type_test.py | 77 | ControlFlowNode for IntegerLiteral | int 0 | 77 | -| type_test.py | 83 | ControlFlowNode for IntegerLiteral | int 0 | 83 | -| type_test.py | 89 | ControlFlowNode for IntegerLiteral | int 0 | 89 | -| type_test.py | 95 | ControlFlowNode for IntegerLiteral | int 0 | 95 | diff --git a/python/ql/test/library-tests/PointsTo/guarded/PointsToWithType.expected b/python/ql/test/library-tests/PointsTo/guarded/PointsToWithType.expected index 2f71fc6107b6..9993b96d18a6 100644 --- a/python/ql/test/library-tests/PointsTo/guarded/PointsToWithType.expected +++ b/python/ql/test/library-tests/PointsTo/guarded/PointsToWithType.expected @@ -70,7 +70,3 @@ | type_test.py | 55 | ControlFlowNode for arg | class E | builtin-class type | 29 | | type_test.py | 67 | ControlFlowNode for x | float 1.0 | builtin-class float | 62 | | type_test.py | 67 | ControlFlowNode for x | int 0 | builtin-class int | 62 | -| type_test.py | 77 | ControlFlowNode for IntegerLiteral | int 0 | builtin-class int | 77 | -| type_test.py | 83 | ControlFlowNode for IntegerLiteral | int 0 | builtin-class int | 83 | -| type_test.py | 89 | ControlFlowNode for IntegerLiteral | int 0 | builtin-class int | 89 | -| type_test.py | 95 | ControlFlowNode for IntegerLiteral | int 0 | builtin-class int | 95 | diff --git a/python/ql/test/library-tests/PointsTo/new/NameSpace.expected b/python/ql/test/library-tests/PointsTo/new/NameSpace.expected index 6508ef5b13f3..43f4158ba7fa 100644 --- a/python/ql/test/library-tests/PointsTo/new/NameSpace.expected +++ b/python/ql/test/library-tests/PointsTo/new/NameSpace.expected @@ -85,15 +85,12 @@ | h_classes.py:23 | Class Base | __init__ | Function __init__ | | h_classes.py:48 | Class D | m | Function f | | h_classes.py:48 | Class D | n | Function n | -| i_imports.py:0 | Module code.i_imports | BytesIO | builtin-class _io.BytesIO | -| i_imports.py:0 | Module code.i_imports | StringIO | builtin-class _io.StringIO | | i_imports.py:0 | Module code.i_imports | _io | Module _io | | i_imports.py:0 | Module code.i_imports | a | int 1 | | i_imports.py:0 | Module code.i_imports | argv | list object | | i_imports.py:0 | Module code.i_imports | b | int 2 | | i_imports.py:0 | Module code.i_imports | c | int 3 | | i_imports.py:0 | Module code.i_imports | code | Module code | -| i_imports.py:0 | Module code.i_imports | io | Module io | | i_imports.py:0 | Module code.i_imports | module1 | Module code.test_package.module1 | | i_imports.py:0 | Module code.i_imports | module2 | Module code.test_package.module2 | | i_imports.py:0 | Module code.i_imports | p | int 1 | diff --git a/python/ql/test/library-tests/PointsTo/new/PointsToWithContext.expected b/python/ql/test/library-tests/PointsTo/new/PointsToWithContext.expected index cd1a08a4dac2..04c794f49adf 100644 --- a/python/ql/test/library-tests/PointsTo/new/PointsToWithContext.expected +++ b/python/ql/test/library-tests/PointsTo/new/PointsToWithContext.expected @@ -475,14 +475,6 @@ | i_imports.py:31 | ControlFlowNode for Attribute | builtin-class _io.BytesIO | builtin-class type | 31 | import | | i_imports.py:31 | ControlFlowNode for BytesIO | builtin-class _io.BytesIO | builtin-class type | 31 | import | | i_imports.py:31 | ControlFlowNode for _io | Module _io | builtin-class module | 29 | import | -| i_imports.py:33 | ControlFlowNode for ImportExpr | Module io | builtin-class module | 33 | import | -| i_imports.py:33 | ControlFlowNode for io | Module io | builtin-class module | 33 | import | -| i_imports.py:34 | ControlFlowNode for Attribute | builtin-class _io.StringIO | builtin-class type | 55 | import | -| i_imports.py:34 | ControlFlowNode for StringIO | builtin-class _io.StringIO | builtin-class type | 55 | import | -| i_imports.py:34 | ControlFlowNode for io | Module io | builtin-class module | 33 | import | -| i_imports.py:35 | ControlFlowNode for Attribute | builtin-class _io.BytesIO | builtin-class type | 55 | import | -| i_imports.py:35 | ControlFlowNode for BytesIO | builtin-class _io.BytesIO | builtin-class type | 55 | import | -| i_imports.py:35 | ControlFlowNode for io | Module io | builtin-class module | 33 | import | | i_imports.py:37 | ControlFlowNode for ImportExpr | Module code | builtin-class module | 37 | import | | i_imports.py:37 | ControlFlowNode for code | Module code | builtin-class module | 37 | import | | i_imports.py:38 | ControlFlowNode for Attribute | Function f2 | builtin-class function | 24 | import | diff --git a/python/ql/test/library-tests/PointsTo/new/PointsToWithType.expected b/python/ql/test/library-tests/PointsTo/new/PointsToWithType.expected index 783237edc9d3..15e9081dd206 100644 --- a/python/ql/test/library-tests/PointsTo/new/PointsToWithType.expected +++ b/python/ql/test/library-tests/PointsTo/new/PointsToWithType.expected @@ -572,14 +572,6 @@ | i_imports.py:31 | ControlFlowNode for Attribute | builtin-class _io.BytesIO | builtin-class type | 31 | | i_imports.py:31 | ControlFlowNode for BytesIO | builtin-class _io.BytesIO | builtin-class type | 31 | | i_imports.py:31 | ControlFlowNode for _io | Module _io | builtin-class module | 29 | -| i_imports.py:33 | ControlFlowNode for ImportExpr | Module io | builtin-class module | 33 | -| i_imports.py:33 | ControlFlowNode for io | Module io | builtin-class module | 33 | -| i_imports.py:34 | ControlFlowNode for Attribute | builtin-class _io.StringIO | builtin-class type | 55 | -| i_imports.py:34 | ControlFlowNode for StringIO | builtin-class _io.StringIO | builtin-class type | 55 | -| i_imports.py:34 | ControlFlowNode for io | Module io | builtin-class module | 33 | -| i_imports.py:35 | ControlFlowNode for Attribute | builtin-class _io.BytesIO | builtin-class type | 55 | -| i_imports.py:35 | ControlFlowNode for BytesIO | builtin-class _io.BytesIO | builtin-class type | 55 | -| i_imports.py:35 | ControlFlowNode for io | Module io | builtin-class module | 33 | | i_imports.py:37 | ControlFlowNode for ImportExpr | Module code | builtin-class module | 37 | | i_imports.py:37 | ControlFlowNode for code | Module code | builtin-class module | 37 | | i_imports.py:38 | ControlFlowNode for Attribute | Function f2 | builtin-class function | 24 | diff --git a/python/ql/test/library-tests/PointsTo/new/Values.expected b/python/ql/test/library-tests/PointsTo/new/Values.expected index 5466ca854457..396249f9b94e 100644 --- a/python/ql/test/library-tests/PointsTo/new/Values.expected +++ b/python/ql/test/library-tests/PointsTo/new/Values.expected @@ -373,11 +373,9 @@ | i_imports.py:30 | ControlFlowNode for _io | import | Module _io | builtin-class module | | i_imports.py:31 | ControlFlowNode for Attribute | import | builtin-class _io.BytesIO | builtin-class type | | i_imports.py:31 | ControlFlowNode for _io | import | Module _io | builtin-class module | -| i_imports.py:33 | ControlFlowNode for ImportExpr | import | Module io | builtin-class module | -| i_imports.py:34 | ControlFlowNode for Attribute | import | builtin-class _io.StringIO | builtin-class type | -| i_imports.py:34 | ControlFlowNode for io | import | Module io | builtin-class module | -| i_imports.py:35 | ControlFlowNode for Attribute | import | builtin-class _io.BytesIO | builtin-class type | -| i_imports.py:35 | ControlFlowNode for io | import | Module io | builtin-class module | +| i_imports.py:33 | ControlFlowNode for ImportExpr | import | Missing module io | builtin-class module | +| i_imports.py:34 | ControlFlowNode for io | import | Missing module io | builtin-class module | +| i_imports.py:35 | ControlFlowNode for io | import | Missing module io | builtin-class module | | i_imports.py:37 | ControlFlowNode for ImportExpr | import | Package code | builtin-class module | | i_imports.py:38 | ControlFlowNode for Attribute | import | Function f2 | builtin-class function | | i_imports.py:38 | ControlFlowNode for Attribute | import | Module code.n_nesting | builtin-class module | diff --git a/python/ql/test/library-tests/PointsTo/regressions/wrong/module-imports/conflict-stdlib/LocalModuleWithRef.expected b/python/ql/test/library-tests/PointsTo/regressions/wrong/module-imports/conflict-stdlib/LocalModuleWithRef.expected index 92e569f09e6e..f79649b8a1a8 100644 --- a/python/ql/test/library-tests/PointsTo/regressions/wrong/module-imports/conflict-stdlib/LocalModuleWithRef.expected +++ b/python/ql/test/library-tests/PointsTo/regressions/wrong/module-imports/conflict-stdlib/LocalModuleWithRef.expected @@ -1,3 +1,2 @@ -| Local module | code-invalid-package-name/cmd.py:0:0:0:0 | Module cmd | referenced in external file called | pdb.py | | Local module | code-invalid-package-name/cmd.py:0:0:0:0 | Module cmd | referenced in local file called | test_ok.py | | Local module | code-invalid-package-name/unique_name.py:0:0:0:0 | Module unique_name | referenced in local file called | unique_name_use.py | diff --git a/python/ql/test/library-tests/PointsTo/regressions/wrong/module-imports/conflict-stdlib/ModuleWithLocalRef.expected b/python/ql/test/library-tests/PointsTo/regressions/wrong/module-imports/conflict-stdlib/ModuleWithLocalRef.expected index cf5d7560b9ae..4c08caeec0bc 100644 --- a/python/ql/test/library-tests/PointsTo/regressions/wrong/module-imports/conflict-stdlib/ModuleWithLocalRef.expected +++ b/python/ql/test/library-tests/PointsTo/regressions/wrong/module-imports/conflict-stdlib/ModuleWithLocalRef.expected @@ -1,3 +1,3 @@ | Module 'cmd' (local, not in stdlib, not missing) referenced in local file | code-invalid-package-name/test_ok.py:1 | -| Module 'pdb' (external, in stdlib, not missing) referenced in local file | code-invalid-package-name/test_fail.py:3 | +| Module 'pdb' (external, not in stdlib, missing) referenced in local file | code-invalid-package-name/test_fail.py:3 | | Module 'unique_name' (local, not in stdlib, not missing) referenced in local file | code-invalid-package-name/unique_name_use.py:1 | diff --git a/python/ql/test/library-tests/dataflow/coverage-py3/argumentRoutingTest.expected b/python/ql/test/library-tests/dataflow/coverage-py3/argumentRoutingTest.expected index 8ec8033d086e..8f2ca113e3c3 100644 --- a/python/ql/test/library-tests/dataflow/coverage-py3/argumentRoutingTest.expected +++ b/python/ql/test/library-tests/dataflow/coverage-py3/argumentRoutingTest.expected @@ -1,2 +1,6 @@ testFailures +| classes.py:54:44:54:107 | Comment #$ arg1="with_length_hint" func=With_length_hint.__length_hint__ | Missing result:arg1="with_length_hint" | +| classes.py:54:44:54:107 | Comment #$ arg1="with_length_hint" func=With_length_hint.__length_hint__ | Missing result:func=With_length_hint.__length_hint__ | +| classes.py:71:32:71:77 | Comment #$ arg1="with_index" func=With_index.__index__ | Missing result:arg1="with_index" | +| classes.py:71:32:71:77 | Comment #$ arg1="with_index" func=With_index.__index__ | Missing result:func=With_index.__index__ | failures diff --git a/python/ql/test/library-tests/dataflow/fieldflow/UnresolvedCalls.expected b/python/ql/test/library-tests/dataflow/fieldflow/UnresolvedCalls.expected index 8ec8033d086e..961827020749 100644 --- a/python/ql/test/library-tests/dataflow/fieldflow/UnresolvedCalls.expected +++ b/python/ql/test/library-tests/dataflow/fieldflow/UnresolvedCalls.expected @@ -1,2 +1,6 @@ testFailures +| test.py:4:17:4:60 | ControlFlowNode for Attribute() | Unexpected result: unresolved_call=os.path.dirname(..) | +| test.py:4:33:4:59 | ControlFlowNode for Attribute() | Unexpected result: unresolved_call=os.path.dirname(..) | +| test_dict.py:4:17:4:60 | ControlFlowNode for Attribute() | Unexpected result: unresolved_call=os.path.dirname(..) | +| test_dict.py:4:33:4:59 | ControlFlowNode for Attribute() | Unexpected result: unresolved_call=os.path.dirname(..) | failures diff --git a/python/ql/test/library-tests/frameworks/stdlib/InlineTaintTest.expected b/python/ql/test/library-tests/frameworks/stdlib/InlineTaintTest.expected index 366de37b8677..847392ab5942 100644 --- a/python/ql/test/library-tests/frameworks/stdlib/InlineTaintTest.expected +++ b/python/ql/test/library-tests/frameworks/stdlib/InlineTaintTest.expected @@ -1,4 +1,5 @@ argumentToEnsureNotTaintedNotMarkedAsSpurious untaintedArgumentToEnsureTaintedNotMarkedAsMissing testFailures +| threat_models.py:40:35:40:55 | Comment # $ SPURIOUS: tainted | Fixed spurious result:tainted= | failures diff --git a/python/ql/test/library-tests/modules/duplicate_name/Modules.expected b/python/ql/test/library-tests/modules/duplicate_name/Modules.expected index 45bd0378c226..bd3437af6501 100644 --- a/python/ql/test/library-tests/modules/duplicate_name/Modules.expected +++ b/python/ql/test/library-tests/modules/duplicate_name/Modules.expected @@ -1,3 +1 @@ | sqlite3 | 2 | 1 | -| sqlite3.__init__ | 2 | 1 | -| sqlite3.dump | 2 | 1 | diff --git a/python/ql/test/query-tests/Security/CWE-732-WeakFilePermissions/WeakFilePermissions.expected b/python/ql/test/query-tests/Security/CWE-732-WeakFilePermissions/WeakFilePermissions.expected index 3bfb6fe4f88a..762d2599c2d8 100644 --- a/python/ql/test/query-tests/Security/CWE-732-WeakFilePermissions/WeakFilePermissions.expected +++ b/python/ql/test/query-tests/Security/CWE-732-WeakFilePermissions/WeakFilePermissions.expected @@ -2,6 +2,5 @@ | test.py:8:1:8:20 | ControlFlowNode for Attribute() | Overly permissive mask in chmod sets file to world writable. | | test.py:9:1:9:21 | ControlFlowNode for Attribute() | Overly permissive mask in chmod sets file to world writable. | | test.py:11:1:11:21 | ControlFlowNode for Attribute() | Overly permissive mask in chmod sets file to group readable. | -| test.py:13:1:13:28 | ControlFlowNode for Attribute() | Overly permissive mask in chmod sets file to group writable. | | test.py:14:1:14:19 | ControlFlowNode for Attribute() | Overly permissive mask in chmod sets file to group writable. | | test.py:16:1:16:25 | ControlFlowNode for Attribute() | Overly permissive mask in open sets file to world readable. | diff --git a/python/ql/test/query-tests/Statements/no_effect/StatementNoEffect.expected b/python/ql/test/query-tests/Statements/no_effect/StatementNoEffect.expected index 5b1626128a44..9b534e55d7f1 100644 --- a/python/ql/test/query-tests/Statements/no_effect/StatementNoEffect.expected +++ b/python/ql/test/query-tests/Statements/no_effect/StatementNoEffect.expected @@ -1,3 +1,5 @@ +| assert_raises.py:9:13:9:19 | ExprStmt | This statement has no effect. | +| assert_raises.py:11:13:11:16 | ExprStmt | This statement has no effect. | | test.py:24:1:24:3 | ExprStmt | This statement has no effect. | | test.py:25:1:25:13 | ExprStmt | This statement has no effect. | | test.py:26:1:26:6 | ExprStmt | This statement has no effect. | From 4a291147e08e75cdc023e166bfbd86aef6d66817 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Thu, 10 Oct 2024 13:45:08 +0200 Subject: [PATCH 084/217] Python: only look for the py2 stdlib if we extract std lib --- python/extractor/semmle/populator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/extractor/semmle/populator.py b/python/extractor/semmle/populator.py index c2d6b6277c90..a1be196ffaf6 100644 --- a/python/extractor/semmle/populator.py +++ b/python/extractor/semmle/populator.py @@ -67,7 +67,7 @@ def main(sys_path = sys.path[:]): update_analysis_version(last_version) found_py2 = False - if get_analysis_major_version() == 2: + if get_analysis_major_version() == 2 and options.extract_stdlib: # Setup `sys_path` to use the Python 2 standard library sys_path, found_py2 = get_py2_sys_path(logger, sys_path) From c013d4a59c94f396ad57cc5574be3ce16b0f46ea Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Thu, 10 Oct 2024 14:11:58 +0200 Subject: [PATCH 085/217] Python: update test expectations --- .../PointsTo/class_properties/ClassValues.expected | 6 ++---- .../test/2/library-tests/PointsTo/imports2/Runtime.expected | 4 ---- .../PointsTo/imports2/RuntimeWithType.expected | 4 ---- python/ql/test/2/library-tests/six/pointsto.expected | 4 ++-- python/ql/test/2/query-tests/Summary/LinesOfCode.expected | 2 +- 5 files changed, 5 insertions(+), 15 deletions(-) diff --git a/python/ql/test/2/library-tests/PointsTo/class_properties/ClassValues.expected b/python/ql/test/2/library-tests/PointsTo/class_properties/ClassValues.expected index 9835b2573b19..56d3bde865f4 100644 --- a/python/ql/test/2/library-tests/PointsTo/class_properties/ClassValues.expected +++ b/python/ql/test/2/library-tests/PointsTo/class_properties/ClassValues.expected @@ -1,12 +1,10 @@ -| mapping | builtin-class collections.defaultdict | | mapping | builtin-class dict | | mapping | class MyDictSubclass | -| mapping | class MyMappingABC | -| mapping | class OrderedDict | | neither sequence nor mapping | builtin-class set | +| neither sequence nor mapping | class MyMappingABC | +| neither sequence nor mapping | class MySequenceABC | | sequence | builtin-class list | | sequence | builtin-class str | | sequence | builtin-class tuple | | sequence | builtin-class unicode | -| sequence | class MySequenceABC | | sequence | class MySequenceImpl | diff --git a/python/ql/test/2/library-tests/PointsTo/imports2/Runtime.expected b/python/ql/test/2/library-tests/PointsTo/imports2/Runtime.expected index 345f112dccb9..fe825523ca21 100644 --- a/python/ql/test/2/library-tests/PointsTo/imports2/Runtime.expected +++ b/python/ql/test/2/library-tests/PointsTo/imports2/Runtime.expected @@ -44,14 +44,10 @@ | test.py | 15 | ControlFlowNode for moduleX | Module package.moduleX | Entry node for Module package.moduleX | | test.py | 16 | ControlFlowNode for Attribute | class Y | ControlFlowNode for ClassExpr | | test.py | 16 | ControlFlowNode for moduleX | Module package.moduleX | Entry node for Module package.moduleX | -| test.py | 19 | ControlFlowNode for ImportExpr | Module tty | ControlFlowNode for ImportExpr | -| test.py | 19 | ControlFlowNode for tty | Module tty | ControlFlowNode for ImportExpr | | test.py | 22 | ControlFlowNode for Attribute | Builtin-function exc_info | ControlFlowNode for from sys import * | | test.py | 22 | ControlFlowNode for x | Module package.x | Entry node for Module package.x | | test.py | 24 | ControlFlowNode for IntegerLiteral | int 0 | ControlFlowNode for IntegerLiteral | | test.py | 24 | ControlFlowNode for argv | int 0 | ControlFlowNode for IntegerLiteral | | test.py | 27 | ControlFlowNode for ImportExpr | Module sys | ControlFlowNode for ImportExpr | | test.py | 31 | ControlFlowNode for argv | list object | ControlFlowNode for from sys import * | -| test.py | 33 | ControlFlowNode for ImportExpr | Module socket | ControlFlowNode for ImportExpr | -| test.py | 34 | ControlFlowNode for timeout | builtin-class socket.timeout | ControlFlowNode for from _socket import * | | x.py | 2 | ControlFlowNode for ImportExpr | Module sys | ControlFlowNode for ImportExpr | diff --git a/python/ql/test/2/library-tests/PointsTo/imports2/RuntimeWithType.expected b/python/ql/test/2/library-tests/PointsTo/imports2/RuntimeWithType.expected index 7082c15e4104..e55d70d073df 100644 --- a/python/ql/test/2/library-tests/PointsTo/imports2/RuntimeWithType.expected +++ b/python/ql/test/2/library-tests/PointsTo/imports2/RuntimeWithType.expected @@ -44,14 +44,10 @@ | test.py | 15 | ControlFlowNode for moduleX | Module package.moduleX | builtin-class module | Entry node for Module package.moduleX | | test.py | 16 | ControlFlowNode for Attribute | class Y | builtin-class type | ControlFlowNode for ClassExpr | | test.py | 16 | ControlFlowNode for moduleX | Module package.moduleX | builtin-class module | Entry node for Module package.moduleX | -| test.py | 19 | ControlFlowNode for ImportExpr | Module tty | builtin-class module | ControlFlowNode for ImportExpr | -| test.py | 19 | ControlFlowNode for tty | Module tty | builtin-class module | ControlFlowNode for ImportExpr | | test.py | 22 | ControlFlowNode for Attribute | Builtin-function exc_info | builtin-class builtin_function_or_method | ControlFlowNode for from sys import * | | test.py | 22 | ControlFlowNode for x | Module package.x | builtin-class module | Entry node for Module package.x | | test.py | 24 | ControlFlowNode for IntegerLiteral | int 0 | builtin-class int | ControlFlowNode for IntegerLiteral | | test.py | 24 | ControlFlowNode for argv | int 0 | builtin-class int | ControlFlowNode for IntegerLiteral | | test.py | 27 | ControlFlowNode for ImportExpr | Module sys | builtin-class module | ControlFlowNode for ImportExpr | | test.py | 31 | ControlFlowNode for argv | list object | builtin-class list | ControlFlowNode for from sys import * | -| test.py | 33 | ControlFlowNode for ImportExpr | Module socket | builtin-class module | ControlFlowNode for ImportExpr | -| test.py | 34 | ControlFlowNode for timeout | builtin-class socket.timeout | builtin-class type | ControlFlowNode for from _socket import * | | x.py | 2 | ControlFlowNode for ImportExpr | Module sys | builtin-class module | ControlFlowNode for ImportExpr | diff --git a/python/ql/test/2/library-tests/six/pointsto.expected b/python/ql/test/2/library-tests/six/pointsto.expected index ca063a000e31..1d2e4e7f74e2 100644 --- a/python/ql/test/2/library-tests/six/pointsto.expected +++ b/python/ql/test/2/library-tests/six/pointsto.expected @@ -1,7 +1,7 @@ | six | Package six | | six.moves | Package six.moves | -| six.moves.http_client | Module httplib | -| six.moves.http_client.HTTPConnection | class HTTPConnection | +| six.moves.http_client | Missing module httplib | +| six.moves.http_client.HTTPConnection | Missing module attribute httplib.HTTPConnection | | six.moves.range | builtin-class xrange | | six.moves.urllib | Package six.moves.urllib | | six.moves.urllib.parse | Module six.moves.urllib_parse | diff --git a/python/ql/test/2/query-tests/Summary/LinesOfCode.expected b/python/ql/test/2/query-tests/Summary/LinesOfCode.expected index 5aa95ec1ce55..74c7709367a7 100644 --- a/python/ql/test/2/query-tests/Summary/LinesOfCode.expected +++ b/python/ql/test/2/query-tests/Summary/LinesOfCode.expected @@ -1 +1 @@ -| 38 | +| 11 | From 22588c9f85fcb0da45a63844abd9b3a7cabf3f8d Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Thu, 10 Oct 2024 15:25:04 +0200 Subject: [PATCH 086/217] Python: update ectractor version --- python/extractor/semmle/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/extractor/semmle/util.py b/python/extractor/semmle/util.py index 8e1a371fc717..41af1d497b32 100644 --- a/python/extractor/semmle/util.py +++ b/python/extractor/semmle/util.py @@ -10,7 +10,7 @@ #Semantic version of extractor. #Update this if any changes are made -VERSION = "6.1.2" +VERSION = "7.0.0" PY_EXTENSIONS = ".py", ".pyw" From e2eb08b543f1a5299806c9cd9f0b8d4f8059e7fb Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 11 Oct 2024 14:03:43 +0200 Subject: [PATCH 087/217] Python: improve messaging --- python/extractor/semmle/cmdline.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/python/extractor/semmle/cmdline.py b/python/extractor/semmle/cmdline.py index 79f974279bcb..47007c065fdc 100644 --- a/python/extractor/semmle/cmdline.py +++ b/python/extractor/semmle/cmdline.py @@ -228,7 +228,7 @@ def parse(command_line): if 'CODEQL_EXTRACTOR_PYTHON_DONT_EXTRACT_STDLIB' in os.environ: options.extract_stdlib = False - print ("Warning: CODEQL_EXTRACTOR_PYTHON_DONT_EXTRACT_STDLIB is deprecated; the default is now to not extract the standard library.") + print ("WARNING: CODEQL_EXTRACTOR_PYTHON_DONT_EXTRACT_STDLIB is deprecated; the default is now to not extract the standard library.") if 'CODEQL_EXTRACTOR_PYTHON_EXTRACT_STDLIB' in os.environ: options.extract_stdlib = True @@ -236,7 +236,9 @@ def parse(command_line): options.prune = True if options.extract_stdlib: - print ("Warning: The analysis will extract the standard library. This behavior is deprecated and will be removed in a future release. We expect it to be gone in CLI version 2.20.0.") + print ("WARNING: The analysis will extract the standard library. This behavior is deprecated and will be removed in a future release. We expect it to be gone in CLI version 2.20.0.") + else: + print ("INFO: The Python extractor has recently stopped extracting the standard library by default. If you encounter problems, please let us know by submitting an issue to https://github.com/github/codeql. It is possible to re-enable extraction of the standard library by setting the environment variable CODEQL_EXTRACTOR_PYTHON_EXTRACT_STDLIB.") return options, args From 56506943139faccf06a7efcb36dab37d8032fe4e Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 11 Oct 2024 14:10:32 +0200 Subject: [PATCH 088/217] Python: update tests --- .../library-tests/frameworks/stdlib/InlineTaintTest.expected | 1 - python/ql/test/library-tests/frameworks/stdlib/threat_models.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/python/ql/test/library-tests/frameworks/stdlib/InlineTaintTest.expected b/python/ql/test/library-tests/frameworks/stdlib/InlineTaintTest.expected index 847392ab5942..366de37b8677 100644 --- a/python/ql/test/library-tests/frameworks/stdlib/InlineTaintTest.expected +++ b/python/ql/test/library-tests/frameworks/stdlib/InlineTaintTest.expected @@ -1,5 +1,4 @@ argumentToEnsureNotTaintedNotMarkedAsSpurious untaintedArgumentToEnsureTaintedNotMarkedAsMissing testFailures -| threat_models.py:40:35:40:55 | Comment # $ SPURIOUS: tainted | Fixed spurious result:tainted= | failures diff --git a/python/ql/test/library-tests/frameworks/stdlib/threat_models.py b/python/ql/test/library-tests/frameworks/stdlib/threat_models.py index 23b800ce576e..4b6a1a066e7f 100644 --- a/python/ql/test/library-tests/frameworks/stdlib/threat_models.py +++ b/python/ql/test/library-tests/frameworks/stdlib/threat_models.py @@ -37,7 +37,7 @@ ensure_tainted(explicit_argv_parsing.foo) # $ tainted fake_args = parser.parse_args([""]) -ensure_not_tainted(fake_args.foo) # $ SPURIOUS: tainted +ensure_not_tainted(fake_args.foo) ######################################## # reading input from stdin From fc298b23c939863c2f9ad84b46902b400ea2b9f5 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Fri, 11 Oct 2024 15:53:50 +0200 Subject: [PATCH 089/217] Rust: address comment --- .../rust/controlflow/internal/ControlFlowGraphImpl.qll | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index d73678b216c1..795ae50d363d 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -273,11 +273,11 @@ class IfExprTree extends PostOrderTree instanceof IfExpr { } } -class FormatArgsExprTree extends StandardPostOrderTree instanceof FormatArgsExpr { +class FormatArgsExprTree extends StandardPostOrderTree, FormatArgsExpr { override AstNode getChildNode(int i) { - i = -1 and result = super.getTemplate() + i = -1 and result = this.getTemplate() or - result = super.getArg(i).getExpr() + result = this.getArg(i).getExpr() } } @@ -441,14 +441,14 @@ class MacroCallTree extends ControlFlowTree, MacroCall { override predicate last(AstNode last, Completion c) { last(this.getExpanded(), last, c) or - not exists(super.getExpanded()) and + not exists(this.getExpanded()) and last = this and completionIsValidFor(c, last) } override predicate succ(AstNode pred, AstNode succ, Completion c) { none() } - override predicate propagatesAbnormal(AstNode child) { none() } + override predicate propagatesAbnormal(AstNode child) { child = this.getExpanded() } } class MacroExprTree extends StandardPostOrderTree, MacroExpr { From 9f340279cbd52ce5998ff70b44d81138800d7a40 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 11 Oct 2024 15:10:19 +0100 Subject: [PATCH 090/217] Kotlin: Accept test changes --- .../ql/integration-tests/kotlin/all-platforms/logs/logs.expected | 1 + 1 file changed, 1 insertion(+) diff --git a/java/ql/integration-tests/kotlin/all-platforms/logs/logs.expected b/java/ql/integration-tests/kotlin/all-platforms/logs/logs.expected index 5fc4366688ea..b7f2d0a0b378 100644 --- a/java/ql/integration-tests/kotlin/all-platforms/logs/logs.expected +++ b/java/ql/integration-tests/kotlin/all-platforms/logs/logs.expected @@ -1,5 +1,6 @@ Log file 1 {"origin": "CodeQL Kotlin extractor", "kind": "INFO", "message": "Extraction started"} +{"origin": "CodeQL Kotlin extractor", "kind": "INFO", "message": "Kotlin extractor verbosity is 3"} {"origin": "CodeQL Kotlin extractor", "kind": "INFO", "message": "Extraction for invocation TRAP file "} {"origin": "CodeQL Kotlin extractor", "kind": "INFO", "message": "Kotlin version "} {"origin": "CodeQL Kotlin extractor", "kind": "INFO", "message": "Extracting file test.kt"} From 85f2582afd4d8f5f1fd2ea3e0f24dce65c6ba210 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 8 Oct 2024 10:26:14 +0100 Subject: [PATCH 091/217] Rust: Move CFG consistency logic into a library. --- rust/ql/consistency-queries/CfgConsistency.ql | 38 +---------------- .../controlflow/internal/CfgConsistency.qll | 41 +++++++++++++++++++ 2 files changed, 42 insertions(+), 37 deletions(-) create mode 100644 rust/ql/lib/codeql/rust/controlflow/internal/CfgConsistency.qll diff --git a/rust/ql/consistency-queries/CfgConsistency.ql b/rust/ql/consistency-queries/CfgConsistency.ql index 3a95fde507b4..7f5e1649b22d 100644 --- a/rust/ql/consistency-queries/CfgConsistency.ql +++ b/rust/ql/consistency-queries/CfgConsistency.ql @@ -1,37 +1 @@ -import rust -import codeql.rust.controlflow.internal.ControlFlowGraphImpl::Consistency as Consistency -import Consistency -import codeql.rust.controlflow.ControlFlowGraph -import codeql.rust.controlflow.internal.ControlFlowGraphImpl as CfgImpl -import codeql.rust.controlflow.internal.Completion - -/** - * All `Expr` nodes are `PostOrderTree`s - */ -query predicate nonPostOrderExpr(Expr e, string cls) { - cls = e.getPrimaryQlClasses() and - not e instanceof LetExpr and - not e instanceof ParenExpr and - exists(AstNode last, Completion c | - CfgImpl::last(e, last, c) and - last != e and - c instanceof NormalCompletion - ) -} - -query predicate scopeNoFirst(CfgScope scope) { - Consistency::scopeNoFirst(scope) and - not scope = any(Function f | not exists(f.getBody())) and - not scope = any(ClosureExpr c | not exists(c.getBody())) -} - -/** Holds if `be` is the `else` branch of a `let` statement that results in a panic. */ -private predicate letElsePanic(BlockExpr be) { - be = any(LetStmt let).getLetElse().getBlockExpr() and - exists(Completion c | CfgImpl::last(be, _, c) | completionIsNormal(c)) -} - -query predicate deadEnd(CfgImpl::Node node) { - Consistency::deadEnd(node) and - not letElsePanic(node.getAstNode()) -} +import codeql.rust.controlflow.internal.CfgConsistency diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/CfgConsistency.qll b/rust/ql/lib/codeql/rust/controlflow/internal/CfgConsistency.qll new file mode 100644 index 000000000000..dafbb327237e --- /dev/null +++ b/rust/ql/lib/codeql/rust/controlflow/internal/CfgConsistency.qll @@ -0,0 +1,41 @@ +/** + * Provides classes for recognizing control flow graph inconsistencies. + */ + +private import rust +private import codeql.rust.controlflow.internal.ControlFlowGraphImpl::Consistency as Consistency +import Consistency +private import codeql.rust.controlflow.ControlFlowGraph +private import codeql.rust.controlflow.internal.ControlFlowGraphImpl as CfgImpl +private import codeql.rust.controlflow.internal.Completion + +/** + * All `Expr` nodes are `PostOrderTree`s + */ +query predicate nonPostOrderExpr(Expr e, string cls) { + cls = e.getPrimaryQlClasses() and + not e instanceof LetExpr and + not e instanceof ParenExpr and + exists(AstNode last, Completion c | + CfgImpl::last(e, last, c) and + last != e and + c instanceof NormalCompletion + ) +} + +query predicate scopeNoFirst(CfgScope scope) { + Consistency::scopeNoFirst(scope) and + not scope = any(Function f | not exists(f.getBody())) and + not scope = any(ClosureExpr c | not exists(c.getBody())) +} + +/** Holds if `be` is the `else` branch of a `let` statement that results in a panic. */ +private predicate letElsePanic(BlockExpr be) { + be = any(LetStmt let).getLetElse().getBlockExpr() and + exists(Completion c | CfgImpl::last(be, _, c) | completionIsNormal(c)) +} + +query predicate deadEnd(CfgImpl::Node node) { + Consistency::deadEnd(node) and + not letElsePanic(node.getAstNode()) +} From 4398c83a67bdb8b1f2ede221825a52ab804d932b Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 9 Oct 2024 18:13:28 +0100 Subject: [PATCH 092/217] Rust: Add more QLDoc to the CFG consistency library. --- .../lib/codeql/rust/controlflow/internal/CfgConsistency.qll | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/CfgConsistency.qll b/rust/ql/lib/codeql/rust/controlflow/internal/CfgConsistency.qll index dafbb327237e..849c2a824adc 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/CfgConsistency.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/CfgConsistency.qll @@ -23,6 +23,9 @@ query predicate nonPostOrderExpr(Expr e, string cls) { ) } +/** + * Holds if CFG scope `scope` lacks an initial AST node. Overrides shared consistency predicate. + */ query predicate scopeNoFirst(CfgScope scope) { Consistency::scopeNoFirst(scope) and not scope = any(Function f | not exists(f.getBody())) and @@ -35,6 +38,9 @@ private predicate letElsePanic(BlockExpr be) { exists(Completion c | CfgImpl::last(be, _, c) | completionIsNormal(c)) } +/** + * Holds if `node` is lacking a successor. Overrides shared consistency predicate. + */ query predicate deadEnd(CfgImpl::Node node) { Consistency::deadEnd(node) and not letElsePanic(node.getAstNode()) From 7b712f3d65c901235847b46b017bbf6c212f76c0 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 8 Oct 2024 09:48:50 +0100 Subject: [PATCH 093/217] Rust: Calculate a total of CFG inconsistencies. --- .../controlflow/internal/CfgConsistency.qll | 47 +++++++++++++++++++ rust/ql/src/queries/summary/Stats.qll | 12 +++++ rust/ql/src/queries/summary/SummaryStats.ql | 2 + .../diagnostics/SummaryStats.expected | 1 + 4 files changed, 62 insertions(+) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/CfgConsistency.qll b/rust/ql/lib/codeql/rust/controlflow/internal/CfgConsistency.qll index 849c2a824adc..e463f5776652 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/CfgConsistency.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/CfgConsistency.qll @@ -45,3 +45,50 @@ query predicate deadEnd(CfgImpl::Node node) { Consistency::deadEnd(node) and not letElsePanic(node.getAstNode()) } + +/** + * Gets counts of control flow graph inconsistencies of each type. + */ +int getCfgInconsistencyCounts(string type) { + // total results from all the CFG consistency query predicates in: + // - `codeql.rust.controlflow.internal.CfgConsistency` (this file) + // - `shared.controlflow.codeql.controlflow.Cfg` + type = "Non-unique set representation" and + result = count(CfgImpl::Splits ss | Consistency::nonUniqueSetRepresentation(ss, _) | ss) + or + type = "Splitting invariant 2" and + result = count(AstNode n | Consistency::breakInvariant2(n, _, _, _, _, _) | n) + or + type = "Splitting invariant 3" and + result = count(AstNode n | Consistency::breakInvariant3(n, _, _, _, _, _) | n) + or + type = "Splitting invariant 4" and + result = count(AstNode n | Consistency::breakInvariant4(n, _, _, _, _, _) | n) + or + type = "Splitting invariant 5" and + result = count(AstNode n | Consistency::breakInvariant5(n, _, _, _, _, _) | n) + or + type = "Multiple successors of the same type" and + result = count(CfgNode n | Consistency::multipleSuccessors(n, _, _) | n) + or + type = "Simple and normal successors" and + result = count(CfgNode n | Consistency::simpleAndNormalSuccessors(n, _, _, _, _) | n) + or + type = "Dead end" and + result = count(CfgNode n | Consistency::deadEnd(n) | n) + or + type = "Non-unique split kind" and + result = count(CfgImpl::SplitImpl si | Consistency::nonUniqueSplitKind(si, _) | si) + or + type = "Non-unique list order" and + result = count(CfgImpl::SplitKind sk | Consistency::nonUniqueListOrder(sk, _) | sk) + or + type = "Multiple toStrings" and + result = count(CfgNode n | Consistency::multipleToString(n, _) | n) + or + type = "CFG scope lacks initial AST node" and + result = count(CfgScope s | Consistency::scopeNoFirst(s) | s) + or + type = "Non-PostOrderTree Expr node" and + result = count(Expr e | nonPostOrderExpr(e, _) | e) +} diff --git a/rust/ql/src/queries/summary/Stats.qll b/rust/ql/src/queries/summary/Stats.qll index 2f3992303f3b..c1f0bdd08961 100644 --- a/rust/ql/src/queries/summary/Stats.qll +++ b/rust/ql/src/queries/summary/Stats.qll @@ -3,9 +3,21 @@ */ import rust +private import codeql.rust.controlflow.internal.CfgConsistency as CfgConsistency +/** + * Gets a count of the total number of lines of code in the database. + */ int getLinesOfCode() { result = sum(File f | | f.getNumberOfLinesOfCode()) } +/** + * Gets a count of the total number of lines of code from the source code directory in the database. + */ int getLinesOfUserCode() { result = sum(File f | exists(f.getRelativePath()) | f.getNumberOfLinesOfCode()) } + +/** + * Gets a count of the total number of control flow graph inconsistencies in the database. + */ +int getTotalCfgInconsistencies() { result = sum(CfgConsistency::getCfgInconsistencyCounts(_)) } diff --git a/rust/ql/src/queries/summary/SummaryStats.ql b/rust/ql/src/queries/summary/SummaryStats.ql index a3494ccb769c..83429fae6d7d 100644 --- a/rust/ql/src/queries/summary/SummaryStats.ql +++ b/rust/ql/src/queries/summary/SummaryStats.ql @@ -33,4 +33,6 @@ where key = "Lines of code extracted" and value = getLinesOfCode().toString() or key = "Lines of user code extracted" and value = getLinesOfUserCode().toString() + or + key = "Inconsistencies - CFG" and value = getTotalCfgInconsistencies().toString() select key, value diff --git a/rust/ql/test/query-tests/diagnostics/SummaryStats.expected b/rust/ql/test/query-tests/diagnostics/SummaryStats.expected index 100ade0c0203..0a1312ad5d02 100644 --- a/rust/ql/test/query-tests/diagnostics/SummaryStats.expected +++ b/rust/ql/test/query-tests/diagnostics/SummaryStats.expected @@ -5,5 +5,6 @@ | Files extracted - total | 7 | | Files extracted - with errors | 2 | | Files extracted - without errors | 5 | +| Inconsistencies - CFG | 0 | | Lines of code extracted | 59 | | Lines of user code extracted | 59 | From d4c3e3323f8251bfcfe1cd930128aadc4c520164 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 9 Oct 2024 18:16:05 +0100 Subject: [PATCH 094/217] Rust: Add diagnostic query for CFG inconsistency counts. --- .../queries/diagnostics/CfgConsistencyCounts.ql | 15 +++++++++++++++ .../diagnostics/CfgConsistencyCounts.expected | 13 +++++++++++++ .../diagnostics/CfgConsistencyCounts.qlref | 1 + 3 files changed, 29 insertions(+) create mode 100644 rust/ql/src/queries/diagnostics/CfgConsistencyCounts.ql create mode 100644 rust/ql/test/query-tests/diagnostics/CfgConsistencyCounts.expected create mode 100644 rust/ql/test/query-tests/diagnostics/CfgConsistencyCounts.qlref diff --git a/rust/ql/src/queries/diagnostics/CfgConsistencyCounts.ql b/rust/ql/src/queries/diagnostics/CfgConsistencyCounts.ql new file mode 100644 index 000000000000..ecc1833176aa --- /dev/null +++ b/rust/ql/src/queries/diagnostics/CfgConsistencyCounts.ql @@ -0,0 +1,15 @@ +/** + * @name Control flow graph inconsistency counts + * @description Counts the number of control flow graph inconsistencies of each type. This query is intended for internal use. + * @kind diagnostic + * @id rust/diagnostics/cfg-consistency-counts + */ + +import rust +import codeql.rust.controlflow.internal.CfgConsistency as Consistency + +// see also `rust/diagnostics/cfg-consistency`, which lists the +// individual inconsistency results. +from string type, int num +where num = Consistency::getCfgInconsistencyCounts(type) +select type, num diff --git a/rust/ql/test/query-tests/diagnostics/CfgConsistencyCounts.expected b/rust/ql/test/query-tests/diagnostics/CfgConsistencyCounts.expected new file mode 100644 index 000000000000..7df2863da9e8 --- /dev/null +++ b/rust/ql/test/query-tests/diagnostics/CfgConsistencyCounts.expected @@ -0,0 +1,13 @@ +| CFG scope lacks initial AST node | 0 | +| Dead end | 0 | +| Multiple successors of the same type | 0 | +| Multiple toStrings | 0 | +| Non-PostOrderTree Expr node | 0 | +| Non-unique list order | 0 | +| Non-unique set representation | 0 | +| Non-unique split kind | 0 | +| Simple and normal successors | 0 | +| Splitting invariant 2 | 0 | +| Splitting invariant 3 | 0 | +| Splitting invariant 4 | 0 | +| Splitting invariant 5 | 0 | diff --git a/rust/ql/test/query-tests/diagnostics/CfgConsistencyCounts.qlref b/rust/ql/test/query-tests/diagnostics/CfgConsistencyCounts.qlref new file mode 100644 index 000000000000..6e7ffa8aaa9d --- /dev/null +++ b/rust/ql/test/query-tests/diagnostics/CfgConsistencyCounts.qlref @@ -0,0 +1 @@ +queries/diagnostics/CfgConsistencyCounts.ql From ac9a8d602c21b88f216658e51d4bf4b37611af98 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 10 Oct 2024 11:35:22 +0100 Subject: [PATCH 095/217] Rust: Add metadata to the original CFG consistency query. --- rust/ql/consistency-queries/CfgConsistency.ql | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/rust/ql/consistency-queries/CfgConsistency.ql b/rust/ql/consistency-queries/CfgConsistency.ql index 7f5e1649b22d..9f766a9f6687 100644 --- a/rust/ql/consistency-queries/CfgConsistency.ql +++ b/rust/ql/consistency-queries/CfgConsistency.ql @@ -1 +1,8 @@ -import codeql.rust.controlflow.internal.CfgConsistency +/** + * @name Control flow graph inconsistencies + * @description Lists the control flow graph inconsistencies in the database. This query is intended for internal use. + * @kind table + * @id rust/diagnostics/cfg-consistency + */ + + import codeql.rust.controlflow.internal.CfgConsistency From c4256f21c728b8082c42deefa1f04f3fceb5103b Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 11 Oct 2024 17:18:41 +0100 Subject: [PATCH 096/217] Rust: Fix out-of-date spurious tags. --- rust/ql/test/query-tests/unusedentities/main.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rust/ql/test/query-tests/unusedentities/main.rs b/rust/ql/test/query-tests/unusedentities/main.rs index 788918ffcba1..9b4fdb0cdd19 100644 --- a/rust/ql/test/query-tests/unusedentities/main.rs +++ b/rust/ql/test/query-tests/unusedentities/main.rs @@ -111,7 +111,7 @@ fn arrays() { println!("lets use {:?}", js); - for k // SPURIOUS: unused variable [macros not yet supported] + for k in ks { println!("lets use {}", k); // [unreachable FALSE POSITIVE] @@ -166,12 +166,12 @@ fn loops() { for _ in 1..10 {} - for x // SPURIOUS: unused variable [macros not yet supported] + for x in 1..10 { println!("x is {}", x); } - for x // SPURIOUS: unused variable [macros not yet supported] + for x in 1..10 { assert!(x != 11); } From b0ea17502189e0844084aa0831fcb274597f070a Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 11 Oct 2024 10:40:23 +0200 Subject: [PATCH 097/217] Rust: Add more variables tests --- .../test/library-tests/variables/Cfg.expected | 587 +++++++++++++----- .../variables/variables.expected | 168 ++++- .../test/library-tests/variables/variables.rs | 125 +++- 3 files changed, 692 insertions(+), 188 deletions(-) diff --git a/rust/ql/test/library-tests/variables/Cfg.expected b/rust/ql/test/library-tests/variables/Cfg.expected index d8a19287f4f0..1c04117a2ccd 100644 --- a/rust/ql/test/library-tests/variables/Cfg.expected +++ b/rust/ql/test/library-tests/variables/Cfg.expected @@ -734,13 +734,12 @@ edges | variables.rs:342:5:342:16 | CallExpr | variables.rs:337:13:343:1 | BlockExpr | | | variables.rs:342:5:342:17 | ExprStmt | variables.rs:342:5:342:13 | PathExpr | | | variables.rs:342:15:342:15 | i | variables.rs:342:5:342:16 | CallExpr | | -| variables.rs:345:1:349:1 | enter mutate_param | variables.rs:345:17:345:17 | x | | -| variables.rs:345:1:349:1 | exit mutate_param (normal) | variables.rs:345:1:349:1 | exit mutate_param | | +| variables.rs:345:1:350:1 | enter mutate_param | variables.rs:345:17:345:17 | x | | +| variables.rs:345:1:350:1 | exit mutate_param (normal) | variables.rs:345:1:350:1 | exit mutate_param | | | variables.rs:345:17:345:17 | x | variables.rs:345:17:345:28 | Param | match | | variables.rs:345:17:345:28 | Param | variables.rs:346:5:348:11 | ExprStmt | | -| variables.rs:345:31:349:1 | BlockExpr | variables.rs:345:1:349:1 | exit mutate_param (normal) | | | variables.rs:346:5:346:6 | * ... | variables.rs:347:10:347:10 | x | | -| variables.rs:346:5:348:10 | ... = ... | variables.rs:345:31:349:1 | BlockExpr | | +| variables.rs:346:5:348:10 | ... = ... | variables.rs:349:5:349:13 | ExprStmt | | | variables.rs:346:5:348:11 | ExprStmt | variables.rs:346:6:346:6 | x | | | variables.rs:346:6:346:6 | x | variables.rs:346:5:346:6 | * ... | | | variables.rs:347:9:347:10 | * ... | variables.rs:348:10:348:10 | x | | @@ -748,157 +747,433 @@ edges | variables.rs:347:10:347:10 | x | variables.rs:347:9:347:10 | * ... | | | variables.rs:348:9:348:10 | * ... | variables.rs:347:9:348:10 | ... + ... | | | variables.rs:348:10:348:10 | x | variables.rs:348:9:348:10 | * ... | | -| variables.rs:351:1:355:1 | enter mutate_arg | variables.rs:352:5:352:18 | LetStmt | | -| variables.rs:351:1:355:1 | exit mutate_arg (normal) | variables.rs:351:1:355:1 | exit mutate_arg | | -| variables.rs:351:17:355:1 | BlockExpr | variables.rs:351:1:355:1 | exit mutate_arg (normal) | | -| variables.rs:352:5:352:18 | LetStmt | variables.rs:352:17:352:17 | 2 | | -| variables.rs:352:9:352:13 | x | variables.rs:353:5:353:25 | ExprStmt | match | -| variables.rs:352:17:352:17 | 2 | variables.rs:352:9:352:13 | x | | -| variables.rs:353:5:353:16 | PathExpr | variables.rs:353:23:353:23 | x | | -| variables.rs:353:5:353:24 | CallExpr | variables.rs:354:5:354:17 | ExprStmt | | -| variables.rs:353:5:353:25 | ExprStmt | variables.rs:353:5:353:16 | PathExpr | | -| variables.rs:353:18:353:23 | RefExpr | variables.rs:353:5:353:24 | CallExpr | | -| variables.rs:353:23:353:23 | x | variables.rs:353:18:353:23 | RefExpr | | -| variables.rs:354:5:354:13 | PathExpr | variables.rs:354:15:354:15 | x | | -| variables.rs:354:5:354:16 | CallExpr | variables.rs:351:17:355:1 | BlockExpr | | -| variables.rs:354:5:354:17 | ExprStmt | variables.rs:354:5:354:13 | PathExpr | | -| variables.rs:354:15:354:15 | x | variables.rs:354:5:354:16 | CallExpr | | -| variables.rs:357:1:363:1 | enter alias | variables.rs:358:5:358:18 | LetStmt | | -| variables.rs:357:1:363:1 | exit alias (normal) | variables.rs:357:1:363:1 | exit alias | | -| variables.rs:357:12:363:1 | BlockExpr | variables.rs:357:1:363:1 | exit alias (normal) | | -| variables.rs:358:5:358:18 | LetStmt | variables.rs:358:17:358:17 | 1 | | -| variables.rs:358:9:358:13 | x | variables.rs:359:5:360:15 | LetStmt | match | -| variables.rs:358:17:358:17 | 1 | variables.rs:358:9:358:13 | x | | -| variables.rs:359:5:360:15 | LetStmt | variables.rs:360:14:360:14 | x | | -| variables.rs:359:9:359:9 | y | variables.rs:361:5:361:11 | ExprStmt | match | -| variables.rs:360:9:360:14 | RefExpr | variables.rs:359:9:359:9 | y | | -| variables.rs:360:14:360:14 | x | variables.rs:360:9:360:14 | RefExpr | | -| variables.rs:361:5:361:6 | * ... | variables.rs:361:10:361:10 | 2 | | -| variables.rs:361:5:361:10 | ... = ... | variables.rs:362:5:362:17 | ExprStmt | | -| variables.rs:361:5:361:11 | ExprStmt | variables.rs:361:6:361:6 | y | | -| variables.rs:361:6:361:6 | y | variables.rs:361:5:361:6 | * ... | | -| variables.rs:361:10:361:10 | 2 | variables.rs:361:5:361:10 | ... = ... | | -| variables.rs:362:5:362:13 | PathExpr | variables.rs:362:15:362:15 | x | | -| variables.rs:362:5:362:16 | CallExpr | variables.rs:357:12:363:1 | BlockExpr | | -| variables.rs:362:5:362:17 | ExprStmt | variables.rs:362:5:362:13 | PathExpr | | -| variables.rs:362:15:362:15 | x | variables.rs:362:5:362:16 | CallExpr | | -| variables.rs:365:1:373:1 | enter capture | variables.rs:366:5:366:19 | LetStmt | | -| variables.rs:365:1:373:1 | exit capture (normal) | variables.rs:365:1:373:1 | exit capture | | -| variables.rs:365:14:373:1 | BlockExpr | variables.rs:365:1:373:1 | exit capture (normal) | | -| variables.rs:366:5:366:19 | LetStmt | variables.rs:366:17:366:18 | 10 | | -| variables.rs:366:9:366:13 | x | variables.rs:367:5:370:6 | LetStmt | match | -| variables.rs:366:17:366:18 | 10 | variables.rs:366:9:366:13 | x | | -| variables.rs:367:5:370:6 | LetStmt | variables.rs:367:19:370:5 | ClosureExpr | | -| variables.rs:367:9:367:15 | cap | variables.rs:371:5:371:10 | ExprStmt | match | -| variables.rs:367:19:370:5 | ClosureExpr | variables.rs:367:9:367:15 | cap | | -| variables.rs:367:19:370:5 | enter ClosureExpr | variables.rs:368:9:368:21 | ExprStmt | | -| variables.rs:367:19:370:5 | exit ClosureExpr (normal) | variables.rs:367:19:370:5 | exit ClosureExpr | | -| variables.rs:367:22:370:5 | BlockExpr | variables.rs:367:19:370:5 | exit ClosureExpr (normal) | | -| variables.rs:368:9:368:17 | PathExpr | variables.rs:368:19:368:19 | x | | -| variables.rs:368:9:368:20 | CallExpr | variables.rs:369:9:369:15 | ExprStmt | | -| variables.rs:368:9:368:21 | ExprStmt | variables.rs:368:9:368:17 | PathExpr | | -| variables.rs:368:19:368:19 | x | variables.rs:368:9:368:20 | CallExpr | | -| variables.rs:369:9:369:9 | x | variables.rs:369:14:369:14 | 1 | | -| variables.rs:369:9:369:14 | ... += ... | variables.rs:367:22:370:5 | BlockExpr | | -| variables.rs:369:9:369:15 | ExprStmt | variables.rs:369:9:369:9 | x | | -| variables.rs:369:14:369:14 | 1 | variables.rs:369:9:369:14 | ... += ... | | -| variables.rs:371:5:371:7 | cap | variables.rs:371:5:371:9 | CallExpr | | -| variables.rs:371:5:371:9 | CallExpr | variables.rs:372:5:372:17 | ExprStmt | | -| variables.rs:371:5:371:10 | ExprStmt | variables.rs:371:5:371:7 | cap | | -| variables.rs:372:5:372:13 | PathExpr | variables.rs:372:15:372:15 | x | | -| variables.rs:372:5:372:16 | CallExpr | variables.rs:365:14:373:1 | BlockExpr | | -| variables.rs:372:5:372:17 | ExprStmt | variables.rs:372:5:372:13 | PathExpr | | -| variables.rs:372:15:372:15 | x | variables.rs:372:5:372:16 | CallExpr | | -| variables.rs:375:1:403:1 | enter main | variables.rs:376:5:376:25 | ExprStmt | | -| variables.rs:375:1:403:1 | exit main (normal) | variables.rs:375:1:403:1 | exit main | | -| variables.rs:375:11:403:1 | BlockExpr | variables.rs:375:1:403:1 | exit main (normal) | | -| variables.rs:376:5:376:22 | PathExpr | variables.rs:376:5:376:24 | CallExpr | | -| variables.rs:376:5:376:24 | CallExpr | variables.rs:377:5:377:23 | ExprStmt | | -| variables.rs:376:5:376:25 | ExprStmt | variables.rs:376:5:376:22 | PathExpr | | -| variables.rs:377:5:377:20 | PathExpr | variables.rs:377:5:377:22 | CallExpr | | -| variables.rs:377:5:377:22 | CallExpr | variables.rs:378:5:378:23 | ExprStmt | | -| variables.rs:377:5:377:23 | ExprStmt | variables.rs:377:5:377:20 | PathExpr | | -| variables.rs:378:5:378:20 | PathExpr | variables.rs:378:5:378:22 | CallExpr | | -| variables.rs:378:5:378:22 | CallExpr | variables.rs:379:5:379:23 | ExprStmt | | -| variables.rs:378:5:378:23 | ExprStmt | variables.rs:378:5:378:20 | PathExpr | | -| variables.rs:379:5:379:20 | PathExpr | variables.rs:379:5:379:22 | CallExpr | | -| variables.rs:379:5:379:22 | CallExpr | variables.rs:380:5:380:19 | ExprStmt | | -| variables.rs:379:5:379:23 | ExprStmt | variables.rs:379:5:379:20 | PathExpr | | -| variables.rs:380:5:380:16 | PathExpr | variables.rs:380:5:380:18 | CallExpr | | -| variables.rs:380:5:380:18 | CallExpr | variables.rs:381:5:381:19 | ExprStmt | | -| variables.rs:380:5:380:19 | ExprStmt | variables.rs:380:5:380:16 | PathExpr | | -| variables.rs:381:5:381:16 | PathExpr | variables.rs:381:5:381:18 | CallExpr | | -| variables.rs:381:5:381:18 | CallExpr | variables.rs:382:5:382:19 | ExprStmt | | -| variables.rs:381:5:381:19 | ExprStmt | variables.rs:381:5:381:16 | PathExpr | | -| variables.rs:382:5:382:16 | PathExpr | variables.rs:382:5:382:18 | CallExpr | | -| variables.rs:382:5:382:18 | CallExpr | variables.rs:383:5:383:19 | ExprStmt | | -| variables.rs:382:5:382:19 | ExprStmt | variables.rs:382:5:382:16 | PathExpr | | -| variables.rs:383:5:383:16 | PathExpr | variables.rs:383:5:383:18 | CallExpr | | -| variables.rs:383:5:383:18 | CallExpr | variables.rs:384:5:384:21 | ExprStmt | | -| variables.rs:383:5:383:19 | ExprStmt | variables.rs:383:5:383:16 | PathExpr | | -| variables.rs:384:5:384:18 | PathExpr | variables.rs:384:5:384:20 | CallExpr | | -| variables.rs:384:5:384:20 | CallExpr | variables.rs:385:5:385:21 | ExprStmt | | -| variables.rs:384:5:384:21 | ExprStmt | variables.rs:384:5:384:18 | PathExpr | | -| variables.rs:385:5:385:18 | PathExpr | variables.rs:385:5:385:20 | CallExpr | | -| variables.rs:385:5:385:20 | CallExpr | variables.rs:386:5:386:21 | ExprStmt | | -| variables.rs:385:5:385:21 | ExprStmt | variables.rs:385:5:385:18 | PathExpr | | -| variables.rs:386:5:386:18 | PathExpr | variables.rs:386:5:386:20 | CallExpr | | -| variables.rs:386:5:386:20 | CallExpr | variables.rs:387:5:387:21 | ExprStmt | | -| variables.rs:386:5:386:21 | ExprStmt | variables.rs:386:5:386:18 | PathExpr | | -| variables.rs:387:5:387:18 | PathExpr | variables.rs:387:5:387:20 | CallExpr | | -| variables.rs:387:5:387:20 | CallExpr | variables.rs:388:5:388:21 | ExprStmt | | -| variables.rs:387:5:387:21 | ExprStmt | variables.rs:387:5:387:18 | PathExpr | | -| variables.rs:388:5:388:18 | PathExpr | variables.rs:388:5:388:20 | CallExpr | | -| variables.rs:388:5:388:20 | CallExpr | variables.rs:389:5:389:21 | ExprStmt | | -| variables.rs:388:5:388:21 | ExprStmt | variables.rs:388:5:388:18 | PathExpr | | -| variables.rs:389:5:389:18 | PathExpr | variables.rs:389:5:389:20 | CallExpr | | -| variables.rs:389:5:389:20 | CallExpr | variables.rs:390:5:390:21 | ExprStmt | | -| variables.rs:389:5:389:21 | ExprStmt | variables.rs:389:5:389:18 | PathExpr | | -| variables.rs:390:5:390:18 | PathExpr | variables.rs:390:5:390:20 | CallExpr | | -| variables.rs:390:5:390:20 | CallExpr | variables.rs:391:5:391:21 | ExprStmt | | -| variables.rs:390:5:390:21 | ExprStmt | variables.rs:390:5:390:18 | PathExpr | | -| variables.rs:391:5:391:18 | PathExpr | variables.rs:391:5:391:20 | CallExpr | | -| variables.rs:391:5:391:20 | CallExpr | variables.rs:392:5:392:21 | ExprStmt | | -| variables.rs:391:5:391:21 | ExprStmt | variables.rs:391:5:391:18 | PathExpr | | -| variables.rs:392:5:392:18 | PathExpr | variables.rs:392:5:392:20 | CallExpr | | -| variables.rs:392:5:392:20 | CallExpr | variables.rs:393:5:393:36 | ExprStmt | | -| variables.rs:392:5:392:21 | ExprStmt | variables.rs:392:5:392:18 | PathExpr | | -| variables.rs:393:5:393:18 | PathExpr | variables.rs:393:20:393:22 | "a" | | -| variables.rs:393:5:393:35 | CallExpr | variables.rs:394:5:394:37 | ExprStmt | | -| variables.rs:393:5:393:36 | ExprStmt | variables.rs:393:5:393:18 | PathExpr | | -| variables.rs:393:20:393:22 | "a" | variables.rs:393:26:393:28 | "b" | | -| variables.rs:393:25:393:34 | TupleExpr | variables.rs:393:5:393:35 | CallExpr | | -| variables.rs:393:26:393:28 | "b" | variables.rs:393:31:393:33 | "c" | | -| variables.rs:393:31:393:33 | "c" | variables.rs:393:25:393:34 | TupleExpr | | -| variables.rs:394:5:394:18 | PathExpr | variables.rs:394:20:394:31 | PathExpr | | -| variables.rs:394:5:394:36 | CallExpr | variables.rs:395:5:395:26 | ExprStmt | | -| variables.rs:394:5:394:37 | ExprStmt | variables.rs:394:5:394:18 | PathExpr | | -| variables.rs:394:20:394:31 | PathExpr | variables.rs:394:33:394:34 | 45 | | -| variables.rs:394:20:394:35 | CallExpr | variables.rs:394:5:394:36 | CallExpr | | -| variables.rs:394:33:394:34 | 45 | variables.rs:394:20:394:35 | CallExpr | | -| variables.rs:395:5:395:23 | PathExpr | variables.rs:395:5:395:25 | CallExpr | | -| variables.rs:395:5:395:25 | CallExpr | variables.rs:396:5:396:23 | ExprStmt | | -| variables.rs:395:5:395:26 | ExprStmt | variables.rs:395:5:395:23 | PathExpr | | -| variables.rs:396:5:396:20 | PathExpr | variables.rs:396:5:396:22 | CallExpr | | -| variables.rs:396:5:396:22 | CallExpr | variables.rs:397:5:397:19 | ExprStmt | | -| variables.rs:396:5:396:23 | ExprStmt | variables.rs:396:5:396:20 | PathExpr | | -| variables.rs:397:5:397:16 | PathExpr | variables.rs:397:5:397:18 | CallExpr | | -| variables.rs:397:5:397:18 | CallExpr | variables.rs:398:5:398:17 | ExprStmt | | -| variables.rs:397:5:397:19 | ExprStmt | variables.rs:397:5:397:16 | PathExpr | | -| variables.rs:398:5:398:14 | PathExpr | variables.rs:398:5:398:16 | CallExpr | | -| variables.rs:398:5:398:16 | CallExpr | variables.rs:399:5:399:13 | ExprStmt | | -| variables.rs:398:5:398:17 | ExprStmt | variables.rs:398:5:398:14 | PathExpr | | -| variables.rs:399:5:399:10 | PathExpr | variables.rs:399:5:399:12 | CallExpr | | -| variables.rs:399:5:399:12 | CallExpr | variables.rs:400:5:400:17 | ExprStmt | | -| variables.rs:399:5:399:13 | ExprStmt | variables.rs:399:5:399:10 | PathExpr | | -| variables.rs:400:5:400:14 | PathExpr | variables.rs:400:5:400:16 | CallExpr | | -| variables.rs:400:5:400:16 | CallExpr | variables.rs:401:5:401:12 | ExprStmt | | -| variables.rs:400:5:400:17 | ExprStmt | variables.rs:400:5:400:14 | PathExpr | | -| variables.rs:401:5:401:9 | PathExpr | variables.rs:401:5:401:11 | CallExpr | | -| variables.rs:401:5:401:11 | CallExpr | variables.rs:402:5:402:14 | ExprStmt | | -| variables.rs:401:5:401:12 | ExprStmt | variables.rs:401:5:401:9 | PathExpr | | -| variables.rs:402:5:402:11 | PathExpr | variables.rs:402:5:402:13 | CallExpr | | -| variables.rs:402:5:402:13 | CallExpr | variables.rs:375:11:403:1 | BlockExpr | | -| variables.rs:402:5:402:14 | ExprStmt | variables.rs:402:5:402:11 | PathExpr | | +| variables.rs:349:5:349:12 | ReturnExpr | variables.rs:345:1:350:1 | exit mutate_param (normal) | return | +| variables.rs:349:5:349:13 | ExprStmt | variables.rs:349:12:349:12 | x | | +| variables.rs:349:12:349:12 | x | variables.rs:349:5:349:12 | ReturnExpr | | +| variables.rs:352:1:358:1 | enter mutate_param2 | variables.rs:352:22:352:22 | x | | +| variables.rs:352:1:358:1 | exit mutate_param2 (normal) | variables.rs:352:1:358:1 | exit mutate_param2 | | +| variables.rs:352:22:352:22 | x | variables.rs:352:22:352:36 | Param | match | +| variables.rs:352:22:352:36 | Param | variables.rs:352:39:352:39 | y | | +| variables.rs:352:39:352:39 | y | variables.rs:352:39:352:57 | Param | match | +| variables.rs:352:39:352:57 | Param | variables.rs:353:5:355:11 | ExprStmt | | +| variables.rs:352:60:358:1 | BlockExpr | variables.rs:352:1:358:1 | exit mutate_param2 (normal) | | +| variables.rs:353:5:353:6 | * ... | variables.rs:354:10:354:10 | x | | +| variables.rs:353:5:355:10 | ... = ... | variables.rs:356:5:357:10 | ExprStmt | | +| variables.rs:353:5:355:11 | ExprStmt | variables.rs:353:6:353:6 | x | | +| variables.rs:353:6:353:6 | x | variables.rs:353:5:353:6 | * ... | | +| variables.rs:354:9:354:10 | * ... | variables.rs:355:10:355:10 | x | | +| variables.rs:354:9:355:10 | ... + ... | variables.rs:353:5:355:10 | ... = ... | | +| variables.rs:354:10:354:10 | x | variables.rs:354:9:354:10 | * ... | | +| variables.rs:355:9:355:10 | * ... | variables.rs:354:9:355:10 | ... + ... | | +| variables.rs:355:10:355:10 | x | variables.rs:355:9:355:10 | * ... | | +| variables.rs:356:5:356:6 | * ... | variables.rs:357:9:357:9 | x | | +| variables.rs:356:5:357:9 | ... = ... | variables.rs:352:60:358:1 | BlockExpr | | +| variables.rs:356:5:357:10 | ExprStmt | variables.rs:356:6:356:6 | y | | +| variables.rs:356:6:356:6 | y | variables.rs:356:5:356:6 | * ... | | +| variables.rs:357:9:357:9 | x | variables.rs:356:5:357:9 | ... = ... | | +| variables.rs:360:1:378:1 | enter mutate_arg | variables.rs:361:5:361:18 | LetStmt | | +| variables.rs:360:1:378:1 | exit mutate_arg (normal) | variables.rs:360:1:378:1 | exit mutate_arg | | +| variables.rs:360:17:378:1 | BlockExpr | variables.rs:360:1:378:1 | exit mutate_arg (normal) | | +| variables.rs:361:5:361:18 | LetStmt | variables.rs:361:17:361:17 | 2 | | +| variables.rs:361:9:361:13 | x | variables.rs:362:5:363:29 | LetStmt | match | +| variables.rs:361:17:361:17 | 2 | variables.rs:361:9:361:13 | x | | +| variables.rs:362:5:363:29 | LetStmt | variables.rs:363:9:363:20 | PathExpr | | +| variables.rs:362:9:362:9 | y | variables.rs:364:5:364:12 | ExprStmt | match | +| variables.rs:363:9:363:20 | PathExpr | variables.rs:363:27:363:27 | x | | +| variables.rs:363:9:363:28 | CallExpr | variables.rs:362:9:362:9 | y | | +| variables.rs:363:22:363:27 | RefExpr | variables.rs:363:9:363:28 | CallExpr | | +| variables.rs:363:27:363:27 | x | variables.rs:363:22:363:27 | RefExpr | | +| variables.rs:364:5:364:6 | * ... | variables.rs:364:10:364:11 | 10 | | +| variables.rs:364:5:364:11 | ... = ... | variables.rs:366:5:366:17 | ExprStmt | | +| variables.rs:364:5:364:12 | ExprStmt | variables.rs:364:6:364:6 | y | | +| variables.rs:364:6:364:6 | y | variables.rs:364:5:364:6 | * ... | | +| variables.rs:364:10:364:11 | 10 | variables.rs:364:5:364:11 | ... = ... | | +| variables.rs:366:5:366:13 | PathExpr | variables.rs:366:15:366:15 | x | | +| variables.rs:366:5:366:16 | CallExpr | variables.rs:368:5:368:18 | LetStmt | | +| variables.rs:366:5:366:17 | ExprStmt | variables.rs:366:5:366:13 | PathExpr | | +| variables.rs:366:15:366:15 | x | variables.rs:366:5:366:16 | CallExpr | | +| variables.rs:368:5:368:18 | LetStmt | variables.rs:368:17:368:17 | 4 | | +| variables.rs:368:9:368:13 | z | variables.rs:369:5:370:20 | LetStmt | match | +| variables.rs:368:17:368:17 | 4 | variables.rs:368:9:368:13 | z | | +| variables.rs:369:5:370:20 | LetStmt | variables.rs:370:19:370:19 | x | | +| variables.rs:369:9:369:9 | w | variables.rs:371:5:374:6 | ExprStmt | match | +| variables.rs:370:9:370:19 | RefExpr | variables.rs:369:9:369:9 | w | | +| variables.rs:370:14:370:19 | RefExpr | variables.rs:370:9:370:19 | RefExpr | | +| variables.rs:370:19:370:19 | x | variables.rs:370:14:370:19 | RefExpr | | +| variables.rs:371:5:371:17 | PathExpr | variables.rs:372:14:372:14 | z | | +| variables.rs:371:5:374:5 | CallExpr | variables.rs:375:5:375:13 | ExprStmt | | +| variables.rs:371:5:374:6 | ExprStmt | variables.rs:371:5:371:17 | PathExpr | | +| variables.rs:372:9:372:14 | RefExpr | variables.rs:373:9:373:9 | w | | +| variables.rs:372:14:372:14 | z | variables.rs:372:9:372:14 | RefExpr | | +| variables.rs:373:9:373:9 | w | variables.rs:371:5:374:5 | CallExpr | | +| variables.rs:375:5:375:7 | * ... | variables.rs:375:11:375:12 | 11 | | +| variables.rs:375:5:375:12 | ... = ... | variables.rs:377:5:377:17 | ExprStmt | | +| variables.rs:375:5:375:13 | ExprStmt | variables.rs:375:7:375:7 | w | | +| variables.rs:375:6:375:7 | * ... | variables.rs:375:5:375:7 | * ... | | +| variables.rs:375:7:375:7 | w | variables.rs:375:6:375:7 | * ... | | +| variables.rs:375:11:375:12 | 11 | variables.rs:375:5:375:12 | ... = ... | | +| variables.rs:377:5:377:13 | PathExpr | variables.rs:377:15:377:15 | z | | +| variables.rs:377:5:377:16 | CallExpr | variables.rs:360:17:378:1 | BlockExpr | | +| variables.rs:377:5:377:17 | ExprStmt | variables.rs:377:5:377:13 | PathExpr | | +| variables.rs:377:15:377:15 | z | variables.rs:377:5:377:16 | CallExpr | | +| variables.rs:380:1:386:1 | enter alias | variables.rs:381:5:381:18 | LetStmt | | +| variables.rs:380:1:386:1 | exit alias (normal) | variables.rs:380:1:386:1 | exit alias | | +| variables.rs:380:12:386:1 | BlockExpr | variables.rs:380:1:386:1 | exit alias (normal) | | +| variables.rs:381:5:381:18 | LetStmt | variables.rs:381:17:381:17 | 1 | | +| variables.rs:381:9:381:13 | x | variables.rs:382:5:383:15 | LetStmt | match | +| variables.rs:381:17:381:17 | 1 | variables.rs:381:9:381:13 | x | | +| variables.rs:382:5:383:15 | LetStmt | variables.rs:383:14:383:14 | x | | +| variables.rs:382:9:382:9 | y | variables.rs:384:5:384:11 | ExprStmt | match | +| variables.rs:383:9:383:14 | RefExpr | variables.rs:382:9:382:9 | y | | +| variables.rs:383:14:383:14 | x | variables.rs:383:9:383:14 | RefExpr | | +| variables.rs:384:5:384:6 | * ... | variables.rs:384:10:384:10 | 2 | | +| variables.rs:384:5:384:10 | ... = ... | variables.rs:385:5:385:17 | ExprStmt | | +| variables.rs:384:5:384:11 | ExprStmt | variables.rs:384:6:384:6 | y | | +| variables.rs:384:6:384:6 | y | variables.rs:384:5:384:6 | * ... | | +| variables.rs:384:10:384:10 | 2 | variables.rs:384:5:384:10 | ... = ... | | +| variables.rs:385:5:385:13 | PathExpr | variables.rs:385:15:385:15 | x | | +| variables.rs:385:5:385:16 | CallExpr | variables.rs:380:12:386:1 | BlockExpr | | +| variables.rs:385:5:385:17 | ExprStmt | variables.rs:385:5:385:13 | PathExpr | | +| variables.rs:385:15:385:15 | x | variables.rs:385:5:385:16 | CallExpr | | +| variables.rs:388:1:396:1 | enter capture_mut | variables.rs:389:5:389:19 | LetStmt | | +| variables.rs:388:1:396:1 | exit capture_mut (normal) | variables.rs:388:1:396:1 | exit capture_mut | | +| variables.rs:388:18:396:1 | BlockExpr | variables.rs:388:1:396:1 | exit capture_mut (normal) | | +| variables.rs:389:5:389:19 | LetStmt | variables.rs:389:17:389:18 | 10 | | +| variables.rs:389:9:389:13 | x | variables.rs:390:5:393:6 | LetStmt | match | +| variables.rs:389:17:389:18 | 10 | variables.rs:389:9:389:13 | x | | +| variables.rs:390:5:393:6 | LetStmt | variables.rs:390:19:393:5 | ClosureExpr | | +| variables.rs:390:9:390:15 | cap | variables.rs:394:5:394:10 | ExprStmt | match | +| variables.rs:390:19:393:5 | ClosureExpr | variables.rs:390:9:390:15 | cap | | +| variables.rs:390:19:393:5 | enter ClosureExpr | variables.rs:391:9:391:21 | ExprStmt | | +| variables.rs:390:19:393:5 | exit ClosureExpr (normal) | variables.rs:390:19:393:5 | exit ClosureExpr | | +| variables.rs:390:22:393:5 | BlockExpr | variables.rs:390:19:393:5 | exit ClosureExpr (normal) | | +| variables.rs:391:9:391:17 | PathExpr | variables.rs:391:19:391:19 | x | | +| variables.rs:391:9:391:20 | CallExpr | variables.rs:392:9:392:15 | ExprStmt | | +| variables.rs:391:9:391:21 | ExprStmt | variables.rs:391:9:391:17 | PathExpr | | +| variables.rs:391:19:391:19 | x | variables.rs:391:9:391:20 | CallExpr | | +| variables.rs:392:9:392:9 | x | variables.rs:392:14:392:14 | 1 | | +| variables.rs:392:9:392:14 | ... += ... | variables.rs:390:22:393:5 | BlockExpr | | +| variables.rs:392:9:392:15 | ExprStmt | variables.rs:392:9:392:9 | x | | +| variables.rs:392:14:392:14 | 1 | variables.rs:392:9:392:14 | ... += ... | | +| variables.rs:394:5:394:7 | cap | variables.rs:394:5:394:9 | CallExpr | | +| variables.rs:394:5:394:9 | CallExpr | variables.rs:395:5:395:17 | ExprStmt | | +| variables.rs:394:5:394:10 | ExprStmt | variables.rs:394:5:394:7 | cap | | +| variables.rs:395:5:395:13 | PathExpr | variables.rs:395:15:395:15 | x | | +| variables.rs:395:5:395:16 | CallExpr | variables.rs:388:18:396:1 | BlockExpr | | +| variables.rs:395:5:395:17 | ExprStmt | variables.rs:395:5:395:13 | PathExpr | | +| variables.rs:395:15:395:15 | x | variables.rs:395:5:395:16 | CallExpr | | +| variables.rs:398:1:405:1 | enter capture_immut | variables.rs:399:5:399:16 | LetStmt | | +| variables.rs:398:1:405:1 | exit capture_immut (normal) | variables.rs:398:1:405:1 | exit capture_immut | | +| variables.rs:398:20:405:1 | BlockExpr | variables.rs:398:1:405:1 | exit capture_immut (normal) | | +| variables.rs:399:5:399:16 | LetStmt | variables.rs:399:13:399:15 | 100 | | +| variables.rs:399:9:399:9 | x | variables.rs:400:5:402:6 | LetStmt | match | +| variables.rs:399:13:399:15 | 100 | variables.rs:399:9:399:9 | x | | +| variables.rs:400:5:402:6 | LetStmt | variables.rs:400:19:402:5 | ClosureExpr | | +| variables.rs:400:9:400:15 | cap | variables.rs:403:5:403:10 | ExprStmt | match | +| variables.rs:400:19:402:5 | ClosureExpr | variables.rs:400:9:400:15 | cap | | +| variables.rs:400:19:402:5 | enter ClosureExpr | variables.rs:401:9:401:21 | ExprStmt | | +| variables.rs:400:19:402:5 | exit ClosureExpr (normal) | variables.rs:400:19:402:5 | exit ClosureExpr | | +| variables.rs:400:22:402:5 | BlockExpr | variables.rs:400:19:402:5 | exit ClosureExpr (normal) | | +| variables.rs:401:9:401:17 | PathExpr | variables.rs:401:19:401:19 | x | | +| variables.rs:401:9:401:20 | CallExpr | variables.rs:400:22:402:5 | BlockExpr | | +| variables.rs:401:9:401:21 | ExprStmt | variables.rs:401:9:401:17 | PathExpr | | +| variables.rs:401:19:401:19 | x | variables.rs:401:9:401:20 | CallExpr | | +| variables.rs:403:5:403:7 | cap | variables.rs:403:5:403:9 | CallExpr | | +| variables.rs:403:5:403:9 | CallExpr | variables.rs:404:5:404:17 | ExprStmt | | +| variables.rs:403:5:403:10 | ExprStmt | variables.rs:403:5:403:7 | cap | | +| variables.rs:404:5:404:13 | PathExpr | variables.rs:404:15:404:15 | x | | +| variables.rs:404:5:404:16 | CallExpr | variables.rs:398:20:405:1 | BlockExpr | | +| variables.rs:404:5:404:17 | ExprStmt | variables.rs:404:5:404:13 | PathExpr | | +| variables.rs:404:15:404:15 | x | variables.rs:404:5:404:16 | CallExpr | | +| variables.rs:407:1:421:1 | enter phi | variables.rs:407:8:407:8 | b | | +| variables.rs:407:1:421:1 | exit phi (normal) | variables.rs:407:1:421:1 | exit phi | | +| variables.rs:407:8:407:8 | b | variables.rs:407:8:407:15 | Param | match | +| variables.rs:407:8:407:15 | Param | variables.rs:408:5:408:18 | LetStmt | | +| variables.rs:407:18:421:1 | BlockExpr | variables.rs:407:1:421:1 | exit phi (normal) | | +| variables.rs:408:5:408:18 | LetStmt | variables.rs:408:17:408:17 | 1 | | +| variables.rs:408:9:408:13 | x | variables.rs:409:5:409:17 | ExprStmt | match | +| variables.rs:408:17:408:17 | 1 | variables.rs:408:9:408:13 | x | | +| variables.rs:409:5:409:13 | PathExpr | variables.rs:409:15:409:15 | x | | +| variables.rs:409:5:409:16 | CallExpr | variables.rs:410:5:410:21 | ExprStmt | | +| variables.rs:409:5:409:17 | ExprStmt | variables.rs:409:5:409:13 | PathExpr | | +| variables.rs:409:15:409:15 | x | variables.rs:409:5:409:16 | CallExpr | | +| variables.rs:410:5:410:13 | PathExpr | variables.rs:410:15:410:15 | x | | +| variables.rs:410:5:410:20 | CallExpr | variables.rs:411:5:419:5 | ExprStmt | | +| variables.rs:410:5:410:21 | ExprStmt | variables.rs:410:5:410:13 | PathExpr | | +| variables.rs:410:15:410:15 | x | variables.rs:410:19:410:19 | 1 | | +| variables.rs:410:15:410:19 | ... + ... | variables.rs:410:5:410:20 | CallExpr | | +| variables.rs:410:19:410:19 | 1 | variables.rs:410:15:410:19 | ... + ... | | +| variables.rs:411:5:419:5 | ExprStmt | variables.rs:411:8:411:8 | b | | +| variables.rs:411:5:419:5 | IfExpr | variables.rs:420:5:420:17 | ExprStmt | | +| variables.rs:411:8:411:8 | b | variables.rs:412:9:412:14 | ExprStmt | true | +| variables.rs:411:8:411:8 | b | variables.rs:416:9:416:14 | ExprStmt | false | +| variables.rs:411:10:415:5 | BlockExpr | variables.rs:411:5:419:5 | IfExpr | | +| variables.rs:412:9:412:9 | x | variables.rs:412:13:412:13 | 2 | | +| variables.rs:412:9:412:13 | ... = ... | variables.rs:413:9:413:21 | ExprStmt | | +| variables.rs:412:9:412:14 | ExprStmt | variables.rs:412:9:412:9 | x | | +| variables.rs:412:13:412:13 | 2 | variables.rs:412:9:412:13 | ... = ... | | +| variables.rs:413:9:413:17 | PathExpr | variables.rs:413:19:413:19 | x | | +| variables.rs:413:9:413:20 | CallExpr | variables.rs:414:9:414:25 | ExprStmt | | +| variables.rs:413:9:413:21 | ExprStmt | variables.rs:413:9:413:17 | PathExpr | | +| variables.rs:413:19:413:19 | x | variables.rs:413:9:413:20 | CallExpr | | +| variables.rs:414:9:414:17 | PathExpr | variables.rs:414:19:414:19 | x | | +| variables.rs:414:9:414:24 | CallExpr | variables.rs:411:10:415:5 | BlockExpr | | +| variables.rs:414:9:414:25 | ExprStmt | variables.rs:414:9:414:17 | PathExpr | | +| variables.rs:414:19:414:19 | x | variables.rs:414:23:414:23 | 1 | | +| variables.rs:414:19:414:23 | ... + ... | variables.rs:414:9:414:24 | CallExpr | | +| variables.rs:414:23:414:23 | 1 | variables.rs:414:19:414:23 | ... + ... | | +| variables.rs:415:12:419:5 | BlockExpr | variables.rs:411:5:419:5 | IfExpr | | +| variables.rs:416:9:416:9 | x | variables.rs:416:13:416:13 | 3 | | +| variables.rs:416:9:416:13 | ... = ... | variables.rs:417:9:417:21 | ExprStmt | | +| variables.rs:416:9:416:14 | ExprStmt | variables.rs:416:9:416:9 | x | | +| variables.rs:416:13:416:13 | 3 | variables.rs:416:9:416:13 | ... = ... | | +| variables.rs:417:9:417:17 | PathExpr | variables.rs:417:19:417:19 | x | | +| variables.rs:417:9:417:20 | CallExpr | variables.rs:418:9:418:25 | ExprStmt | | +| variables.rs:417:9:417:21 | ExprStmt | variables.rs:417:9:417:17 | PathExpr | | +| variables.rs:417:19:417:19 | x | variables.rs:417:9:417:20 | CallExpr | | +| variables.rs:418:9:418:17 | PathExpr | variables.rs:418:19:418:19 | x | | +| variables.rs:418:9:418:24 | CallExpr | variables.rs:415:12:419:5 | BlockExpr | | +| variables.rs:418:9:418:25 | ExprStmt | variables.rs:418:9:418:17 | PathExpr | | +| variables.rs:418:19:418:19 | x | variables.rs:418:23:418:23 | 1 | | +| variables.rs:418:19:418:23 | ... + ... | variables.rs:418:9:418:24 | CallExpr | | +| variables.rs:418:23:418:23 | 1 | variables.rs:418:19:418:23 | ... + ... | | +| variables.rs:420:5:420:13 | PathExpr | variables.rs:420:15:420:15 | x | | +| variables.rs:420:5:420:16 | CallExpr | variables.rs:407:18:421:1 | BlockExpr | | +| variables.rs:420:5:420:17 | ExprStmt | variables.rs:420:5:420:13 | PathExpr | | +| variables.rs:420:15:420:15 | x | variables.rs:420:5:420:16 | CallExpr | | +| variables.rs:423:1:436:1 | enter phi_read | variables.rs:423:13:423:14 | b1 | | +| variables.rs:423:1:436:1 | exit phi_read (normal) | variables.rs:423:1:436:1 | exit phi_read | | +| variables.rs:423:13:423:14 | b1 | variables.rs:423:13:423:21 | Param | match | +| variables.rs:423:13:423:21 | Param | variables.rs:423:24:423:25 | b2 | | +| variables.rs:423:24:423:25 | b2 | variables.rs:423:24:423:32 | Param | match | +| variables.rs:423:24:423:32 | Param | variables.rs:424:5:424:14 | LetStmt | | +| variables.rs:423:35:436:1 | BlockExpr | variables.rs:423:1:436:1 | exit phi_read (normal) | | +| variables.rs:424:5:424:14 | LetStmt | variables.rs:424:13:424:13 | 1 | | +| variables.rs:424:9:424:9 | x | variables.rs:425:5:429:5 | ExprStmt | match | +| variables.rs:424:13:424:13 | 1 | variables.rs:424:9:424:9 | x | | +| variables.rs:425:5:429:5 | ExprStmt | variables.rs:425:8:425:9 | b1 | | +| variables.rs:425:5:429:5 | IfExpr | variables.rs:431:8:431:9 | b2 | | +| variables.rs:425:8:425:9 | b1 | variables.rs:426:9:426:21 | ExprStmt | true | +| variables.rs:425:8:425:9 | b1 | variables.rs:428:9:428:21 | ExprStmt | false | +| variables.rs:425:11:427:5 | BlockExpr | variables.rs:425:5:429:5 | IfExpr | | +| variables.rs:426:9:426:17 | PathExpr | variables.rs:426:19:426:19 | x | | +| variables.rs:426:9:426:20 | CallExpr | variables.rs:425:11:427:5 | BlockExpr | | +| variables.rs:426:9:426:21 | ExprStmt | variables.rs:426:9:426:17 | PathExpr | | +| variables.rs:426:19:426:19 | x | variables.rs:426:9:426:20 | CallExpr | | +| variables.rs:427:12:429:5 | BlockExpr | variables.rs:425:5:429:5 | IfExpr | | +| variables.rs:428:9:428:17 | PathExpr | variables.rs:428:19:428:19 | x | | +| variables.rs:428:9:428:20 | CallExpr | variables.rs:427:12:429:5 | BlockExpr | | +| variables.rs:428:9:428:21 | ExprStmt | variables.rs:428:9:428:17 | PathExpr | | +| variables.rs:428:19:428:19 | x | variables.rs:428:9:428:20 | CallExpr | | +| variables.rs:431:5:435:5 | IfExpr | variables.rs:423:35:436:1 | BlockExpr | | +| variables.rs:431:8:431:9 | b2 | variables.rs:432:9:432:21 | ExprStmt | true | +| variables.rs:431:8:431:9 | b2 | variables.rs:434:9:434:21 | ExprStmt | false | +| variables.rs:431:11:433:5 | BlockExpr | variables.rs:431:5:435:5 | IfExpr | | +| variables.rs:432:9:432:17 | PathExpr | variables.rs:432:19:432:19 | x | | +| variables.rs:432:9:432:20 | CallExpr | variables.rs:431:11:433:5 | BlockExpr | | +| variables.rs:432:9:432:21 | ExprStmt | variables.rs:432:9:432:17 | PathExpr | | +| variables.rs:432:19:432:19 | x | variables.rs:432:9:432:20 | CallExpr | | +| variables.rs:433:12:435:5 | BlockExpr | variables.rs:431:5:435:5 | IfExpr | | +| variables.rs:434:9:434:17 | PathExpr | variables.rs:434:19:434:19 | x | | +| variables.rs:434:9:434:20 | CallExpr | variables.rs:433:12:435:5 | BlockExpr | | +| variables.rs:434:9:434:21 | ExprStmt | variables.rs:434:9:434:17 | PathExpr | | +| variables.rs:434:19:434:19 | x | variables.rs:434:9:434:20 | CallExpr | | +| variables.rs:444:5:446:5 | enter my_get | variables.rs:445:9:445:24 | ExprStmt | | +| variables.rs:444:5:446:5 | exit my_get (normal) | variables.rs:444:5:446:5 | exit my_get | | +| variables.rs:445:9:445:23 | ReturnExpr | variables.rs:444:5:446:5 | exit my_get (normal) | return | +| variables.rs:445:9:445:24 | ExprStmt | variables.rs:445:16:445:19 | PathExpr | | +| variables.rs:445:16:445:19 | PathExpr | variables.rs:445:16:445:23 | FieldExpr | | +| variables.rs:445:16:445:23 | FieldExpr | variables.rs:445:9:445:23 | ReturnExpr | | +| variables.rs:449:1:456:1 | enter structs | variables.rs:450:5:450:36 | LetStmt | | +| variables.rs:449:1:456:1 | exit structs (normal) | variables.rs:449:1:456:1 | exit structs | | +| variables.rs:449:14:456:1 | BlockExpr | variables.rs:449:1:456:1 | exit structs (normal) | | +| variables.rs:450:5:450:36 | LetStmt | variables.rs:450:33:450:33 | 1 | | +| variables.rs:450:9:450:13 | a | variables.rs:451:5:451:26 | ExprStmt | match | +| variables.rs:450:17:450:35 | RecordExpr | variables.rs:450:9:450:13 | a | | +| variables.rs:450:33:450:33 | 1 | variables.rs:450:17:450:35 | RecordExpr | | +| variables.rs:451:5:451:13 | PathExpr | variables.rs:451:15:451:15 | a | | +| variables.rs:451:5:451:25 | CallExpr | variables.rs:452:5:452:14 | ExprStmt | | +| variables.rs:451:5:451:26 | ExprStmt | variables.rs:451:5:451:13 | PathExpr | | +| variables.rs:451:15:451:15 | a | variables.rs:451:15:451:24 | MethodCallExpr | | +| variables.rs:451:15:451:24 | MethodCallExpr | variables.rs:451:5:451:25 | CallExpr | | +| variables.rs:452:5:452:5 | a | variables.rs:452:5:452:9 | FieldExpr | | +| variables.rs:452:5:452:9 | FieldExpr | variables.rs:452:13:452:13 | 5 | | +| variables.rs:452:5:452:13 | ... = ... | variables.rs:453:5:453:26 | ExprStmt | | +| variables.rs:452:5:452:14 | ExprStmt | variables.rs:452:5:452:5 | a | | +| variables.rs:452:13:452:13 | 5 | variables.rs:452:5:452:13 | ... = ... | | +| variables.rs:453:5:453:13 | PathExpr | variables.rs:453:15:453:15 | a | | +| variables.rs:453:5:453:25 | CallExpr | variables.rs:454:5:454:28 | ExprStmt | | +| variables.rs:453:5:453:26 | ExprStmt | variables.rs:453:5:453:13 | PathExpr | | +| variables.rs:453:15:453:15 | a | variables.rs:453:15:453:24 | MethodCallExpr | | +| variables.rs:453:15:453:24 | MethodCallExpr | variables.rs:453:5:453:25 | CallExpr | | +| variables.rs:454:5:454:5 | a | variables.rs:454:25:454:25 | 2 | | +| variables.rs:454:5:454:27 | ... = ... | variables.rs:455:5:455:26 | ExprStmt | | +| variables.rs:454:5:454:28 | ExprStmt | variables.rs:454:5:454:5 | a | | +| variables.rs:454:9:454:27 | RecordExpr | variables.rs:454:5:454:27 | ... = ... | | +| variables.rs:454:25:454:25 | 2 | variables.rs:454:9:454:27 | RecordExpr | | +| variables.rs:455:5:455:13 | PathExpr | variables.rs:455:15:455:15 | a | | +| variables.rs:455:5:455:25 | CallExpr | variables.rs:449:14:456:1 | BlockExpr | | +| variables.rs:455:5:455:26 | ExprStmt | variables.rs:455:5:455:13 | PathExpr | | +| variables.rs:455:15:455:15 | a | variables.rs:455:15:455:24 | MethodCallExpr | | +| variables.rs:455:15:455:24 | MethodCallExpr | variables.rs:455:5:455:25 | CallExpr | | +| variables.rs:458:1:460:1 | enter ref_param | variables.rs:458:14:458:14 | x | | +| variables.rs:458:1:460:1 | exit ref_param (normal) | variables.rs:458:1:460:1 | exit ref_param | | +| variables.rs:458:14:458:14 | x | variables.rs:458:14:458:20 | Param | match | +| variables.rs:458:14:458:20 | Param | variables.rs:459:5:459:13 | PathExpr | | +| variables.rs:458:23:460:1 | BlockExpr | variables.rs:458:1:460:1 | exit ref_param (normal) | | +| variables.rs:459:5:459:13 | PathExpr | variables.rs:459:16:459:16 | x | | +| variables.rs:459:5:459:17 | CallExpr | variables.rs:458:23:460:1 | BlockExpr | | +| variables.rs:459:15:459:16 | * ... | variables.rs:459:5:459:17 | CallExpr | | +| variables.rs:459:16:459:16 | x | variables.rs:459:15:459:16 | * ... | | +| variables.rs:462:1:469:1 | enter ref_arg | variables.rs:463:5:463:15 | LetStmt | | +| variables.rs:462:1:469:1 | exit ref_arg (normal) | variables.rs:462:1:469:1 | exit ref_arg | | +| variables.rs:462:14:469:1 | BlockExpr | variables.rs:462:1:469:1 | exit ref_arg (normal) | | +| variables.rs:463:5:463:15 | LetStmt | variables.rs:463:13:463:14 | 16 | | +| variables.rs:463:9:463:9 | x | variables.rs:464:5:464:18 | ExprStmt | match | +| variables.rs:463:13:463:14 | 16 | variables.rs:463:9:463:9 | x | | +| variables.rs:464:5:464:13 | PathExpr | variables.rs:464:16:464:16 | x | | +| variables.rs:464:5:464:17 | CallExpr | variables.rs:465:5:465:17 | ExprStmt | | +| variables.rs:464:5:464:18 | ExprStmt | variables.rs:464:5:464:13 | PathExpr | | +| variables.rs:464:15:464:16 | RefExpr | variables.rs:464:5:464:17 | CallExpr | | +| variables.rs:464:16:464:16 | x | variables.rs:464:15:464:16 | RefExpr | | +| variables.rs:465:5:465:13 | PathExpr | variables.rs:465:15:465:15 | x | | +| variables.rs:465:5:465:16 | CallExpr | variables.rs:467:5:467:15 | LetStmt | | +| variables.rs:465:5:465:17 | ExprStmt | variables.rs:465:5:465:13 | PathExpr | | +| variables.rs:465:15:465:15 | x | variables.rs:465:5:465:16 | CallExpr | | +| variables.rs:467:5:467:15 | LetStmt | variables.rs:467:13:467:14 | 17 | | +| variables.rs:467:9:467:9 | z | variables.rs:468:5:468:18 | ExprStmt | match | +| variables.rs:467:13:467:14 | 17 | variables.rs:467:9:467:9 | z | | +| variables.rs:468:5:468:13 | PathExpr | variables.rs:468:16:468:16 | z | | +| variables.rs:468:5:468:17 | CallExpr | variables.rs:462:14:469:1 | BlockExpr | | +| variables.rs:468:5:468:18 | ExprStmt | variables.rs:468:5:468:13 | PathExpr | | +| variables.rs:468:15:468:16 | RefExpr | variables.rs:468:5:468:17 | CallExpr | | +| variables.rs:468:16:468:16 | z | variables.rs:468:15:468:16 | RefExpr | | +| variables.rs:476:3:478:3 | enter bar | variables.rs:477:5:477:32 | ExprStmt | | +| variables.rs:476:3:478:3 | exit bar (normal) | variables.rs:476:3:478:3 | exit bar | | +| variables.rs:476:21:478:3 | BlockExpr | variables.rs:476:3:478:3 | exit bar (normal) | | +| variables.rs:477:5:477:9 | * ... | variables.rs:477:29:477:29 | 3 | | +| variables.rs:477:5:477:31 | ... = ... | variables.rs:476:21:478:3 | BlockExpr | | +| variables.rs:477:5:477:32 | ExprStmt | variables.rs:477:6:477:9 | PathExpr | | +| variables.rs:477:6:477:9 | PathExpr | variables.rs:477:5:477:9 | * ... | | +| variables.rs:477:13:477:31 | RecordExpr | variables.rs:477:5:477:31 | ... = ... | | +| variables.rs:477:29:477:29 | 3 | variables.rs:477:13:477:31 | RecordExpr | | +| variables.rs:481:1:486:1 | enter ref_methodcall_receiver | variables.rs:482:3:482:34 | LetStmt | | +| variables.rs:481:1:486:1 | exit ref_methodcall_receiver (normal) | variables.rs:481:1:486:1 | exit ref_methodcall_receiver | | +| variables.rs:481:30:486:1 | BlockExpr | variables.rs:481:1:486:1 | exit ref_methodcall_receiver (normal) | | +| variables.rs:482:3:482:34 | LetStmt | variables.rs:482:31:482:31 | 1 | | +| variables.rs:482:7:482:11 | a | variables.rs:483:3:483:10 | ExprStmt | match | +| variables.rs:482:15:482:33 | RecordExpr | variables.rs:482:7:482:11 | a | | +| variables.rs:482:31:482:31 | 1 | variables.rs:482:15:482:33 | RecordExpr | | +| variables.rs:483:3:483:3 | a | variables.rs:483:3:483:9 | MethodCallExpr | | +| variables.rs:483:3:483:9 | MethodCallExpr | variables.rs:485:3:485:19 | ExprStmt | | +| variables.rs:483:3:483:10 | ExprStmt | variables.rs:483:3:483:3 | a | | +| variables.rs:485:3:485:11 | PathExpr | variables.rs:485:13:485:13 | a | | +| variables.rs:485:3:485:18 | CallExpr | variables.rs:481:30:486:1 | BlockExpr | | +| variables.rs:485:3:485:19 | ExprStmt | variables.rs:485:3:485:11 | PathExpr | | +| variables.rs:485:13:485:13 | a | variables.rs:485:13:485:17 | FieldExpr | | +| variables.rs:485:13:485:17 | FieldExpr | variables.rs:485:3:485:18 | CallExpr | | +| variables.rs:488:1:520:1 | enter main | variables.rs:489:5:489:25 | ExprStmt | | +| variables.rs:488:1:520:1 | exit main (normal) | variables.rs:488:1:520:1 | exit main | | +| variables.rs:488:11:520:1 | BlockExpr | variables.rs:488:1:520:1 | exit main (normal) | | +| variables.rs:489:5:489:22 | PathExpr | variables.rs:489:5:489:24 | CallExpr | | +| variables.rs:489:5:489:24 | CallExpr | variables.rs:490:5:490:23 | ExprStmt | | +| variables.rs:489:5:489:25 | ExprStmt | variables.rs:489:5:489:22 | PathExpr | | +| variables.rs:490:5:490:20 | PathExpr | variables.rs:490:5:490:22 | CallExpr | | +| variables.rs:490:5:490:22 | CallExpr | variables.rs:491:5:491:23 | ExprStmt | | +| variables.rs:490:5:490:23 | ExprStmt | variables.rs:490:5:490:20 | PathExpr | | +| variables.rs:491:5:491:20 | PathExpr | variables.rs:491:5:491:22 | CallExpr | | +| variables.rs:491:5:491:22 | CallExpr | variables.rs:492:5:492:23 | ExprStmt | | +| variables.rs:491:5:491:23 | ExprStmt | variables.rs:491:5:491:20 | PathExpr | | +| variables.rs:492:5:492:20 | PathExpr | variables.rs:492:5:492:22 | CallExpr | | +| variables.rs:492:5:492:22 | CallExpr | variables.rs:493:5:493:19 | ExprStmt | | +| variables.rs:492:5:492:23 | ExprStmt | variables.rs:492:5:492:20 | PathExpr | | +| variables.rs:493:5:493:16 | PathExpr | variables.rs:493:5:493:18 | CallExpr | | +| variables.rs:493:5:493:18 | CallExpr | variables.rs:494:5:494:19 | ExprStmt | | +| variables.rs:493:5:493:19 | ExprStmt | variables.rs:493:5:493:16 | PathExpr | | +| variables.rs:494:5:494:16 | PathExpr | variables.rs:494:5:494:18 | CallExpr | | +| variables.rs:494:5:494:18 | CallExpr | variables.rs:495:5:495:19 | ExprStmt | | +| variables.rs:494:5:494:19 | ExprStmt | variables.rs:494:5:494:16 | PathExpr | | +| variables.rs:495:5:495:16 | PathExpr | variables.rs:495:5:495:18 | CallExpr | | +| variables.rs:495:5:495:18 | CallExpr | variables.rs:496:5:496:19 | ExprStmt | | +| variables.rs:495:5:495:19 | ExprStmt | variables.rs:495:5:495:16 | PathExpr | | +| variables.rs:496:5:496:16 | PathExpr | variables.rs:496:5:496:18 | CallExpr | | +| variables.rs:496:5:496:18 | CallExpr | variables.rs:497:5:497:21 | ExprStmt | | +| variables.rs:496:5:496:19 | ExprStmt | variables.rs:496:5:496:16 | PathExpr | | +| variables.rs:497:5:497:18 | PathExpr | variables.rs:497:5:497:20 | CallExpr | | +| variables.rs:497:5:497:20 | CallExpr | variables.rs:498:5:498:21 | ExprStmt | | +| variables.rs:497:5:497:21 | ExprStmt | variables.rs:497:5:497:18 | PathExpr | | +| variables.rs:498:5:498:18 | PathExpr | variables.rs:498:5:498:20 | CallExpr | | +| variables.rs:498:5:498:20 | CallExpr | variables.rs:499:5:499:21 | ExprStmt | | +| variables.rs:498:5:498:21 | ExprStmt | variables.rs:498:5:498:18 | PathExpr | | +| variables.rs:499:5:499:18 | PathExpr | variables.rs:499:5:499:20 | CallExpr | | +| variables.rs:499:5:499:20 | CallExpr | variables.rs:500:5:500:21 | ExprStmt | | +| variables.rs:499:5:499:21 | ExprStmt | variables.rs:499:5:499:18 | PathExpr | | +| variables.rs:500:5:500:18 | PathExpr | variables.rs:500:5:500:20 | CallExpr | | +| variables.rs:500:5:500:20 | CallExpr | variables.rs:501:5:501:21 | ExprStmt | | +| variables.rs:500:5:500:21 | ExprStmt | variables.rs:500:5:500:18 | PathExpr | | +| variables.rs:501:5:501:18 | PathExpr | variables.rs:501:5:501:20 | CallExpr | | +| variables.rs:501:5:501:20 | CallExpr | variables.rs:502:5:502:21 | ExprStmt | | +| variables.rs:501:5:501:21 | ExprStmt | variables.rs:501:5:501:18 | PathExpr | | +| variables.rs:502:5:502:18 | PathExpr | variables.rs:502:5:502:20 | CallExpr | | +| variables.rs:502:5:502:20 | CallExpr | variables.rs:503:5:503:21 | ExprStmt | | +| variables.rs:502:5:502:21 | ExprStmt | variables.rs:502:5:502:18 | PathExpr | | +| variables.rs:503:5:503:18 | PathExpr | variables.rs:503:5:503:20 | CallExpr | | +| variables.rs:503:5:503:20 | CallExpr | variables.rs:504:5:504:21 | ExprStmt | | +| variables.rs:503:5:503:21 | ExprStmt | variables.rs:503:5:503:18 | PathExpr | | +| variables.rs:504:5:504:18 | PathExpr | variables.rs:504:5:504:20 | CallExpr | | +| variables.rs:504:5:504:20 | CallExpr | variables.rs:505:5:505:21 | ExprStmt | | +| variables.rs:504:5:504:21 | ExprStmt | variables.rs:504:5:504:18 | PathExpr | | +| variables.rs:505:5:505:18 | PathExpr | variables.rs:505:5:505:20 | CallExpr | | +| variables.rs:505:5:505:20 | CallExpr | variables.rs:506:5:506:36 | ExprStmt | | +| variables.rs:505:5:505:21 | ExprStmt | variables.rs:505:5:505:18 | PathExpr | | +| variables.rs:506:5:506:18 | PathExpr | variables.rs:506:20:506:22 | "a" | | +| variables.rs:506:5:506:35 | CallExpr | variables.rs:507:5:507:37 | ExprStmt | | +| variables.rs:506:5:506:36 | ExprStmt | variables.rs:506:5:506:18 | PathExpr | | +| variables.rs:506:20:506:22 | "a" | variables.rs:506:26:506:28 | "b" | | +| variables.rs:506:25:506:34 | TupleExpr | variables.rs:506:5:506:35 | CallExpr | | +| variables.rs:506:26:506:28 | "b" | variables.rs:506:31:506:33 | "c" | | +| variables.rs:506:31:506:33 | "c" | variables.rs:506:25:506:34 | TupleExpr | | +| variables.rs:507:5:507:18 | PathExpr | variables.rs:507:20:507:31 | PathExpr | | +| variables.rs:507:5:507:36 | CallExpr | variables.rs:508:5:508:26 | ExprStmt | | +| variables.rs:507:5:507:37 | ExprStmt | variables.rs:507:5:507:18 | PathExpr | | +| variables.rs:507:20:507:31 | PathExpr | variables.rs:507:33:507:34 | 45 | | +| variables.rs:507:20:507:35 | CallExpr | variables.rs:507:5:507:36 | CallExpr | | +| variables.rs:507:33:507:34 | 45 | variables.rs:507:20:507:35 | CallExpr | | +| variables.rs:508:5:508:23 | PathExpr | variables.rs:508:5:508:25 | CallExpr | | +| variables.rs:508:5:508:25 | CallExpr | variables.rs:509:5:509:23 | ExprStmt | | +| variables.rs:508:5:508:26 | ExprStmt | variables.rs:508:5:508:23 | PathExpr | | +| variables.rs:509:5:509:20 | PathExpr | variables.rs:509:5:509:22 | CallExpr | | +| variables.rs:509:5:509:22 | CallExpr | variables.rs:510:5:510:19 | ExprStmt | | +| variables.rs:509:5:509:23 | ExprStmt | variables.rs:509:5:509:20 | PathExpr | | +| variables.rs:510:5:510:16 | PathExpr | variables.rs:510:5:510:18 | CallExpr | | +| variables.rs:510:5:510:18 | CallExpr | variables.rs:511:5:511:17 | ExprStmt | | +| variables.rs:510:5:510:19 | ExprStmt | variables.rs:510:5:510:16 | PathExpr | | +| variables.rs:511:5:511:14 | PathExpr | variables.rs:511:5:511:16 | CallExpr | | +| variables.rs:511:5:511:16 | CallExpr | variables.rs:512:5:512:13 | ExprStmt | | +| variables.rs:511:5:511:17 | ExprStmt | variables.rs:511:5:511:14 | PathExpr | | +| variables.rs:512:5:512:10 | PathExpr | variables.rs:512:5:512:12 | CallExpr | | +| variables.rs:512:5:512:12 | CallExpr | variables.rs:513:5:513:17 | ExprStmt | | +| variables.rs:512:5:512:13 | ExprStmt | variables.rs:512:5:512:10 | PathExpr | | +| variables.rs:513:5:513:14 | PathExpr | variables.rs:513:5:513:16 | CallExpr | | +| variables.rs:513:5:513:16 | CallExpr | variables.rs:514:5:514:12 | ExprStmt | | +| variables.rs:513:5:513:17 | ExprStmt | variables.rs:513:5:513:14 | PathExpr | | +| variables.rs:514:5:514:9 | PathExpr | variables.rs:514:5:514:11 | CallExpr | | +| variables.rs:514:5:514:11 | CallExpr | variables.rs:515:5:515:18 | ExprStmt | | +| variables.rs:514:5:514:12 | ExprStmt | variables.rs:514:5:514:9 | PathExpr | | +| variables.rs:515:5:515:15 | PathExpr | variables.rs:515:5:515:17 | CallExpr | | +| variables.rs:515:5:515:17 | CallExpr | variables.rs:516:5:516:20 | ExprStmt | | +| variables.rs:515:5:515:18 | ExprStmt | variables.rs:515:5:515:15 | PathExpr | | +| variables.rs:516:5:516:17 | PathExpr | variables.rs:516:5:516:19 | CallExpr | | +| variables.rs:516:5:516:19 | CallExpr | variables.rs:517:5:517:14 | ExprStmt | | +| variables.rs:516:5:516:20 | ExprStmt | variables.rs:516:5:516:17 | PathExpr | | +| variables.rs:517:5:517:11 | PathExpr | variables.rs:517:5:517:13 | CallExpr | | +| variables.rs:517:5:517:13 | CallExpr | variables.rs:518:5:518:14 | ExprStmt | | +| variables.rs:517:5:517:14 | ExprStmt | variables.rs:517:5:517:11 | PathExpr | | +| variables.rs:518:5:518:11 | PathExpr | variables.rs:518:5:518:13 | CallExpr | | +| variables.rs:518:5:518:13 | CallExpr | variables.rs:519:5:519:30 | ExprStmt | | +| variables.rs:518:5:518:14 | ExprStmt | variables.rs:518:5:518:11 | PathExpr | | +| variables.rs:519:5:519:27 | PathExpr | variables.rs:519:5:519:29 | CallExpr | | +| variables.rs:519:5:519:29 | CallExpr | variables.rs:488:11:520:1 | BlockExpr | | +| variables.rs:519:5:519:30 | ExprStmt | variables.rs:519:5:519:27 | PathExpr | | breakTarget continueTarget diff --git a/rust/ql/test/library-tests/variables/variables.expected b/rust/ql/test/library-tests/variables/variables.expected index 7751d42911b4..c752e862c818 100644 --- a/rust/ql/test/library-tests/variables/variables.expected +++ b/rust/ql/test/library-tests/variables/variables.expected @@ -1,4 +1,6 @@ testFailures +| variables.rs:452:5:452:5 | a | Unexpected result: write_access=a | +| variables.rs:452:16:452:33 | Comment | Missing result:read_access=a | failures variable | variables.rs:3:14:3:14 | s | @@ -70,11 +72,28 @@ variable | variables.rs:338:13:338:13 | i | | variables.rs:339:9:339:13 | ref_i | | variables.rs:345:17:345:17 | x | -| variables.rs:352:13:352:13 | x | -| variables.rs:358:13:358:13 | x | -| variables.rs:359:9:359:9 | y | -| variables.rs:366:13:366:13 | x | -| variables.rs:367:13:367:15 | cap | +| variables.rs:352:22:352:22 | x | +| variables.rs:352:39:352:39 | y | +| variables.rs:361:13:361:13 | x | +| variables.rs:362:9:362:9 | y | +| variables.rs:368:13:368:13 | z | +| variables.rs:369:9:369:9 | w | +| variables.rs:381:13:381:13 | x | +| variables.rs:382:9:382:9 | y | +| variables.rs:389:13:389:13 | x | +| variables.rs:390:13:390:15 | cap | +| variables.rs:399:9:399:9 | x | +| variables.rs:400:13:400:15 | cap | +| variables.rs:407:8:407:8 | b | +| variables.rs:408:13:408:13 | x | +| variables.rs:423:13:423:14 | b1 | +| variables.rs:423:24:423:25 | b2 | +| variables.rs:424:9:424:9 | x | +| variables.rs:450:13:450:13 | a | +| variables.rs:458:14:458:14 | x | +| variables.rs:463:9:463:9 | x | +| variables.rs:467:9:467:9 | z | +| variables.rs:482:11:482:11 | a | variableAccess | variables.rs:4:20:4:20 | s | variables.rs:3:14:3:14 | s | | variables.rs:8:20:8:20 | i | variables.rs:7:14:7:14 | i | @@ -170,20 +189,66 @@ variableAccess | variables.rs:346:6:346:6 | x | variables.rs:345:17:345:17 | x | | variables.rs:347:10:347:10 | x | variables.rs:345:17:345:17 | x | | variables.rs:348:10:348:10 | x | variables.rs:345:17:345:17 | x | -| variables.rs:353:23:353:23 | x | variables.rs:352:13:352:13 | x | -| variables.rs:354:15:354:15 | x | variables.rs:352:13:352:13 | x | -| variables.rs:360:14:360:14 | x | variables.rs:358:13:358:13 | x | -| variables.rs:361:6:361:6 | y | variables.rs:359:9:359:9 | y | -| variables.rs:362:15:362:15 | x | variables.rs:358:13:358:13 | x | -| variables.rs:368:19:368:19 | x | variables.rs:366:13:366:13 | x | -| variables.rs:369:9:369:9 | x | variables.rs:366:13:366:13 | x | -| variables.rs:371:5:371:7 | cap | variables.rs:367:13:367:15 | cap | -| variables.rs:372:15:372:15 | x | variables.rs:366:13:366:13 | x | +| variables.rs:349:12:349:12 | x | variables.rs:345:17:345:17 | x | +| variables.rs:353:6:353:6 | x | variables.rs:352:22:352:22 | x | +| variables.rs:354:10:354:10 | x | variables.rs:352:22:352:22 | x | +| variables.rs:355:10:355:10 | x | variables.rs:352:22:352:22 | x | +| variables.rs:356:6:356:6 | y | variables.rs:352:39:352:39 | y | +| variables.rs:357:9:357:9 | x | variables.rs:352:22:352:22 | x | +| variables.rs:363:27:363:27 | x | variables.rs:361:13:361:13 | x | +| variables.rs:364:6:364:6 | y | variables.rs:362:9:362:9 | y | +| variables.rs:366:15:366:15 | x | variables.rs:361:13:361:13 | x | +| variables.rs:370:19:370:19 | x | variables.rs:361:13:361:13 | x | +| variables.rs:372:14:372:14 | z | variables.rs:368:13:368:13 | z | +| variables.rs:373:9:373:9 | w | variables.rs:369:9:369:9 | w | +| variables.rs:375:7:375:7 | w | variables.rs:369:9:369:9 | w | +| variables.rs:377:15:377:15 | z | variables.rs:368:13:368:13 | z | +| variables.rs:383:14:383:14 | x | variables.rs:381:13:381:13 | x | +| variables.rs:384:6:384:6 | y | variables.rs:382:9:382:9 | y | +| variables.rs:385:15:385:15 | x | variables.rs:381:13:381:13 | x | +| variables.rs:391:19:391:19 | x | variables.rs:389:13:389:13 | x | +| variables.rs:392:9:392:9 | x | variables.rs:389:13:389:13 | x | +| variables.rs:394:5:394:7 | cap | variables.rs:390:13:390:15 | cap | +| variables.rs:395:15:395:15 | x | variables.rs:389:13:389:13 | x | +| variables.rs:401:19:401:19 | x | variables.rs:399:9:399:9 | x | +| variables.rs:403:5:403:7 | cap | variables.rs:400:13:400:15 | cap | +| variables.rs:404:15:404:15 | x | variables.rs:399:9:399:9 | x | +| variables.rs:409:15:409:15 | x | variables.rs:408:13:408:13 | x | +| variables.rs:410:15:410:15 | x | variables.rs:408:13:408:13 | x | +| variables.rs:411:8:411:8 | b | variables.rs:407:8:407:8 | b | +| variables.rs:412:9:412:9 | x | variables.rs:408:13:408:13 | x | +| variables.rs:413:19:413:19 | x | variables.rs:408:13:408:13 | x | +| variables.rs:414:19:414:19 | x | variables.rs:408:13:408:13 | x | +| variables.rs:416:9:416:9 | x | variables.rs:408:13:408:13 | x | +| variables.rs:417:19:417:19 | x | variables.rs:408:13:408:13 | x | +| variables.rs:418:19:418:19 | x | variables.rs:408:13:408:13 | x | +| variables.rs:420:15:420:15 | x | variables.rs:408:13:408:13 | x | +| variables.rs:425:8:425:9 | b1 | variables.rs:423:13:423:14 | b1 | +| variables.rs:426:19:426:19 | x | variables.rs:424:9:424:9 | x | +| variables.rs:428:19:428:19 | x | variables.rs:424:9:424:9 | x | +| variables.rs:431:8:431:9 | b2 | variables.rs:423:24:423:25 | b2 | +| variables.rs:432:19:432:19 | x | variables.rs:424:9:424:9 | x | +| variables.rs:434:19:434:19 | x | variables.rs:424:9:424:9 | x | +| variables.rs:451:15:451:15 | a | variables.rs:450:13:450:13 | a | +| variables.rs:452:5:452:5 | a | variables.rs:450:13:450:13 | a | +| variables.rs:453:15:453:15 | a | variables.rs:450:13:450:13 | a | +| variables.rs:454:5:454:5 | a | variables.rs:450:13:450:13 | a | +| variables.rs:455:15:455:15 | a | variables.rs:450:13:450:13 | a | +| variables.rs:459:16:459:16 | x | variables.rs:458:14:458:14 | x | +| variables.rs:464:16:464:16 | x | variables.rs:463:9:463:9 | x | +| variables.rs:465:15:465:15 | x | variables.rs:463:9:463:9 | x | +| variables.rs:468:16:468:16 | z | variables.rs:467:9:467:9 | z | +| variables.rs:483:3:483:3 | a | variables.rs:482:11:482:11 | a | +| variables.rs:485:13:485:13 | a | variables.rs:482:11:482:11 | a | variableWriteAccess | variables.rs:19:5:19:6 | x2 | variables.rs:17:13:17:14 | x2 | | variables.rs:277:9:277:10 | c2 | variables.rs:270:13:270:14 | c2 | | variables.rs:278:9:278:10 | b4 | variables.rs:269:13:269:14 | b4 | | variables.rs:279:9:279:11 | a10 | variables.rs:268:13:268:15 | a10 | +| variables.rs:412:9:412:9 | x | variables.rs:408:13:408:13 | x | +| variables.rs:416:9:416:9 | x | variables.rs:408:13:408:13 | x | +| variables.rs:452:5:452:5 | a | variables.rs:450:13:450:13 | a | +| variables.rs:454:5:454:5 | a | variables.rs:450:13:450:13 | a | variableReadAccess | variables.rs:4:20:4:20 | s | variables.rs:3:14:3:14 | s | | variables.rs:8:20:8:20 | i | variables.rs:7:14:7:14 | i | @@ -272,12 +337,46 @@ variableReadAccess | variables.rs:346:6:346:6 | x | variables.rs:345:17:345:17 | x | | variables.rs:347:10:347:10 | x | variables.rs:345:17:345:17 | x | | variables.rs:348:10:348:10 | x | variables.rs:345:17:345:17 | x | -| variables.rs:354:15:354:15 | x | variables.rs:352:13:352:13 | x | -| variables.rs:361:6:361:6 | y | variables.rs:359:9:359:9 | y | -| variables.rs:362:15:362:15 | x | variables.rs:358:13:358:13 | x | -| variables.rs:368:19:368:19 | x | variables.rs:366:13:366:13 | x | -| variables.rs:371:5:371:7 | cap | variables.rs:367:13:367:15 | cap | -| variables.rs:372:15:372:15 | x | variables.rs:366:13:366:13 | x | +| variables.rs:349:12:349:12 | x | variables.rs:345:17:345:17 | x | +| variables.rs:353:6:353:6 | x | variables.rs:352:22:352:22 | x | +| variables.rs:354:10:354:10 | x | variables.rs:352:22:352:22 | x | +| variables.rs:355:10:355:10 | x | variables.rs:352:22:352:22 | x | +| variables.rs:356:6:356:6 | y | variables.rs:352:39:352:39 | y | +| variables.rs:357:9:357:9 | x | variables.rs:352:22:352:22 | x | +| variables.rs:364:6:364:6 | y | variables.rs:362:9:362:9 | y | +| variables.rs:366:15:366:15 | x | variables.rs:361:13:361:13 | x | +| variables.rs:373:9:373:9 | w | variables.rs:369:9:369:9 | w | +| variables.rs:375:7:375:7 | w | variables.rs:369:9:369:9 | w | +| variables.rs:377:15:377:15 | z | variables.rs:368:13:368:13 | z | +| variables.rs:384:6:384:6 | y | variables.rs:382:9:382:9 | y | +| variables.rs:385:15:385:15 | x | variables.rs:381:13:381:13 | x | +| variables.rs:391:19:391:19 | x | variables.rs:389:13:389:13 | x | +| variables.rs:394:5:394:7 | cap | variables.rs:390:13:390:15 | cap | +| variables.rs:395:15:395:15 | x | variables.rs:389:13:389:13 | x | +| variables.rs:401:19:401:19 | x | variables.rs:399:9:399:9 | x | +| variables.rs:403:5:403:7 | cap | variables.rs:400:13:400:15 | cap | +| variables.rs:404:15:404:15 | x | variables.rs:399:9:399:9 | x | +| variables.rs:409:15:409:15 | x | variables.rs:408:13:408:13 | x | +| variables.rs:410:15:410:15 | x | variables.rs:408:13:408:13 | x | +| variables.rs:411:8:411:8 | b | variables.rs:407:8:407:8 | b | +| variables.rs:413:19:413:19 | x | variables.rs:408:13:408:13 | x | +| variables.rs:414:19:414:19 | x | variables.rs:408:13:408:13 | x | +| variables.rs:417:19:417:19 | x | variables.rs:408:13:408:13 | x | +| variables.rs:418:19:418:19 | x | variables.rs:408:13:408:13 | x | +| variables.rs:420:15:420:15 | x | variables.rs:408:13:408:13 | x | +| variables.rs:425:8:425:9 | b1 | variables.rs:423:13:423:14 | b1 | +| variables.rs:426:19:426:19 | x | variables.rs:424:9:424:9 | x | +| variables.rs:428:19:428:19 | x | variables.rs:424:9:424:9 | x | +| variables.rs:431:8:431:9 | b2 | variables.rs:423:24:423:25 | b2 | +| variables.rs:432:19:432:19 | x | variables.rs:424:9:424:9 | x | +| variables.rs:434:19:434:19 | x | variables.rs:424:9:424:9 | x | +| variables.rs:451:15:451:15 | a | variables.rs:450:13:450:13 | a | +| variables.rs:453:15:453:15 | a | variables.rs:450:13:450:13 | a | +| variables.rs:455:15:455:15 | a | variables.rs:450:13:450:13 | a | +| variables.rs:459:16:459:16 | x | variables.rs:458:14:458:14 | x | +| variables.rs:465:15:465:15 | x | variables.rs:463:9:463:9 | x | +| variables.rs:483:3:483:3 | a | variables.rs:482:11:482:11 | a | +| variables.rs:485:13:485:13 | a | variables.rs:482:11:482:11 | a | variableInitializer | variables.rs:12:9:12:10 | x1 | variables.rs:12:14:12:16 | "a" | | variables.rs:17:13:17:14 | x2 | variables.rs:17:18:17:18 | 4 | @@ -306,13 +405,26 @@ variableInitializer | variables.rs:330:13:330:13 | a | variables.rs:330:17:330:17 | 0 | | variables.rs:338:13:338:13 | i | variables.rs:338:17:338:17 | 1 | | variables.rs:339:9:339:13 | ref_i | variables.rs:340:9:340:14 | RefExpr | -| variables.rs:352:13:352:13 | x | variables.rs:352:17:352:17 | 2 | -| variables.rs:358:13:358:13 | x | variables.rs:358:17:358:17 | 1 | -| variables.rs:359:9:359:9 | y | variables.rs:360:9:360:14 | RefExpr | -| variables.rs:366:13:366:13 | x | variables.rs:366:17:366:18 | 10 | -| variables.rs:367:13:367:15 | cap | variables.rs:367:19:370:5 | ClosureExpr | +| variables.rs:361:13:361:13 | x | variables.rs:361:17:361:17 | 2 | +| variables.rs:362:9:362:9 | y | variables.rs:363:9:363:28 | CallExpr | +| variables.rs:368:13:368:13 | z | variables.rs:368:17:368:17 | 4 | +| variables.rs:369:9:369:9 | w | variables.rs:370:9:370:19 | RefExpr | +| variables.rs:381:13:381:13 | x | variables.rs:381:17:381:17 | 1 | +| variables.rs:382:9:382:9 | y | variables.rs:383:9:383:14 | RefExpr | +| variables.rs:389:13:389:13 | x | variables.rs:389:17:389:18 | 10 | +| variables.rs:390:13:390:15 | cap | variables.rs:390:19:393:5 | ClosureExpr | +| variables.rs:399:9:399:9 | x | variables.rs:399:13:399:15 | 100 | +| variables.rs:400:13:400:15 | cap | variables.rs:400:19:402:5 | ClosureExpr | +| variables.rs:408:13:408:13 | x | variables.rs:408:17:408:17 | 1 | +| variables.rs:424:9:424:9 | x | variables.rs:424:13:424:13 | 1 | +| variables.rs:450:13:450:13 | a | variables.rs:450:17:450:35 | RecordExpr | +| variables.rs:463:9:463:9 | x | variables.rs:463:13:463:14 | 16 | +| variables.rs:467:9:467:9 | z | variables.rs:467:13:467:14 | 17 | +| variables.rs:482:11:482:11 | a | variables.rs:482:15:482:33 | RecordExpr | capturedVariable -| variables.rs:366:13:366:13 | x | +| variables.rs:389:13:389:13 | x | +| variables.rs:399:9:399:9 | x | capturedAccess -| variables.rs:368:19:368:19 | x | -| variables.rs:369:9:369:9 | x | +| variables.rs:391:19:391:19 | x | +| variables.rs:392:9:392:9 | x | +| variables.rs:401:19:401:19 | x | diff --git a/rust/ql/test/library-tests/variables/variables.rs b/rust/ql/test/library-tests/variables/variables.rs index dbc3fd4cab5c..a94d83c87b23 100644 --- a/rust/ql/test/library-tests/variables/variables.rs +++ b/rust/ql/test/library-tests/variables/variables.rs @@ -342,16 +342,39 @@ fn mutate() { print_i64(i); // $ read_access=i } -fn mutate_param(x : &mut i64) { // x +fn mutate_param(x : &mut i64) -> &mut i64 { *x = // $ read_access=x *x + // $ read_access=x *x; // $ read_access=x + return x; // $ read_access=x +} + +fn mutate_param2<'a>(x : &'a mut i64, y :&mut &'a mut i64) { + *x = // $ read_access=x + *x + // $ read_access=x + *x; // $ read_access=x + *y = // $ read_access=y + x; // $ read_access=x } fn mutate_arg() { let mut x = 2; // x - mutate_param(&mut x); // $ access=x + let y = // y + mutate_param(&mut x); // $ access=x + *y = 10; // $ read_access=y + // prints 10, not 4 print_i64(x); // $ read_access=x + + let mut z = 4; // z + let w = // w + &mut &mut x; // $ access=x + mutate_param2( + &mut z, // $ access=z + w // $ read_access=w + ); + **w = 11; // $ read_access=w + // prints 11, not 8 + print_i64(z); // $ read_access=z } fn alias() { @@ -362,7 +385,7 @@ fn alias() { print_i64(x); // $ read_access=x } -fn capture() { +fn capture_mut() { let mut x = 10; // x let mut cap = || { print_i64(x); // $ read_access=x @@ -372,6 +395,96 @@ fn capture() { print_i64(x); // $ read_access=x } +fn capture_immut() { + let x = 100; // x + let mut cap = || { + print_i64(x); // $ read_access=x + }; + cap(); // $ read_access=cap + print_i64(x); // $ read_access=x +} + +fn phi(b : bool) { + let mut x = 1; // x + print_i64(x); // $ read_access=x + print_i64(x + 1); // $ read_access=x + if b { // $ read_access=b + x = 2; // $ write_access=x + print_i64(x); // $ read_access=x + print_i64(x + 1); // $ read_access=x + } else { + x = 3; // $ write_access=x + print_i64(x); // $ read_access=x + print_i64(x + 1); // $ read_access=x + } + print_i64(x); // $ read_access=x +} + +fn phi_read(b1 : bool, b2 : bool) { + let x = 1; // x + if b1 { // $ read_access=b1 + print_i64(x); // $ read_access=x + } else { + print_i64(x); // $ read_access=x + } + + if b2 { // $ read_access=b2 + print_i64(x); // $ read_access=x + } else { + print_i64(x); // $ read_access=x + } +} + +#[derive(Debug)] +struct MyStruct { + val: i64, +} + +impl MyStruct { + fn my_get(&mut self) -> i64 { + return self.val; + } +} + +fn structs() { + let mut a = MyStruct { val: 1 }; // a + print_i64(a.my_get()); // $ read_access=a + a.val = 5; // $ read_access=a + print_i64(a.my_get()); // $ read_access=a + a = MyStruct { val: 2 }; // $ write_access=a + print_i64(a.my_get()); // $ read_access=a +} + +fn ref_param(x: &i64) { + print_i64(*x) // $ read_access=x +} + +fn ref_arg() { + let x = 16; // x + ref_param(&x); // $ access=x + print_i64(x); // $ read_access=x + + let z = 17; // z + ref_param(&z); // $ access=z +} + +trait Bar { + fn bar(&self); +} + +impl MyStruct { + fn bar(&mut self) { + *self = MyStruct { val: 3 }; + } +} + +fn ref_methodcall_receiver() { + let mut a = MyStruct { val: 1 }; // a + a.bar(); // $ read_access=a + // prints 3, not 1 + print_i64(a.val); // $ read_access=a +} + fn main() { immutable_variable(); mutable_variable(); @@ -399,5 +512,9 @@ fn main() { mutate(); mutate_arg(); alias(); - capture(); + capture_mut(); + capture_immut(); + structs(); + ref_arg(); + ref_methodcall_receiver(); } From 6290be2922ff6665320d8df08c1aa1460a3ae933 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 11 Oct 2024 10:40:15 +0200 Subject: [PATCH 098/217] Rust: Initial SSA implementation --- rust/ql/consistency-queries/SsaConsistency.ql | 19 + rust/ql/lib/codeql/rust/dataflow/Ssa.qll | 340 ++++++++++++ .../codeql/rust/dataflow/internal/SsaImpl.qll | 332 +++++++++++ .../rust/elements/internal/VariableImpl.qll | 124 +++-- .../test/library-tests/variables/Ssa.expected | 524 ++++++++++++++++++ rust/ql/test/library-tests/variables/Ssa.ql | 52 ++ .../variables/variables.expected | 4 +- 7 files changed, 1341 insertions(+), 54 deletions(-) create mode 100644 rust/ql/consistency-queries/SsaConsistency.ql create mode 100644 rust/ql/lib/codeql/rust/dataflow/Ssa.qll create mode 100644 rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll create mode 100644 rust/ql/test/library-tests/variables/Ssa.expected create mode 100644 rust/ql/test/library-tests/variables/Ssa.ql diff --git a/rust/ql/consistency-queries/SsaConsistency.ql b/rust/ql/consistency-queries/SsaConsistency.ql new file mode 100644 index 000000000000..0764842dac37 --- /dev/null +++ b/rust/ql/consistency-queries/SsaConsistency.ql @@ -0,0 +1,19 @@ +import codeql.rust.dataflow.Ssa +import codeql.rust.dataflow.internal.SsaImpl +import Consistency + +class MyRelevantDefinition extends RelevantDefinition, Ssa::Definition { + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } +} + +class MyRelevantDefinitionExt extends RelevantDefinitionExt, DefinitionExt { + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } +} diff --git a/rust/ql/lib/codeql/rust/dataflow/Ssa.qll b/rust/ql/lib/codeql/rust/dataflow/Ssa.qll new file mode 100644 index 000000000000..ff1aae058aaa --- /dev/null +++ b/rust/ql/lib/codeql/rust/dataflow/Ssa.qll @@ -0,0 +1,340 @@ +/** + * Provides the module `Ssa` for working with static single assignment (SSA) form. + */ + +/** + * Provides classes for working with static single assignment (SSA) form. + */ +module Ssa { + private import rust + private import codeql.rust.controlflow.BasicBlocks + private import codeql.rust.controlflow.ControlFlowGraph + private import codeql.rust.controlflow.internal.ControlFlowGraphImpl as CfgImpl + private import internal.SsaImpl as SsaImpl + + class Variable = SsaImpl::SsaInput::SourceVariable; + + /** A static single assignment (SSA) definition. */ + class Definition extends SsaImpl::Definition { + /** + * Gets the control flow node of this SSA definition, if any. Phi nodes are + * examples of SSA definitions without a control flow node, as they are + * modeled at index `-1` in the relevant basic block. + */ + final CfgNode getControlFlowNode() { + exists(BasicBlock bb, int i | this.definesAt(_, bb, i) | result = bb.getNode(i)) + } + + /** + * Gets a control-flow node that reads the value of this SSA definition. + * + * Example: + * + * ```rust + * fn phi(b : bool) { // defines b_0 + * let mut x = 1; // defines x_0 + * println!("{}", x); // reads x_0 + * println!("{}", x + 1); // reads x_0 + * + * if b { // reads b_0 + * x = 2; // defines x_1 + * println!("{}", x); // reads x_1 + * println!("{}", x + 1); // reads x_1 + * } else { + * x = 3; // defines x_2 + * println!("{}", x); // reads x_2 + * println!("{}", x + 1); // reads x_2 + * } + * // defines x_3 = phi(x_1, x_2) + * println!("{}", x); // reads x_3 + * } + * ``` + */ + final CfgNode getARead() { result = SsaImpl::getARead(this) } + + /** + * Gets a first control-flow node that reads the value of this SSA definition. + * That is, a read that can be reached from this definition without passing + * through other reads. + * + * Example: + * + * ```rust + * fn phi(b : bool) { // defines b_0 + * let mut x = 1; // defines x_0 + * println!("{}", x); // first read of x_0 + * println!("{}", x + 1); + * + * if b { // first read of b_0 + * x = 2; // defines x_1 + * println!("{}", x); // first read of x_1 + * println!("{}", x + 1); + * } else { + * x = 3; // defines x_2 + * println!("{}", x); // first read of x_2 + * println!("{}", x + 1); + * } + * // defines x_3 = phi(x_1, x_2) + * println!("{}", x); // first read of x_3 + * } + * ``` + */ + final CfgNode getAFirstRead() { SsaImpl::firstRead(this, result) } + + /** + * Gets a last control-flow node that reads the value of this SSA definition. + * That is, a read that can reach the end of the enclosing CFG scope, or another + * SSA definition for the source variable, without passing through any other read. + * + * Example: + * + * ```rust + * fn phi(b : bool) { // defines b_0 + * let mut x = 1; // defines x_0 + * println!("{}", x); + * println!("{}", x + 1); // last read of x_0 + * + * if b { // last read of b_0 + * x = 2; // defines x_1 + * println!("{}", x); + * println!("{}", x + 1); // last read of x_1 + * } else { + * x = 3; // defines x_2 + * println!("{}", x); + * println!("{}", x + 1); // last read of x_2 + * } + * // defines x_3 = phi(x_1, x_2) + * println!("{}", x); // last read of x_3 + * } + * ``` + */ + final CfgNode getALastRead() { SsaImpl::lastRead(this, result) } + + /** + * Holds if `read1` and `read2` are adjacent reads of this SSA definition. + * That is, `read2` can be reached from `read1` without passing through + * another read. + * + * Example: + * + * ```rust + * fn phi(b : bool) { + * let mut x = 1; // defines x_0 + * println!("{}", x); // reads x_0 (read1) + * println!("{}", x + 1); // reads x_0 (read2) + * + * if b { + * x = 2; // defines x_1 + * println!("{}", x); // reads x_1 (read1) + * println!("{}", x + 1); // reads x_1 (read2) + * } else { + * x = 3; // defines x_2 + * println!("{}", x); // reads x_2 (read1) + * println!("{}", x + 1); // reads x_2 (read2) + * } + * println!("{}", x); + * } + * ``` + */ + final predicate hasAdjacentReads(CfgNode read1, CfgNode read2) { + SsaImpl::adjacentReadPair(this, read1, read2) + } + + /** + * Gets an SSA definition whose value can flow to this one in one step. This + * includes inputs to phi nodes and the prior definitions of uncertain writes. + */ + private Definition getAPhiInputOrPriorDefinition() { + result = this.(PhiDefinition).getAnInput() + } + + /** + * Gets a definition that ultimately defines this SSA definition and is + * not itself a phi node. + * + * Example: + * + * ```rust + * fn phi(b : bool) { + * let mut x = 1; // defines x_0 + * println!("{}", x); + * println!("{}", x + 1); + * + * if b { + * x = 2; // defines x_1 + * println!("{}", x); + * println!("{}", x + 1); + * } else { + * x = 3; // defines x_2 + * println!("{}", x); + * println!("{}", x + 1); + * } + * // defines x_3 = phi(x_1, x_2); ultimate definitions are x_1 and x_2 + * println!("{}", x); + * } + * ``` + */ + final Definition getAnUltimateDefinition() { + result = this.getAPhiInputOrPriorDefinition*() and + not result instanceof PhiDefinition + } + + override string toString() { result = this.getControlFlowNode().toString() } + + /** Gets the scope of this SSA definition. */ + CfgScope getScope() { result = this.getBasicBlock().getScope() } + } + + /** + * An SSA definition that corresponds to a write. Example: + * + * ```rust + * fn m(i : i64) { // writes `i` + * let mut x = i; // writes `x` + * x = 11; // writes `x` + * } + * ``` + */ + class WriteDefinition extends Definition, SsaImpl::WriteDefinition { + private CfgNode write; + + WriteDefinition() { + exists(BasicBlock bb, int i, Variable v | + this.definesAt(v, bb, i) and + SsaImpl::variableWriteActual(bb, i, v, write) + ) + } + + /** Gets the underlying write access. */ + final CfgNode getWriteAccess() { result = write } + + /** + * Holds if this SSA definition assigns `value` to the underlying variable. + * + * This is either a direct assignment, `x = value`, or an assignment via + * simple pattern matching + * + * ```rb + * case value + * in Foo => x then ... + * in y => then ... + * end + * ``` + */ + predicate assigns(CfgNode value) { + exists(AssignmentExpr ae, BasicBlock bb, int i | + this.definesAt(_, bb, i) and + ae.getLhs() = bb.getNode(i).getAstNode() and + value.getAstNode() = ae.getRhs() + ) + } + + final override string toString() { result = write.toString() } + + final override Location getLocation() { result = write.getLocation() } + } + + /** + * A phi definition. For example, in + * + * ```rust + * if b { + * x = 0 + * } else { + * x = 1 + * } + * println!("{}", x); + * ``` + * + * a phi definition for `x` is inserted just before the call to `println!`. + */ + class PhiDefinition extends Definition, SsaImpl::PhiDefinition { + /** + * Gets an input of this phi definition. + * + * Example: + * + * ```rust + * fn phi(b : bool) { + * let mut x = 1; // defines x_0 + * println!("{}", x); + * println!("{}", x + 1); + * + * if b { + * x = 2; // defines x_1 + * println!("{}", x); + * println!("{}", x + 1); + * } else { + * x = 3; // defines x_2 + * println!("{}", x); + * println!("{}", x + 1); + * } + * // defines x_3 = phi(x_1, x_2); inputs are x_1 and x_2 + * println!("{}", x); + * } + * ``` + */ + final Definition getAnInput() { this.hasInputFromBlock(result, _) } + + /** Holds if `inp` is an input to this phi definition along the edge originating in `bb`. */ + predicate hasInputFromBlock(Definition inp, BasicBlock bb) { + inp = SsaImpl::phiHasInputFromBlock(this, bb) + } + + private string getSplitString() { + result = this.getBasicBlock().getFirstNode().(CfgImpl::AstCfgNode).getSplitsString() + } + + override string toString() { + exists(string prefix | + prefix = "[" + this.getSplitString() + "] " + or + not exists(this.getSplitString()) and + prefix = "" + | + result = prefix + "phi" + ) + } + + /* + * The location of a phi definition is the same as the location of the first node + * in the basic block in which it is defined. + * + * Strictly speaking, the node is *before* the first node, but such a location + * does not exist in the source program. + */ + + final override Location getLocation() { + result = this.getBasicBlock().getFirstNode().getLocation() + } + } + + /** + * An SSA definition inserted at the beginning of a scope to represent a + * captured local variable. For example, in + * + * ```rust + * fn capture_immut() { + * let x = 100; + * let mut cap = || { + * println!("{}", x); + * }; + * cap(); + * } + * ``` + * + * an entry definition for `x` is inserted at the start of the CFG for `cap`. + */ + class CapturedEntryDefinition extends Definition, SsaImpl::WriteDefinition { + CapturedEntryDefinition() { + exists(BasicBlock bb, int i, Variable v | + this.definesAt(v, bb, i) and + SsaImpl::capturedEntryWrite(bb, i, v) + ) + } + + final override string toString() { result = " " + this.getSourceVariable() } + + override Location getLocation() { result = this.getBasicBlock().getLocation() } + } +} diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll new file mode 100644 index 000000000000..cbd638384d8f --- /dev/null +++ b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll @@ -0,0 +1,332 @@ +private import rust +private import codeql.rust.controlflow.BasicBlocks as BasicBlocks +private import BasicBlocks +private import codeql.rust.controlflow.ControlFlowGraph as Cfg +private import Cfg +private import codeql.rust.controlflow.internal.ControlFlowGraphImpl as ControlFlowGraphImpl +private import codeql.ssa.Ssa as SsaImplCommon + +/** Holds if `v` is introduced like `let v : i64;`. */ +private predicate isUnitializedLet(IdentPat pat, Variable v) { + pat = v.getPat() and + exists(LetStmt let | + let = v.getLetStmt() and + not let.hasInitializer() + ) +} + +/** Holds if `write` writes to variable `v`. */ +predicate variableWrite(AstNode write, Variable v) { + exists(IdentPat pat | + pat = write and + pat = v.getPat() and + not isUnitializedLet(pat, v) + ) + or + exists(VariableAccess access | + access = write and + access.getVariable() = v + | + access instanceof VariableWriteAccess + or + // Although compound assignments, like `x += y`, may in fact not update `x`, + // it makes sense to treat them as such + access = any(CompoundAssignmentExpr cae).getLhs() + ) +} + +module SsaInput implements SsaImplCommon::InputSig { + class BasicBlock = BasicBlocks::BasicBlock; + + class ControlFlowNode = CfgNode; + + BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { result = bb.getImmediateDominator() } + + BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } + + class ExitBasicBlock = BasicBlocks::ExitBasicBlock; + + /** + * A variable amenable to SSA construction. + * + * All immutable variables are amenable. Mutable variables are restricted + * to those that are not captured by closures, and are not borrowed + * (either explicitly using `& mut`, or (potentially) implicit as borrowed + * receivers in a method call). + */ + class SourceVariable extends Variable { + SourceVariable() { + this.isImmutable() + or + this.isMutable() and + not this.isCaptured() and + forall(VariableAccess va | va = this.getAnAccess() | + va instanceof VariableReadAccess and + // receivers can be borrowed implicitly, cf. + // https://doc.rust-lang.org/reference/expressions/method-call-expr.html + not va = any(MethodCallExpr mce).getReceiver() + or + variableWrite(va, this) + ) + } + } + + predicate variableWrite(BasicBlock bb, int i, SourceVariable v, boolean certain) { + ( + variableWriteActual(bb, i, v, _) + or + capturedEntryWrite(bb, i, v) + ) and + certain = true + } + + predicate variableRead(BasicBlock bb, int i, SourceVariable v, boolean certain) { + exists(VariableAccess va | + bb.getNode(i).getAstNode() = va and + va = v.getAnAccess() + | + va instanceof VariableReadAccess + or + // Although compound assignments, like `x += y`, may in fact not read `x`, + // it makes sense to treat them as such + va = any(CompoundAssignmentExpr cae).getLhs() + ) and + certain = true + or + // For immutable variables, we model a read when they are borrowed (although the + // actual read happens later, if at all). This only affects the SSA liveness + // analysis. + exists(VariableAccess va | + va = any(RefExpr re).getExpr() and + va = bb.getNode(i).getAstNode() and + v = va.getVariable() and + certain = false + ) + } +} + +import SsaImplCommon::Make as Impl + +class Definition = Impl::Definition; + +class WriteDefinition = Impl::WriteDefinition; + +class UncertainWriteDefinition = Impl::UncertainWriteDefinition; + +class PhiDefinition = Impl::PhiNode; + +module Consistency = Impl::Consistency; + +module ExposedForTestingOnly { + predicate ssaDefReachesReadExt = Impl::ssaDefReachesReadExt/4; + + predicate phiHasInputFromBlockExt = Impl::phiHasInputFromBlockExt/3; +} + +pragma[noinline] +private predicate adjacentDefRead( + Definition def, BasicBlock bb1, int i1, BasicBlock bb2, int i2, SsaInput::SourceVariable v +) { + Impl::adjacentDefRead(def, bb1, i1, bb2, i2) and + v = def.getSourceVariable() +} + +pragma[noinline] +private predicate adjacentDefReadExt( + DefinitionExt def, BasicBlock bb1, int i1, BasicBlock bb2, int i2, SsaInput::SourceVariable v +) { + Impl::adjacentDefReadExt(def, _, bb1, i1, bb2, i2) and + v = def.getSourceVariable() +} + +/** Holds if `v` is read at index `i` in basic block `bb`. */ +private predicate variableReadActual(BasicBlock bb, int i, Variable v) { + exists(VariableReadAccess read | + read.getVariable() = v and + read = bb.getNode(i).getAstNode() + ) +} + +private predicate adjacentDefReachesRead( + Definition def, BasicBlock bb1, int i1, BasicBlock bb2, int i2 +) { + exists(SsaInput::SourceVariable v | adjacentDefRead(def, bb1, i1, bb2, i2, v) | + def.definesAt(v, bb1, i1) + or + SsaInput::variableRead(bb1, i1, v, true) + ) + or + exists(BasicBlock bb3, int i3 | + adjacentDefReachesRead(def, bb1, i1, bb3, i3) and + SsaInput::variableRead(bb3, i3, _, false) and + Impl::adjacentDefRead(def, bb3, i3, bb2, i2) + ) +} + +private predicate adjacentDefReachesReadExt( + DefinitionExt def, BasicBlock bb1, int i1, BasicBlock bb2, int i2 +) { + exists(SsaInput::SourceVariable v | adjacentDefReadExt(def, bb1, i1, bb2, i2, v) | + def.definesAt(v, bb1, i1, _) + or + SsaInput::variableRead(bb1, i1, v, true) + ) + or + exists(BasicBlock bb3, int i3 | + adjacentDefReachesReadExt(def, bb1, i1, bb3, i3) and + SsaInput::variableRead(bb3, i3, _, false) and + Impl::adjacentDefReadExt(def, _, bb3, i3, bb2, i2) + ) +} + +/** Same as `adjacentDefRead`, but skips uncertain reads. */ +pragma[nomagic] +private predicate adjacentDefSkipUncertainReads( + Definition def, BasicBlock bb1, int i1, BasicBlock bb2, int i2 +) { + adjacentDefReachesRead(def, bb1, i1, bb2, i2) and + SsaInput::variableRead(bb2, i2, _, true) +} + +private predicate adjacentDefReachesUncertainReadExt( + DefinitionExt def, BasicBlock bb1, int i1, BasicBlock bb2, int i2 +) { + adjacentDefReachesReadExt(def, bb1, i1, bb2, i2) and + SsaInput::variableRead(bb2, i2, _, false) +} + +/** Same as `lastRefRedef`, but skips uncertain reads. */ +pragma[nomagic] +private predicate lastRefSkipUncertainReadsExt(DefinitionExt def, BasicBlock bb, int i) { + Impl::lastRef(def, bb, i) and + not SsaInput::variableRead(bb, i, def.getSourceVariable(), false) + or + exists(BasicBlock bb0, int i0 | + Impl::lastRef(def, bb0, i0) and + adjacentDefReachesUncertainReadExt(def, bb, i, bb0, i0) + ) +} + +/** Holds if `bb` contains a captured access to variable `v`. */ +pragma[nomagic] +private predicate hasCapturedVariableAccess(BasicBlock bb, Variable v) { + exists(VariableAccess read | + read = bb.getANode().getAstNode() and + read.isCapture() and + read.getVariable() = v + ) +} + +cached +private module Cached { + /** + * Holds if an entry definition is needed for captured variable `v` at index + * `i` in entry block `bb`. + */ + cached + predicate capturedEntryWrite(EntryBasicBlock bb, int i, Variable v) { + hasCapturedVariableAccess(bb.getASuccessor*(), v) and + i = -1 + } + + /** + * Holds if `v` is written at index `i` in basic block `bb`, and the corresponding + * AST write access is `write`. + */ + cached + predicate variableWriteActual(BasicBlock bb, int i, Variable v, CfgNode write) { + bb.getNode(i) = write and + variableWrite(write.getAstNode(), v) + } + + cached + CfgNode getARead(Definition def) { + exists(Variable v, BasicBlock bb, int i | + Impl::ssaDefReachesRead(v, def, bb, i) and + variableReadActual(bb, i, v) and + result = bb.getNode(i) + ) + } + + cached + Definition phiHasInputFromBlock(PhiDefinition phi, BasicBlock bb) { + Impl::phiHasInputFromBlock(phi, result, bb) + } + + /** + * Holds if the value defined at SSA definition `def` can reach a read at `read`, + * without passing through any other non-pseudo read. + */ + cached + predicate firstRead(Definition def, CfgNode read) { + exists(BasicBlock bb1, int i1, BasicBlock bb2, int i2 | + def.definesAt(_, bb1, i1) and + adjacentDefSkipUncertainReads(def, bb1, i1, bb2, i2) and + read = bb2.getNode(i2) + ) + } + + /** + * Holds if the read at `read2` is a read of the same SSA definition `def` + * as the read at `read1`, and `read2` can be reached from `read1` without + * passing through another non-pseudo read. + */ + cached + predicate adjacentReadPair(Definition def, CfgNode read1, CfgNode read2) { + exists(BasicBlock bb1, int i1, BasicBlock bb2, int i2 | + read1 = bb1.getNode(i1) and + variableReadActual(bb1, i1, _) and + adjacentDefSkipUncertainReads(def, bb1, i1, bb2, i2) and + read2 = bb2.getNode(i2) + ) + } + + /** + * Holds if the read of `def` at `read` may be a last read. That is, `read` + * can either reach another definition of the underlying source variable or + * the end of the CFG scope, without passing through another non-pseudo read. + */ + cached + predicate lastRead(Definition def, CfgNode read) { + exists(BasicBlock bb, int i | + lastRefSkipUncertainReadsExt(def, bb, i) and + variableReadActual(bb, i, _) and + read = bb.getNode(i) + ) + } + + cached + Definition uncertainWriteDefinitionInput(UncertainWriteDefinition def) { + Impl::uncertainWriteDefinitionInput(def, result) + } +} + +import Cached +private import codeql.rust.dataflow.Ssa + +/** + * An extended static single assignment (SSA) definition. + * + * This is either a normal SSA definition (`Definition`) or a + * phi-read node (`PhiReadNode`). + * + * Only intended for internal use. + */ +class DefinitionExt extends Impl::DefinitionExt { + CfgNode getARead() { result = getARead(this) } + + override string toString() { result = this.(Ssa::Definition).toString() } + + override Location getLocation() { result = this.(Ssa::Definition).getLocation() } +} + +/** + * A phi-read node. + * + * Only intended for internal use. + */ +class PhiReadNode extends DefinitionExt, Impl::PhiReadNode { + override string toString() { result = "SSA phi read(" + this.getSourceVariable() + ")" } + + override Location getLocation() { result = Impl::PhiReadNode.super.getLocation() } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll index 7c387c966281..2895a33d94bd 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll @@ -118,16 +118,23 @@ module Impl { */ IdentPat getPat() { variableDecl(definingNode, result, name) } + /** Gets the `let` statement that introduces this variable, if any. */ + LetStmt getLetStmt() { this.getPat() = result.getPat() } + /** Gets the initial value of this variable, if any. */ - Expr getInitializer() { - exists(LetStmt let | - this.getPat() = let.getPat() and - result = let.getInitializer() - ) - } + Expr getInitializer() { result = this.getLetStmt().getInitializer() } /** Holds if this variable is captured. */ predicate isCaptured() { this.getAnAccess().isCapture() } + + /** Gets the parameter that introduces this variable, if any. */ + Param getParameter() { parameterDeclInScope(result, this, _) } + + /** Hold is this variable is mutable. */ + predicate isMutable() { this.getPat().isMut() } + + /** Hold is this variable is immutable. */ + predicate isImmutable() { not this.isMutable() } } /** A path expression that may access a local variable. */ @@ -180,6 +187,27 @@ module Impl { ) } + /** + * Holds if parameter `p` introduces the variable `v` inside variable scope + * `scope`. + */ + private predicate parameterDeclInScope(Param p, Variable v, VariableScope scope) { + exists(Pat pat | + pat = getAVariablePatAncestor(v) and + p.getPat() = pat + | + exists(Function f | + f.getParamList().getAParam() = p and + scope = f.getBody() + ) + or + exists(ClosureExpr ce | + ce.getParamList().getAParam() = p and + scope = ce.getBody() + ) + ) + } + /** * Holds if `v` is named `name` and is declared inside variable scope * `scope`, and `v` is bound starting from `(line, column)`. @@ -188,51 +216,44 @@ module Impl { Variable v, VariableScope scope, string name, int line, int column ) { name = v.getName() and - exists(Pat pat | pat = getAVariablePatAncestor(v) | - scope = - any(MatchArmScope arm | - arm.getPat() = pat and - arm.getLocation().hasLocationInfo(_, line, column, _, _) - ) - or - exists(Function f | - f.getParamList().getAParam().getPat() = pat and - scope = f.getBody() and - scope.getLocation().hasLocationInfo(_, line, column, _, _) - ) - or - exists(LetStmt let | - let.getPat() = pat and - scope = getEnclosingScope(let) and - // for `let` statements, variables are bound _after_ the statement, i.e. - // not in the RHS - let.getLocation().hasLocationInfo(_, _, _, line, column) - ) - or - exists(IfExpr ie, LetExpr let | - let.getPat() = pat and - ie.getCondition() = let and - scope = ie.getThen() and - scope.getLocation().hasLocationInfo(_, line, column, _, _) - ) - or - exists(ForExpr fe | - fe.getPat() = pat and - scope = fe.getLoopBody() and - scope.getLocation().hasLocationInfo(_, line, column, _, _) - ) - or - exists(ClosureExpr ce | - ce.getParamList().getAParam().getPat() = pat and - scope = ce.getBody() and - scope.getLocation().hasLocationInfo(_, line, column, _, _) - ) + ( + parameterDeclInScope(_, v, scope) and + scope.getLocation().hasLocationInfo(_, line, column, _, _) or - exists(WhileExpr we, LetExpr let | - let.getPat() = pat and - we.getCondition() = let and - scope = we.getLoopBody() and - scope.getLocation().hasLocationInfo(_, line, column, _, _) + exists(Pat pat | pat = getAVariablePatAncestor(v) | + scope = + any(MatchArmScope arm | + arm.getPat() = pat and + arm.getLocation().hasLocationInfo(_, line, column, _, _) + ) + or + exists(LetStmt let | + let.getPat() = pat and + scope = getEnclosingScope(let) and + // for `let` statements, variables are bound _after_ the statement, i.e. + // not in the RHS + let.getLocation().hasLocationInfo(_, _, _, line, column) + ) + or + exists(IfExpr ie, LetExpr let | + let.getPat() = pat and + ie.getCondition() = let and + scope = ie.getThen() and + scope.getLocation().hasLocationInfo(_, line, column, _, _) + ) + or + exists(ForExpr fe | + fe.getPat() = pat and + scope = fe.getLoopBody() and + scope.getLocation().hasLocationInfo(_, line, column, _, _) + ) + or + exists(WhileExpr we, LetExpr let | + let.getPat() = pat and + we.getCondition() = let and + scope = we.getLoopBody() and + scope.getLocation().hasLocationInfo(_, line, column, _, _) + ) ) ) } @@ -427,7 +448,8 @@ module Impl { exists(Expr mid | assignmentExprDescendant(mid) and getImmediateParent(e) = mid and - not mid.(PrefixExpr).getOperatorName() = "*" + not mid.(PrefixExpr).getOperatorName() = "*" and + not mid instanceof FieldExpr ) } diff --git a/rust/ql/test/library-tests/variables/Ssa.expected b/rust/ql/test/library-tests/variables/Ssa.expected new file mode 100644 index 000000000000..8b2ac3109ba2 --- /dev/null +++ b/rust/ql/test/library-tests/variables/Ssa.expected @@ -0,0 +1,524 @@ +nonSsaVariable +| variables.rs:330:13:330:13 | a | +| variables.rs:338:13:338:13 | i | +| variables.rs:361:13:361:13 | x | +| variables.rs:368:13:368:13 | z | +| variables.rs:381:13:381:13 | x | +| variables.rs:389:13:389:13 | x | +| variables.rs:450:13:450:13 | a | +| variables.rs:482:11:482:11 | a | +definition +| variables.rs:3:14:3:14 | s | variables.rs:3:14:3:14 | s | +| variables.rs:7:14:7:14 | i | variables.rs:7:14:7:14 | i | +| variables.rs:12:9:12:10 | x1 | variables.rs:12:9:12:10 | x1 | +| variables.rs:17:9:17:14 | x2 | variables.rs:17:13:17:14 | x2 | +| variables.rs:19:5:19:6 | x2 | variables.rs:17:13:17:14 | x2 | +| variables.rs:24:9:24:10 | x3 | variables.rs:24:9:24:10 | x3 | +| variables.rs:26:9:26:10 | x3 | variables.rs:26:9:26:10 | x3 | +| variables.rs:32:9:32:10 | x4 | variables.rs:32:9:32:10 | x4 | +| variables.rs:35:13:35:14 | x4 | variables.rs:35:13:35:14 | x4 | +| variables.rs:49:13:49:14 | a1 | variables.rs:49:13:49:14 | a1 | +| variables.rs:50:13:50:14 | b1 | variables.rs:50:13:50:14 | b1 | +| variables.rs:53:13:53:13 | x | variables.rs:53:13:53:13 | x | +| variables.rs:54:13:54:13 | y | variables.rs:54:13:54:13 | y | +| variables.rs:64:9:64:10 | p1 | variables.rs:64:9:64:10 | p1 | +| variables.rs:66:12:66:13 | a2 | variables.rs:66:12:66:13 | a2 | +| variables.rs:67:12:67:13 | b2 | variables.rs:67:12:67:13 | b2 | +| variables.rs:74:9:74:10 | s1 | variables.rs:74:9:74:10 | s1 | +| variables.rs:76:17:76:22 | s2 | variables.rs:76:21:76:22 | s2 | +| variables.rs:83:14:83:15 | x5 | variables.rs:83:14:83:15 | x5 | +| variables.rs:91:9:91:10 | s1 | variables.rs:91:9:91:10 | s1 | +| variables.rs:93:20:93:25 | s2 | variables.rs:93:24:93:25 | s2 | +| variables.rs:100:9:100:10 | x6 | variables.rs:100:9:100:10 | x6 | +| variables.rs:101:9:101:10 | y1 | variables.rs:101:9:101:10 | y1 | +| variables.rs:105:14:105:15 | y1 | variables.rs:105:14:105:15 | y1 | +| variables.rs:117:9:117:15 | numbers | variables.rs:117:9:117:15 | numbers | +| variables.rs:121:13:121:17 | first | variables.rs:121:13:121:17 | first | +| variables.rs:122:13:122:17 | third | variables.rs:122:13:122:17 | third | +| variables.rs:123:13:123:17 | fifth | variables.rs:123:13:123:17 | fifth | +| variables.rs:133:13:133:17 | first | variables.rs:133:13:133:17 | first | +| variables.rs:135:13:135:16 | last | variables.rs:135:13:135:16 | last | +| variables.rs:144:9:144:10 | p2 | variables.rs:144:9:144:10 | p2 | +| variables.rs:148:16:148:17 | x7 | variables.rs:148:16:148:17 | x7 | +| variables.rs:158:9:158:11 | msg | variables.rs:158:9:158:11 | msg | +| variables.rs:162:17:162:35 | [match(true)] id_variable | variables.rs:162:17:162:27 | id_variable | +| variables.rs:167:26:167:27 | id | variables.rs:167:26:167:27 | id | +| variables.rs:178:9:178:14 | either | variables.rs:178:9:178:14 | either | +| variables.rs:180:9:180:44 | [match(true)] phi | variables.rs:180:9:180:44 | a3 | +| variables.rs:180:22:180:23 | a3 | variables.rs:180:9:180:44 | a3 | +| variables.rs:180:42:180:43 | a3 | variables.rs:180:9:180:44 | a3 | +| variables.rs:192:9:192:10 | tv | variables.rs:192:9:192:10 | tv | +| variables.rs:194:9:194:81 | [match(true)] phi | variables.rs:194:9:194:81 | a4 | +| variables.rs:194:28:194:29 | a4 | variables.rs:194:9:194:81 | a4 | +| variables.rs:194:54:194:55 | a4 | variables.rs:194:9:194:81 | a4 | +| variables.rs:194:79:194:80 | a4 | variables.rs:194:9:194:81 | a4 | +| variables.rs:198:9:198:83 | [match(true)] phi | variables.rs:198:9:198:83 | a5 | +| variables.rs:198:10:198:57 | [match(true)] phi | variables.rs:198:9:198:83 | a5 | +| variables.rs:198:29:198:30 | a5 | variables.rs:198:9:198:83 | a5 | +| variables.rs:198:55:198:56 | a5 | variables.rs:198:9:198:83 | a5 | +| variables.rs:198:81:198:82 | a5 | variables.rs:198:9:198:83 | a5 | +| variables.rs:202:9:202:83 | [match(true)] phi | variables.rs:202:9:202:83 | a6 | +| variables.rs:202:28:202:29 | a6 | variables.rs:202:9:202:83 | a6 | +| variables.rs:202:35:202:82 | [match(true)] phi | variables.rs:202:9:202:83 | a6 | +| variables.rs:202:55:202:56 | a6 | variables.rs:202:9:202:83 | a6 | +| variables.rs:202:80:202:81 | a6 | variables.rs:202:9:202:83 | a6 | +| variables.rs:208:9:208:14 | either | variables.rs:208:9:208:14 | either | +| variables.rs:210:9:210:44 | [match(true)] phi | variables.rs:210:9:210:44 | a7 | +| variables.rs:210:22:210:23 | a7 | variables.rs:210:9:210:44 | a7 | +| variables.rs:210:42:210:43 | a7 | variables.rs:210:9:210:44 | a7 | +| variables.rs:218:9:218:14 | either | variables.rs:218:9:218:14 | either | +| variables.rs:221:9:222:52 | [match(true)] e | variables.rs:221:13:221:13 | e | +| variables.rs:222:14:222:51 | [match(true)] phi | variables.rs:222:14:222:51 | a11 | +| variables.rs:222:27:222:29 | a11 | variables.rs:222:14:222:51 | a11 | +| variables.rs:222:48:222:50 | a11 | variables.rs:222:14:222:51 | a11 | +| variables.rs:225:33:225:35 | a12 | variables.rs:225:33:225:35 | a12 | +| variables.rs:242:9:242:10 | fv | variables.rs:242:9:242:10 | fv | +| variables.rs:244:9:244:109 | [match(true)] phi | variables.rs:244:9:244:109 | a13 | +| variables.rs:244:27:244:29 | a13 | variables.rs:244:9:244:109 | a13 | +| variables.rs:244:35:244:82 | [match(true)] phi | variables.rs:244:9:244:109 | a13 | +| variables.rs:244:54:244:56 | a13 | variables.rs:244:9:244:109 | a13 | +| variables.rs:244:79:244:81 | a13 | variables.rs:244:9:244:109 | a13 | +| variables.rs:244:106:244:108 | a13 | variables.rs:244:9:244:109 | a13 | +| variables.rs:250:5:250:6 | a8 | variables.rs:250:5:250:6 | a8 | +| variables.rs:252:9:252:10 | b3 | variables.rs:252:9:252:10 | b3 | +| variables.rs:253:9:253:10 | c1 | variables.rs:253:9:253:10 | c1 | +| variables.rs:261:6:261:41 | [match(true)] phi | variables.rs:261:6:261:41 | a9 | +| variables.rs:261:19:261:20 | a9 | variables.rs:261:6:261:41 | a9 | +| variables.rs:261:39:261:40 | a9 | variables.rs:261:6:261:41 | a9 | +| variables.rs:268:9:268:15 | a10 | variables.rs:268:13:268:15 | a10 | +| variables.rs:269:9:269:14 | b4 | variables.rs:269:13:269:14 | b4 | +| variables.rs:270:9:270:14 | c2 | variables.rs:270:13:270:14 | c2 | +| variables.rs:277:9:277:10 | c2 | variables.rs:270:13:270:14 | c2 | +| variables.rs:278:9:278:10 | b4 | variables.rs:269:13:269:14 | b4 | +| variables.rs:279:9:279:11 | a10 | variables.rs:268:13:268:15 | a10 | +| variables.rs:291:13:291:15 | a10 | variables.rs:291:13:291:15 | a10 | +| variables.rs:292:13:292:14 | b4 | variables.rs:292:13:292:14 | b4 | +| variables.rs:304:9:304:23 | example_closure | variables.rs:304:9:304:23 | example_closure | +| variables.rs:305:10:305:10 | x | variables.rs:305:10:305:10 | x | +| variables.rs:307:9:307:10 | n1 | variables.rs:307:9:307:10 | n1 | +| variables.rs:312:9:312:26 | immutable_variable | variables.rs:312:9:312:26 | immutable_variable | +| variables.rs:313:10:313:10 | x | variables.rs:313:10:313:10 | x | +| variables.rs:315:9:315:10 | n2 | variables.rs:315:9:315:10 | n2 | +| variables.rs:321:9:321:9 | v | variables.rs:321:9:321:9 | v | +| variables.rs:323:9:323:12 | text | variables.rs:323:9:323:12 | text | +| variables.rs:339:9:339:13 | ref_i | variables.rs:339:9:339:13 | ref_i | +| variables.rs:345:17:345:17 | x | variables.rs:345:17:345:17 | x | +| variables.rs:352:22:352:22 | x | variables.rs:352:22:352:22 | x | +| variables.rs:352:39:352:39 | y | variables.rs:352:39:352:39 | y | +| variables.rs:362:9:362:9 | y | variables.rs:362:9:362:9 | y | +| variables.rs:369:9:369:9 | w | variables.rs:369:9:369:9 | w | +| variables.rs:382:9:382:9 | y | variables.rs:382:9:382:9 | y | +| variables.rs:390:9:390:15 | cap | variables.rs:390:13:390:15 | cap | +| variables.rs:399:9:399:9 | x | variables.rs:399:9:399:9 | x | +| variables.rs:400:9:400:15 | cap | variables.rs:400:13:400:15 | cap | +| variables.rs:400:19:402:5 | x | variables.rs:399:9:399:9 | x | +| variables.rs:407:8:407:8 | b | variables.rs:407:8:407:8 | b | +| variables.rs:408:9:408:13 | x | variables.rs:408:13:408:13 | x | +| variables.rs:411:5:419:5 | phi | variables.rs:408:13:408:13 | x | +| variables.rs:412:9:412:9 | x | variables.rs:408:13:408:13 | x | +| variables.rs:416:9:416:9 | x | variables.rs:408:13:408:13 | x | +| variables.rs:423:13:423:14 | b1 | variables.rs:423:13:423:14 | b1 | +| variables.rs:423:24:423:25 | b2 | variables.rs:423:24:423:25 | b2 | +| variables.rs:424:9:424:9 | x | variables.rs:424:9:424:9 | x | +| variables.rs:458:14:458:14 | x | variables.rs:458:14:458:14 | x | +| variables.rs:463:9:463:9 | x | variables.rs:463:9:463:9 | x | +| variables.rs:467:9:467:9 | z | variables.rs:467:9:467:9 | z | +read +| variables.rs:3:14:3:14 | s | variables.rs:3:14:3:14 | s | variables.rs:4:20:4:20 | s | +| variables.rs:7:14:7:14 | i | variables.rs:7:14:7:14 | i | variables.rs:8:20:8:20 | i | +| variables.rs:12:9:12:10 | x1 | variables.rs:12:9:12:10 | x1 | variables.rs:13:15:13:16 | x1 | +| variables.rs:17:9:17:14 | x2 | variables.rs:17:13:17:14 | x2 | variables.rs:18:15:18:16 | x2 | +| variables.rs:19:5:19:6 | x2 | variables.rs:17:13:17:14 | x2 | variables.rs:20:15:20:16 | x2 | +| variables.rs:24:9:24:10 | x3 | variables.rs:24:9:24:10 | x3 | variables.rs:25:15:25:16 | x3 | +| variables.rs:24:9:24:10 | x3 | variables.rs:24:9:24:10 | x3 | variables.rs:27:9:27:10 | x3 | +| variables.rs:26:9:26:10 | x3 | variables.rs:26:9:26:10 | x3 | variables.rs:28:15:28:16 | x3 | +| variables.rs:32:9:32:10 | x4 | variables.rs:32:9:32:10 | x4 | variables.rs:33:15:33:16 | x4 | +| variables.rs:32:9:32:10 | x4 | variables.rs:32:9:32:10 | x4 | variables.rs:38:15:38:16 | x4 | +| variables.rs:35:13:35:14 | x4 | variables.rs:35:13:35:14 | x4 | variables.rs:36:19:36:20 | x4 | +| variables.rs:49:13:49:14 | a1 | variables.rs:49:13:49:14 | a1 | variables.rs:57:15:57:16 | a1 | +| variables.rs:50:13:50:14 | b1 | variables.rs:50:13:50:14 | b1 | variables.rs:58:15:58:16 | b1 | +| variables.rs:53:13:53:13 | x | variables.rs:53:13:53:13 | x | variables.rs:59:15:59:15 | x | +| variables.rs:54:13:54:13 | y | variables.rs:54:13:54:13 | y | variables.rs:60:15:60:15 | y | +| variables.rs:64:9:64:10 | p1 | variables.rs:64:9:64:10 | p1 | variables.rs:68:9:68:10 | p1 | +| variables.rs:66:12:66:13 | a2 | variables.rs:66:12:66:13 | a2 | variables.rs:69:15:69:16 | a2 | +| variables.rs:67:12:67:13 | b2 | variables.rs:67:12:67:13 | b2 | variables.rs:70:15:70:16 | b2 | +| variables.rs:74:9:74:10 | s1 | variables.rs:74:9:74:10 | s1 | variables.rs:77:11:77:12 | s1 | +| variables.rs:76:17:76:22 | s2 | variables.rs:76:21:76:22 | s2 | variables.rs:78:19:78:20 | s2 | +| variables.rs:83:14:83:15 | x5 | variables.rs:83:14:83:15 | x5 | variables.rs:87:15:87:16 | x5 | +| variables.rs:91:9:91:10 | s1 | variables.rs:91:9:91:10 | s1 | variables.rs:94:11:94:12 | s1 | +| variables.rs:93:20:93:25 | s2 | variables.rs:93:24:93:25 | s2 | variables.rs:95:19:95:20 | s2 | +| variables.rs:100:9:100:10 | x6 | variables.rs:100:9:100:10 | x6 | variables.rs:103:11:103:12 | x6 | +| variables.rs:101:9:101:10 | y1 | variables.rs:101:9:101:10 | y1 | variables.rs:113:15:113:16 | y1 | +| variables.rs:105:14:105:15 | y1 | variables.rs:105:14:105:15 | y1 | variables.rs:108:23:108:24 | y1 | +| variables.rs:117:9:117:15 | numbers | variables.rs:117:9:117:15 | numbers | variables.rs:119:11:119:17 | numbers | +| variables.rs:117:9:117:15 | numbers | variables.rs:117:9:117:15 | numbers | variables.rs:131:11:131:17 | numbers | +| variables.rs:121:13:121:17 | first | variables.rs:121:13:121:17 | first | variables.rs:125:23:125:27 | first | +| variables.rs:122:13:122:17 | third | variables.rs:122:13:122:17 | third | variables.rs:126:23:126:27 | third | +| variables.rs:123:13:123:17 | fifth | variables.rs:123:13:123:17 | fifth | variables.rs:127:23:127:27 | fifth | +| variables.rs:133:13:133:17 | first | variables.rs:133:13:133:17 | first | variables.rs:137:23:137:27 | first | +| variables.rs:135:13:135:16 | last | variables.rs:135:13:135:16 | last | variables.rs:138:23:138:26 | last | +| variables.rs:144:9:144:10 | p2 | variables.rs:144:9:144:10 | p2 | variables.rs:146:11:146:12 | p2 | +| variables.rs:148:16:148:17 | x7 | variables.rs:148:16:148:17 | x7 | variables.rs:149:24:149:25 | x7 | +| variables.rs:158:9:158:11 | msg | variables.rs:158:9:158:11 | msg | variables.rs:160:11:160:13 | msg | +| variables.rs:162:17:162:35 | [match(true)] id_variable | variables.rs:162:17:162:27 | id_variable | variables.rs:163:24:163:34 | id_variable | +| variables.rs:167:26:167:27 | id | variables.rs:167:26:167:27 | id | variables.rs:168:23:168:24 | id | +| variables.rs:178:9:178:14 | either | variables.rs:178:9:178:14 | either | variables.rs:179:11:179:16 | either | +| variables.rs:180:9:180:44 | [match(true)] phi | variables.rs:180:9:180:44 | a3 | variables.rs:181:26:181:27 | a3 | +| variables.rs:192:9:192:10 | tv | variables.rs:192:9:192:10 | tv | variables.rs:193:11:193:12 | tv | +| variables.rs:192:9:192:10 | tv | variables.rs:192:9:192:10 | tv | variables.rs:197:11:197:12 | tv | +| variables.rs:192:9:192:10 | tv | variables.rs:192:9:192:10 | tv | variables.rs:201:11:201:12 | tv | +| variables.rs:194:9:194:81 | [match(true)] phi | variables.rs:194:9:194:81 | a4 | variables.rs:195:26:195:27 | a4 | +| variables.rs:198:9:198:83 | [match(true)] phi | variables.rs:198:9:198:83 | a5 | variables.rs:199:26:199:27 | a5 | +| variables.rs:202:9:202:83 | [match(true)] phi | variables.rs:202:9:202:83 | a6 | variables.rs:203:26:203:27 | a6 | +| variables.rs:208:9:208:14 | either | variables.rs:208:9:208:14 | either | variables.rs:209:11:209:16 | either | +| variables.rs:210:9:210:44 | [match(true)] phi | variables.rs:210:9:210:44 | a7 | variables.rs:211:16:211:17 | a7 | +| variables.rs:210:9:210:44 | [match(true)] phi | variables.rs:210:9:210:44 | a7 | variables.rs:212:26:212:27 | a7 | +| variables.rs:218:9:218:14 | either | variables.rs:218:9:218:14 | either | variables.rs:220:11:220:16 | either | +| variables.rs:221:9:222:52 | [match(true)] e | variables.rs:221:13:221:13 | e | variables.rs:226:15:226:15 | e | +| variables.rs:222:14:222:51 | [match(true)] phi | variables.rs:222:14:222:51 | a11 | variables.rs:224:23:224:25 | a11 | +| variables.rs:225:33:225:35 | a12 | variables.rs:225:33:225:35 | a12 | variables.rs:227:28:227:30 | a12 | +| variables.rs:242:9:242:10 | fv | variables.rs:242:9:242:10 | fv | variables.rs:243:11:243:12 | fv | +| variables.rs:244:9:244:109 | [match(true)] phi | variables.rs:244:9:244:109 | a13 | variables.rs:245:26:245:28 | a13 | +| variables.rs:250:5:250:6 | a8 | variables.rs:250:5:250:6 | a8 | variables.rs:255:15:255:16 | a8 | +| variables.rs:252:9:252:10 | b3 | variables.rs:252:9:252:10 | b3 | variables.rs:256:15:256:16 | b3 | +| variables.rs:253:9:253:10 | c1 | variables.rs:253:9:253:10 | c1 | variables.rs:257:15:257:16 | c1 | +| variables.rs:261:6:261:41 | [match(true)] phi | variables.rs:261:6:261:41 | a9 | variables.rs:263:15:263:16 | a9 | +| variables.rs:268:9:268:15 | a10 | variables.rs:268:13:268:15 | a10 | variables.rs:272:15:272:17 | a10 | +| variables.rs:269:9:269:14 | b4 | variables.rs:269:13:269:14 | b4 | variables.rs:273:15:273:16 | b4 | +| variables.rs:270:9:270:14 | c2 | variables.rs:270:13:270:14 | c2 | variables.rs:274:15:274:16 | c2 | +| variables.rs:277:9:277:10 | c2 | variables.rs:270:13:270:14 | c2 | variables.rs:283:9:283:10 | c2 | +| variables.rs:277:9:277:10 | c2 | variables.rs:270:13:270:14 | c2 | variables.rs:287:15:287:16 | c2 | +| variables.rs:278:9:278:10 | b4 | variables.rs:269:13:269:14 | b4 | variables.rs:282:9:282:10 | b4 | +| variables.rs:278:9:278:10 | b4 | variables.rs:269:13:269:14 | b4 | variables.rs:286:15:286:16 | b4 | +| variables.rs:278:9:278:10 | b4 | variables.rs:269:13:269:14 | b4 | variables.rs:300:15:300:16 | b4 | +| variables.rs:279:9:279:11 | a10 | variables.rs:268:13:268:15 | a10 | variables.rs:281:9:281:11 | a10 | +| variables.rs:279:9:279:11 | a10 | variables.rs:268:13:268:15 | a10 | variables.rs:285:15:285:17 | a10 | +| variables.rs:279:9:279:11 | a10 | variables.rs:268:13:268:15 | a10 | variables.rs:299:15:299:17 | a10 | +| variables.rs:291:13:291:15 | a10 | variables.rs:291:13:291:15 | a10 | variables.rs:294:23:294:25 | a10 | +| variables.rs:292:13:292:14 | b4 | variables.rs:292:13:292:14 | b4 | variables.rs:295:23:295:24 | b4 | +| variables.rs:304:9:304:23 | example_closure | variables.rs:304:9:304:23 | example_closure | variables.rs:308:9:308:23 | example_closure | +| variables.rs:305:10:305:10 | x | variables.rs:305:10:305:10 | x | variables.rs:306:9:306:9 | x | +| variables.rs:307:9:307:10 | n1 | variables.rs:307:9:307:10 | n1 | variables.rs:309:15:309:16 | n1 | +| variables.rs:312:9:312:26 | immutable_variable | variables.rs:312:9:312:26 | immutable_variable | variables.rs:316:9:316:26 | immutable_variable | +| variables.rs:313:10:313:10 | x | variables.rs:313:10:313:10 | x | variables.rs:314:9:314:9 | x | +| variables.rs:315:9:315:10 | n2 | variables.rs:315:9:315:10 | n2 | variables.rs:317:15:317:16 | n2 | +| variables.rs:321:9:321:9 | v | variables.rs:321:9:321:9 | v | variables.rs:324:12:324:12 | v | +| variables.rs:323:9:323:12 | text | variables.rs:323:9:323:12 | text | variables.rs:325:19:325:22 | text | +| variables.rs:339:9:339:13 | ref_i | variables.rs:339:9:339:13 | ref_i | variables.rs:341:6:341:10 | ref_i | +| variables.rs:345:17:345:17 | x | variables.rs:345:17:345:17 | x | variables.rs:346:6:346:6 | x | +| variables.rs:345:17:345:17 | x | variables.rs:345:17:345:17 | x | variables.rs:347:10:347:10 | x | +| variables.rs:345:17:345:17 | x | variables.rs:345:17:345:17 | x | variables.rs:348:10:348:10 | x | +| variables.rs:345:17:345:17 | x | variables.rs:345:17:345:17 | x | variables.rs:349:12:349:12 | x | +| variables.rs:352:22:352:22 | x | variables.rs:352:22:352:22 | x | variables.rs:353:6:353:6 | x | +| variables.rs:352:22:352:22 | x | variables.rs:352:22:352:22 | x | variables.rs:354:10:354:10 | x | +| variables.rs:352:22:352:22 | x | variables.rs:352:22:352:22 | x | variables.rs:355:10:355:10 | x | +| variables.rs:352:22:352:22 | x | variables.rs:352:22:352:22 | x | variables.rs:357:9:357:9 | x | +| variables.rs:352:39:352:39 | y | variables.rs:352:39:352:39 | y | variables.rs:356:6:356:6 | y | +| variables.rs:362:9:362:9 | y | variables.rs:362:9:362:9 | y | variables.rs:364:6:364:6 | y | +| variables.rs:369:9:369:9 | w | variables.rs:369:9:369:9 | w | variables.rs:373:9:373:9 | w | +| variables.rs:369:9:369:9 | w | variables.rs:369:9:369:9 | w | variables.rs:375:7:375:7 | w | +| variables.rs:382:9:382:9 | y | variables.rs:382:9:382:9 | y | variables.rs:384:6:384:6 | y | +| variables.rs:390:9:390:15 | cap | variables.rs:390:13:390:15 | cap | variables.rs:394:5:394:7 | cap | +| variables.rs:399:9:399:9 | x | variables.rs:399:9:399:9 | x | variables.rs:404:15:404:15 | x | +| variables.rs:400:9:400:15 | cap | variables.rs:400:13:400:15 | cap | variables.rs:403:5:403:7 | cap | +| variables.rs:400:19:402:5 | x | variables.rs:399:9:399:9 | x | variables.rs:401:19:401:19 | x | +| variables.rs:407:8:407:8 | b | variables.rs:407:8:407:8 | b | variables.rs:411:8:411:8 | b | +| variables.rs:408:9:408:13 | x | variables.rs:408:13:408:13 | x | variables.rs:409:15:409:15 | x | +| variables.rs:408:9:408:13 | x | variables.rs:408:13:408:13 | x | variables.rs:410:15:410:15 | x | +| variables.rs:411:5:419:5 | phi | variables.rs:408:13:408:13 | x | variables.rs:420:15:420:15 | x | +| variables.rs:412:9:412:9 | x | variables.rs:408:13:408:13 | x | variables.rs:413:19:413:19 | x | +| variables.rs:412:9:412:9 | x | variables.rs:408:13:408:13 | x | variables.rs:414:19:414:19 | x | +| variables.rs:416:9:416:9 | x | variables.rs:408:13:408:13 | x | variables.rs:417:19:417:19 | x | +| variables.rs:416:9:416:9 | x | variables.rs:408:13:408:13 | x | variables.rs:418:19:418:19 | x | +| variables.rs:423:13:423:14 | b1 | variables.rs:423:13:423:14 | b1 | variables.rs:425:8:425:9 | b1 | +| variables.rs:423:24:423:25 | b2 | variables.rs:423:24:423:25 | b2 | variables.rs:431:8:431:9 | b2 | +| variables.rs:424:9:424:9 | x | variables.rs:424:9:424:9 | x | variables.rs:426:19:426:19 | x | +| variables.rs:424:9:424:9 | x | variables.rs:424:9:424:9 | x | variables.rs:428:19:428:19 | x | +| variables.rs:424:9:424:9 | x | variables.rs:424:9:424:9 | x | variables.rs:432:19:432:19 | x | +| variables.rs:424:9:424:9 | x | variables.rs:424:9:424:9 | x | variables.rs:434:19:434:19 | x | +| variables.rs:458:14:458:14 | x | variables.rs:458:14:458:14 | x | variables.rs:459:16:459:16 | x | +| variables.rs:463:9:463:9 | x | variables.rs:463:9:463:9 | x | variables.rs:465:15:465:15 | x | +firstRead +| variables.rs:3:14:3:14 | s | variables.rs:3:14:3:14 | s | variables.rs:4:20:4:20 | s | +| variables.rs:7:14:7:14 | i | variables.rs:7:14:7:14 | i | variables.rs:8:20:8:20 | i | +| variables.rs:12:9:12:10 | x1 | variables.rs:12:9:12:10 | x1 | variables.rs:13:15:13:16 | x1 | +| variables.rs:17:9:17:14 | x2 | variables.rs:17:13:17:14 | x2 | variables.rs:18:15:18:16 | x2 | +| variables.rs:19:5:19:6 | x2 | variables.rs:17:13:17:14 | x2 | variables.rs:20:15:20:16 | x2 | +| variables.rs:24:9:24:10 | x3 | variables.rs:24:9:24:10 | x3 | variables.rs:25:15:25:16 | x3 | +| variables.rs:26:9:26:10 | x3 | variables.rs:26:9:26:10 | x3 | variables.rs:28:15:28:16 | x3 | +| variables.rs:32:9:32:10 | x4 | variables.rs:32:9:32:10 | x4 | variables.rs:33:15:33:16 | x4 | +| variables.rs:35:13:35:14 | x4 | variables.rs:35:13:35:14 | x4 | variables.rs:36:19:36:20 | x4 | +| variables.rs:49:13:49:14 | a1 | variables.rs:49:13:49:14 | a1 | variables.rs:57:15:57:16 | a1 | +| variables.rs:50:13:50:14 | b1 | variables.rs:50:13:50:14 | b1 | variables.rs:58:15:58:16 | b1 | +| variables.rs:53:13:53:13 | x | variables.rs:53:13:53:13 | x | variables.rs:59:15:59:15 | x | +| variables.rs:54:13:54:13 | y | variables.rs:54:13:54:13 | y | variables.rs:60:15:60:15 | y | +| variables.rs:64:9:64:10 | p1 | variables.rs:64:9:64:10 | p1 | variables.rs:68:9:68:10 | p1 | +| variables.rs:66:12:66:13 | a2 | variables.rs:66:12:66:13 | a2 | variables.rs:69:15:69:16 | a2 | +| variables.rs:67:12:67:13 | b2 | variables.rs:67:12:67:13 | b2 | variables.rs:70:15:70:16 | b2 | +| variables.rs:74:9:74:10 | s1 | variables.rs:74:9:74:10 | s1 | variables.rs:77:11:77:12 | s1 | +| variables.rs:76:17:76:22 | s2 | variables.rs:76:21:76:22 | s2 | variables.rs:78:19:78:20 | s2 | +| variables.rs:83:14:83:15 | x5 | variables.rs:83:14:83:15 | x5 | variables.rs:87:15:87:16 | x5 | +| variables.rs:91:9:91:10 | s1 | variables.rs:91:9:91:10 | s1 | variables.rs:94:11:94:12 | s1 | +| variables.rs:93:20:93:25 | s2 | variables.rs:93:24:93:25 | s2 | variables.rs:95:19:95:20 | s2 | +| variables.rs:100:9:100:10 | x6 | variables.rs:100:9:100:10 | x6 | variables.rs:103:11:103:12 | x6 | +| variables.rs:101:9:101:10 | y1 | variables.rs:101:9:101:10 | y1 | variables.rs:113:15:113:16 | y1 | +| variables.rs:105:14:105:15 | y1 | variables.rs:105:14:105:15 | y1 | variables.rs:108:23:108:24 | y1 | +| variables.rs:117:9:117:15 | numbers | variables.rs:117:9:117:15 | numbers | variables.rs:119:11:119:17 | numbers | +| variables.rs:121:13:121:17 | first | variables.rs:121:13:121:17 | first | variables.rs:125:23:125:27 | first | +| variables.rs:122:13:122:17 | third | variables.rs:122:13:122:17 | third | variables.rs:126:23:126:27 | third | +| variables.rs:123:13:123:17 | fifth | variables.rs:123:13:123:17 | fifth | variables.rs:127:23:127:27 | fifth | +| variables.rs:133:13:133:17 | first | variables.rs:133:13:133:17 | first | variables.rs:137:23:137:27 | first | +| variables.rs:135:13:135:16 | last | variables.rs:135:13:135:16 | last | variables.rs:138:23:138:26 | last | +| variables.rs:144:9:144:10 | p2 | variables.rs:144:9:144:10 | p2 | variables.rs:146:11:146:12 | p2 | +| variables.rs:148:16:148:17 | x7 | variables.rs:148:16:148:17 | x7 | variables.rs:149:24:149:25 | x7 | +| variables.rs:158:9:158:11 | msg | variables.rs:158:9:158:11 | msg | variables.rs:160:11:160:13 | msg | +| variables.rs:162:17:162:35 | [match(true)] id_variable | variables.rs:162:17:162:27 | id_variable | variables.rs:163:24:163:34 | id_variable | +| variables.rs:167:26:167:27 | id | variables.rs:167:26:167:27 | id | variables.rs:168:23:168:24 | id | +| variables.rs:178:9:178:14 | either | variables.rs:178:9:178:14 | either | variables.rs:179:11:179:16 | either | +| variables.rs:180:9:180:44 | [match(true)] phi | variables.rs:180:9:180:44 | a3 | variables.rs:181:26:181:27 | a3 | +| variables.rs:192:9:192:10 | tv | variables.rs:192:9:192:10 | tv | variables.rs:193:11:193:12 | tv | +| variables.rs:194:9:194:81 | [match(true)] phi | variables.rs:194:9:194:81 | a4 | variables.rs:195:26:195:27 | a4 | +| variables.rs:198:9:198:83 | [match(true)] phi | variables.rs:198:9:198:83 | a5 | variables.rs:199:26:199:27 | a5 | +| variables.rs:202:9:202:83 | [match(true)] phi | variables.rs:202:9:202:83 | a6 | variables.rs:203:26:203:27 | a6 | +| variables.rs:208:9:208:14 | either | variables.rs:208:9:208:14 | either | variables.rs:209:11:209:16 | either | +| variables.rs:210:9:210:44 | [match(true)] phi | variables.rs:210:9:210:44 | a7 | variables.rs:211:16:211:17 | a7 | +| variables.rs:218:9:218:14 | either | variables.rs:218:9:218:14 | either | variables.rs:220:11:220:16 | either | +| variables.rs:221:9:222:52 | [match(true)] e | variables.rs:221:13:221:13 | e | variables.rs:226:15:226:15 | e | +| variables.rs:222:14:222:51 | [match(true)] phi | variables.rs:222:14:222:51 | a11 | variables.rs:224:23:224:25 | a11 | +| variables.rs:225:33:225:35 | a12 | variables.rs:225:33:225:35 | a12 | variables.rs:227:28:227:30 | a12 | +| variables.rs:242:9:242:10 | fv | variables.rs:242:9:242:10 | fv | variables.rs:243:11:243:12 | fv | +| variables.rs:244:9:244:109 | [match(true)] phi | variables.rs:244:9:244:109 | a13 | variables.rs:245:26:245:28 | a13 | +| variables.rs:250:5:250:6 | a8 | variables.rs:250:5:250:6 | a8 | variables.rs:255:15:255:16 | a8 | +| variables.rs:252:9:252:10 | b3 | variables.rs:252:9:252:10 | b3 | variables.rs:256:15:256:16 | b3 | +| variables.rs:253:9:253:10 | c1 | variables.rs:253:9:253:10 | c1 | variables.rs:257:15:257:16 | c1 | +| variables.rs:261:6:261:41 | [match(true)] phi | variables.rs:261:6:261:41 | a9 | variables.rs:263:15:263:16 | a9 | +| variables.rs:268:9:268:15 | a10 | variables.rs:268:13:268:15 | a10 | variables.rs:272:15:272:17 | a10 | +| variables.rs:269:9:269:14 | b4 | variables.rs:269:13:269:14 | b4 | variables.rs:273:15:273:16 | b4 | +| variables.rs:270:9:270:14 | c2 | variables.rs:270:13:270:14 | c2 | variables.rs:274:15:274:16 | c2 | +| variables.rs:277:9:277:10 | c2 | variables.rs:270:13:270:14 | c2 | variables.rs:283:9:283:10 | c2 | +| variables.rs:278:9:278:10 | b4 | variables.rs:269:13:269:14 | b4 | variables.rs:282:9:282:10 | b4 | +| variables.rs:279:9:279:11 | a10 | variables.rs:268:13:268:15 | a10 | variables.rs:281:9:281:11 | a10 | +| variables.rs:291:13:291:15 | a10 | variables.rs:291:13:291:15 | a10 | variables.rs:294:23:294:25 | a10 | +| variables.rs:292:13:292:14 | b4 | variables.rs:292:13:292:14 | b4 | variables.rs:295:23:295:24 | b4 | +| variables.rs:304:9:304:23 | example_closure | variables.rs:304:9:304:23 | example_closure | variables.rs:308:9:308:23 | example_closure | +| variables.rs:305:10:305:10 | x | variables.rs:305:10:305:10 | x | variables.rs:306:9:306:9 | x | +| variables.rs:307:9:307:10 | n1 | variables.rs:307:9:307:10 | n1 | variables.rs:309:15:309:16 | n1 | +| variables.rs:312:9:312:26 | immutable_variable | variables.rs:312:9:312:26 | immutable_variable | variables.rs:316:9:316:26 | immutable_variable | +| variables.rs:313:10:313:10 | x | variables.rs:313:10:313:10 | x | variables.rs:314:9:314:9 | x | +| variables.rs:315:9:315:10 | n2 | variables.rs:315:9:315:10 | n2 | variables.rs:317:15:317:16 | n2 | +| variables.rs:321:9:321:9 | v | variables.rs:321:9:321:9 | v | variables.rs:324:12:324:12 | v | +| variables.rs:323:9:323:12 | text | variables.rs:323:9:323:12 | text | variables.rs:325:19:325:22 | text | +| variables.rs:339:9:339:13 | ref_i | variables.rs:339:9:339:13 | ref_i | variables.rs:341:6:341:10 | ref_i | +| variables.rs:345:17:345:17 | x | variables.rs:345:17:345:17 | x | variables.rs:346:6:346:6 | x | +| variables.rs:352:22:352:22 | x | variables.rs:352:22:352:22 | x | variables.rs:353:6:353:6 | x | +| variables.rs:352:39:352:39 | y | variables.rs:352:39:352:39 | y | variables.rs:356:6:356:6 | y | +| variables.rs:362:9:362:9 | y | variables.rs:362:9:362:9 | y | variables.rs:364:6:364:6 | y | +| variables.rs:369:9:369:9 | w | variables.rs:369:9:369:9 | w | variables.rs:373:9:373:9 | w | +| variables.rs:382:9:382:9 | y | variables.rs:382:9:382:9 | y | variables.rs:384:6:384:6 | y | +| variables.rs:390:9:390:15 | cap | variables.rs:390:13:390:15 | cap | variables.rs:394:5:394:7 | cap | +| variables.rs:399:9:399:9 | x | variables.rs:399:9:399:9 | x | variables.rs:404:15:404:15 | x | +| variables.rs:400:9:400:15 | cap | variables.rs:400:13:400:15 | cap | variables.rs:403:5:403:7 | cap | +| variables.rs:400:19:402:5 | x | variables.rs:399:9:399:9 | x | variables.rs:401:19:401:19 | x | +| variables.rs:407:8:407:8 | b | variables.rs:407:8:407:8 | b | variables.rs:411:8:411:8 | b | +| variables.rs:408:9:408:13 | x | variables.rs:408:13:408:13 | x | variables.rs:409:15:409:15 | x | +| variables.rs:411:5:419:5 | phi | variables.rs:408:13:408:13 | x | variables.rs:420:15:420:15 | x | +| variables.rs:412:9:412:9 | x | variables.rs:408:13:408:13 | x | variables.rs:413:19:413:19 | x | +| variables.rs:416:9:416:9 | x | variables.rs:408:13:408:13 | x | variables.rs:417:19:417:19 | x | +| variables.rs:423:13:423:14 | b1 | variables.rs:423:13:423:14 | b1 | variables.rs:425:8:425:9 | b1 | +| variables.rs:423:24:423:25 | b2 | variables.rs:423:24:423:25 | b2 | variables.rs:431:8:431:9 | b2 | +| variables.rs:424:9:424:9 | x | variables.rs:424:9:424:9 | x | variables.rs:426:19:426:19 | x | +| variables.rs:424:9:424:9 | x | variables.rs:424:9:424:9 | x | variables.rs:428:19:428:19 | x | +| variables.rs:458:14:458:14 | x | variables.rs:458:14:458:14 | x | variables.rs:459:16:459:16 | x | +| variables.rs:463:9:463:9 | x | variables.rs:463:9:463:9 | x | variables.rs:465:15:465:15 | x | +lastRead +| variables.rs:3:14:3:14 | s | variables.rs:3:14:3:14 | s | variables.rs:4:20:4:20 | s | +| variables.rs:7:14:7:14 | i | variables.rs:7:14:7:14 | i | variables.rs:8:20:8:20 | i | +| variables.rs:12:9:12:10 | x1 | variables.rs:12:9:12:10 | x1 | variables.rs:13:15:13:16 | x1 | +| variables.rs:17:9:17:14 | x2 | variables.rs:17:13:17:14 | x2 | variables.rs:18:15:18:16 | x2 | +| variables.rs:19:5:19:6 | x2 | variables.rs:17:13:17:14 | x2 | variables.rs:20:15:20:16 | x2 | +| variables.rs:24:9:24:10 | x3 | variables.rs:24:9:24:10 | x3 | variables.rs:27:9:27:10 | x3 | +| variables.rs:26:9:26:10 | x3 | variables.rs:26:9:26:10 | x3 | variables.rs:28:15:28:16 | x3 | +| variables.rs:32:9:32:10 | x4 | variables.rs:32:9:32:10 | x4 | variables.rs:38:15:38:16 | x4 | +| variables.rs:35:13:35:14 | x4 | variables.rs:35:13:35:14 | x4 | variables.rs:36:19:36:20 | x4 | +| variables.rs:49:13:49:14 | a1 | variables.rs:49:13:49:14 | a1 | variables.rs:57:15:57:16 | a1 | +| variables.rs:50:13:50:14 | b1 | variables.rs:50:13:50:14 | b1 | variables.rs:58:15:58:16 | b1 | +| variables.rs:53:13:53:13 | x | variables.rs:53:13:53:13 | x | variables.rs:59:15:59:15 | x | +| variables.rs:54:13:54:13 | y | variables.rs:54:13:54:13 | y | variables.rs:60:15:60:15 | y | +| variables.rs:64:9:64:10 | p1 | variables.rs:64:9:64:10 | p1 | variables.rs:68:9:68:10 | p1 | +| variables.rs:66:12:66:13 | a2 | variables.rs:66:12:66:13 | a2 | variables.rs:69:15:69:16 | a2 | +| variables.rs:67:12:67:13 | b2 | variables.rs:67:12:67:13 | b2 | variables.rs:70:15:70:16 | b2 | +| variables.rs:74:9:74:10 | s1 | variables.rs:74:9:74:10 | s1 | variables.rs:77:11:77:12 | s1 | +| variables.rs:76:17:76:22 | s2 | variables.rs:76:21:76:22 | s2 | variables.rs:78:19:78:20 | s2 | +| variables.rs:83:14:83:15 | x5 | variables.rs:83:14:83:15 | x5 | variables.rs:87:15:87:16 | x5 | +| variables.rs:91:9:91:10 | s1 | variables.rs:91:9:91:10 | s1 | variables.rs:94:11:94:12 | s1 | +| variables.rs:93:20:93:25 | s2 | variables.rs:93:24:93:25 | s2 | variables.rs:95:19:95:20 | s2 | +| variables.rs:100:9:100:10 | x6 | variables.rs:100:9:100:10 | x6 | variables.rs:103:11:103:12 | x6 | +| variables.rs:101:9:101:10 | y1 | variables.rs:101:9:101:10 | y1 | variables.rs:113:15:113:16 | y1 | +| variables.rs:105:14:105:15 | y1 | variables.rs:105:14:105:15 | y1 | variables.rs:108:23:108:24 | y1 | +| variables.rs:117:9:117:15 | numbers | variables.rs:117:9:117:15 | numbers | variables.rs:131:11:131:17 | numbers | +| variables.rs:121:13:121:17 | first | variables.rs:121:13:121:17 | first | variables.rs:125:23:125:27 | first | +| variables.rs:122:13:122:17 | third | variables.rs:122:13:122:17 | third | variables.rs:126:23:126:27 | third | +| variables.rs:123:13:123:17 | fifth | variables.rs:123:13:123:17 | fifth | variables.rs:127:23:127:27 | fifth | +| variables.rs:133:13:133:17 | first | variables.rs:133:13:133:17 | first | variables.rs:137:23:137:27 | first | +| variables.rs:135:13:135:16 | last | variables.rs:135:13:135:16 | last | variables.rs:138:23:138:26 | last | +| variables.rs:144:9:144:10 | p2 | variables.rs:144:9:144:10 | p2 | variables.rs:146:11:146:12 | p2 | +| variables.rs:148:16:148:17 | x7 | variables.rs:148:16:148:17 | x7 | variables.rs:149:24:149:25 | x7 | +| variables.rs:158:9:158:11 | msg | variables.rs:158:9:158:11 | msg | variables.rs:160:11:160:13 | msg | +| variables.rs:162:17:162:35 | [match(true)] id_variable | variables.rs:162:17:162:27 | id_variable | variables.rs:163:24:163:34 | id_variable | +| variables.rs:167:26:167:27 | id | variables.rs:167:26:167:27 | id | variables.rs:168:23:168:24 | id | +| variables.rs:178:9:178:14 | either | variables.rs:178:9:178:14 | either | variables.rs:179:11:179:16 | either | +| variables.rs:180:9:180:44 | [match(true)] phi | variables.rs:180:9:180:44 | a3 | variables.rs:181:26:181:27 | a3 | +| variables.rs:192:9:192:10 | tv | variables.rs:192:9:192:10 | tv | variables.rs:201:11:201:12 | tv | +| variables.rs:194:9:194:81 | [match(true)] phi | variables.rs:194:9:194:81 | a4 | variables.rs:195:26:195:27 | a4 | +| variables.rs:198:9:198:83 | [match(true)] phi | variables.rs:198:9:198:83 | a5 | variables.rs:199:26:199:27 | a5 | +| variables.rs:202:9:202:83 | [match(true)] phi | variables.rs:202:9:202:83 | a6 | variables.rs:203:26:203:27 | a6 | +| variables.rs:208:9:208:14 | either | variables.rs:208:9:208:14 | either | variables.rs:209:11:209:16 | either | +| variables.rs:210:9:210:44 | [match(true)] phi | variables.rs:210:9:210:44 | a7 | variables.rs:211:16:211:17 | a7 | +| variables.rs:210:9:210:44 | [match(true)] phi | variables.rs:210:9:210:44 | a7 | variables.rs:212:26:212:27 | a7 | +| variables.rs:218:9:218:14 | either | variables.rs:218:9:218:14 | either | variables.rs:220:11:220:16 | either | +| variables.rs:221:9:222:52 | [match(true)] e | variables.rs:221:13:221:13 | e | variables.rs:226:15:226:15 | e | +| variables.rs:222:14:222:51 | [match(true)] phi | variables.rs:222:14:222:51 | a11 | variables.rs:224:23:224:25 | a11 | +| variables.rs:225:33:225:35 | a12 | variables.rs:225:33:225:35 | a12 | variables.rs:227:28:227:30 | a12 | +| variables.rs:242:9:242:10 | fv | variables.rs:242:9:242:10 | fv | variables.rs:243:11:243:12 | fv | +| variables.rs:244:9:244:109 | [match(true)] phi | variables.rs:244:9:244:109 | a13 | variables.rs:245:26:245:28 | a13 | +| variables.rs:250:5:250:6 | a8 | variables.rs:250:5:250:6 | a8 | variables.rs:255:15:255:16 | a8 | +| variables.rs:252:9:252:10 | b3 | variables.rs:252:9:252:10 | b3 | variables.rs:256:15:256:16 | b3 | +| variables.rs:253:9:253:10 | c1 | variables.rs:253:9:253:10 | c1 | variables.rs:257:15:257:16 | c1 | +| variables.rs:261:6:261:41 | [match(true)] phi | variables.rs:261:6:261:41 | a9 | variables.rs:263:15:263:16 | a9 | +| variables.rs:268:9:268:15 | a10 | variables.rs:268:13:268:15 | a10 | variables.rs:272:15:272:17 | a10 | +| variables.rs:269:9:269:14 | b4 | variables.rs:269:13:269:14 | b4 | variables.rs:273:15:273:16 | b4 | +| variables.rs:270:9:270:14 | c2 | variables.rs:270:13:270:14 | c2 | variables.rs:274:15:274:16 | c2 | +| variables.rs:277:9:277:10 | c2 | variables.rs:270:13:270:14 | c2 | variables.rs:287:15:287:16 | c2 | +| variables.rs:278:9:278:10 | b4 | variables.rs:269:13:269:14 | b4 | variables.rs:300:15:300:16 | b4 | +| variables.rs:279:9:279:11 | a10 | variables.rs:268:13:268:15 | a10 | variables.rs:299:15:299:17 | a10 | +| variables.rs:291:13:291:15 | a10 | variables.rs:291:13:291:15 | a10 | variables.rs:294:23:294:25 | a10 | +| variables.rs:292:13:292:14 | b4 | variables.rs:292:13:292:14 | b4 | variables.rs:295:23:295:24 | b4 | +| variables.rs:304:9:304:23 | example_closure | variables.rs:304:9:304:23 | example_closure | variables.rs:308:9:308:23 | example_closure | +| variables.rs:305:10:305:10 | x | variables.rs:305:10:305:10 | x | variables.rs:306:9:306:9 | x | +| variables.rs:307:9:307:10 | n1 | variables.rs:307:9:307:10 | n1 | variables.rs:309:15:309:16 | n1 | +| variables.rs:312:9:312:26 | immutable_variable | variables.rs:312:9:312:26 | immutable_variable | variables.rs:316:9:316:26 | immutable_variable | +| variables.rs:313:10:313:10 | x | variables.rs:313:10:313:10 | x | variables.rs:314:9:314:9 | x | +| variables.rs:315:9:315:10 | n2 | variables.rs:315:9:315:10 | n2 | variables.rs:317:15:317:16 | n2 | +| variables.rs:321:9:321:9 | v | variables.rs:321:9:321:9 | v | variables.rs:324:12:324:12 | v | +| variables.rs:323:9:323:12 | text | variables.rs:323:9:323:12 | text | variables.rs:325:19:325:22 | text | +| variables.rs:339:9:339:13 | ref_i | variables.rs:339:9:339:13 | ref_i | variables.rs:341:6:341:10 | ref_i | +| variables.rs:345:17:345:17 | x | variables.rs:345:17:345:17 | x | variables.rs:349:12:349:12 | x | +| variables.rs:352:22:352:22 | x | variables.rs:352:22:352:22 | x | variables.rs:357:9:357:9 | x | +| variables.rs:352:39:352:39 | y | variables.rs:352:39:352:39 | y | variables.rs:356:6:356:6 | y | +| variables.rs:362:9:362:9 | y | variables.rs:362:9:362:9 | y | variables.rs:364:6:364:6 | y | +| variables.rs:369:9:369:9 | w | variables.rs:369:9:369:9 | w | variables.rs:375:7:375:7 | w | +| variables.rs:382:9:382:9 | y | variables.rs:382:9:382:9 | y | variables.rs:384:6:384:6 | y | +| variables.rs:390:9:390:15 | cap | variables.rs:390:13:390:15 | cap | variables.rs:394:5:394:7 | cap | +| variables.rs:399:9:399:9 | x | variables.rs:399:9:399:9 | x | variables.rs:404:15:404:15 | x | +| variables.rs:400:9:400:15 | cap | variables.rs:400:13:400:15 | cap | variables.rs:403:5:403:7 | cap | +| variables.rs:400:19:402:5 | x | variables.rs:399:9:399:9 | x | variables.rs:401:19:401:19 | x | +| variables.rs:407:8:407:8 | b | variables.rs:407:8:407:8 | b | variables.rs:411:8:411:8 | b | +| variables.rs:408:9:408:13 | x | variables.rs:408:13:408:13 | x | variables.rs:410:15:410:15 | x | +| variables.rs:411:5:419:5 | phi | variables.rs:408:13:408:13 | x | variables.rs:420:15:420:15 | x | +| variables.rs:412:9:412:9 | x | variables.rs:408:13:408:13 | x | variables.rs:414:19:414:19 | x | +| variables.rs:416:9:416:9 | x | variables.rs:408:13:408:13 | x | variables.rs:418:19:418:19 | x | +| variables.rs:423:13:423:14 | b1 | variables.rs:423:13:423:14 | b1 | variables.rs:425:8:425:9 | b1 | +| variables.rs:423:24:423:25 | b2 | variables.rs:423:24:423:25 | b2 | variables.rs:431:8:431:9 | b2 | +| variables.rs:424:9:424:9 | x | variables.rs:424:9:424:9 | x | variables.rs:432:19:432:19 | x | +| variables.rs:424:9:424:9 | x | variables.rs:424:9:424:9 | x | variables.rs:434:19:434:19 | x | +| variables.rs:458:14:458:14 | x | variables.rs:458:14:458:14 | x | variables.rs:459:16:459:16 | x | +| variables.rs:463:9:463:9 | x | variables.rs:463:9:463:9 | x | variables.rs:465:15:465:15 | x | +adjacentReads +| variables.rs:24:9:24:10 | x3 | variables.rs:24:9:24:10 | x3 | variables.rs:25:15:25:16 | x3 | variables.rs:27:9:27:10 | x3 | +| variables.rs:32:9:32:10 | x4 | variables.rs:32:9:32:10 | x4 | variables.rs:33:15:33:16 | x4 | variables.rs:38:15:38:16 | x4 | +| variables.rs:91:9:91:10 | s1 | variables.rs:91:9:91:10 | s1 | variables.rs:94:11:94:12 | s1 | variables.rs:94:11:94:12 | s1 | +| variables.rs:117:9:117:15 | numbers | variables.rs:117:9:117:15 | numbers | variables.rs:119:11:119:17 | numbers | variables.rs:131:11:131:17 | numbers | +| variables.rs:192:9:192:10 | tv | variables.rs:192:9:192:10 | tv | variables.rs:193:11:193:12 | tv | variables.rs:197:11:197:12 | tv | +| variables.rs:192:9:192:10 | tv | variables.rs:192:9:192:10 | tv | variables.rs:197:11:197:12 | tv | variables.rs:201:11:201:12 | tv | +| variables.rs:210:9:210:44 | [match(true)] phi | variables.rs:210:9:210:44 | a7 | variables.rs:211:16:211:17 | a7 | variables.rs:212:26:212:27 | a7 | +| variables.rs:277:9:277:10 | c2 | variables.rs:270:13:270:14 | c2 | variables.rs:283:9:283:10 | c2 | variables.rs:287:15:287:16 | c2 | +| variables.rs:278:9:278:10 | b4 | variables.rs:269:13:269:14 | b4 | variables.rs:282:9:282:10 | b4 | variables.rs:286:15:286:16 | b4 | +| variables.rs:278:9:278:10 | b4 | variables.rs:269:13:269:14 | b4 | variables.rs:286:15:286:16 | b4 | variables.rs:300:15:300:16 | b4 | +| variables.rs:279:9:279:11 | a10 | variables.rs:268:13:268:15 | a10 | variables.rs:281:9:281:11 | a10 | variables.rs:285:15:285:17 | a10 | +| variables.rs:279:9:279:11 | a10 | variables.rs:268:13:268:15 | a10 | variables.rs:285:15:285:17 | a10 | variables.rs:299:15:299:17 | a10 | +| variables.rs:345:17:345:17 | x | variables.rs:345:17:345:17 | x | variables.rs:346:6:346:6 | x | variables.rs:347:10:347:10 | x | +| variables.rs:345:17:345:17 | x | variables.rs:345:17:345:17 | x | variables.rs:347:10:347:10 | x | variables.rs:348:10:348:10 | x | +| variables.rs:345:17:345:17 | x | variables.rs:345:17:345:17 | x | variables.rs:348:10:348:10 | x | variables.rs:349:12:349:12 | x | +| variables.rs:352:22:352:22 | x | variables.rs:352:22:352:22 | x | variables.rs:353:6:353:6 | x | variables.rs:354:10:354:10 | x | +| variables.rs:352:22:352:22 | x | variables.rs:352:22:352:22 | x | variables.rs:354:10:354:10 | x | variables.rs:355:10:355:10 | x | +| variables.rs:352:22:352:22 | x | variables.rs:352:22:352:22 | x | variables.rs:355:10:355:10 | x | variables.rs:357:9:357:9 | x | +| variables.rs:369:9:369:9 | w | variables.rs:369:9:369:9 | w | variables.rs:373:9:373:9 | w | variables.rs:375:7:375:7 | w | +| variables.rs:408:9:408:13 | x | variables.rs:408:13:408:13 | x | variables.rs:409:15:409:15 | x | variables.rs:410:15:410:15 | x | +| variables.rs:412:9:412:9 | x | variables.rs:408:13:408:13 | x | variables.rs:413:19:413:19 | x | variables.rs:414:19:414:19 | x | +| variables.rs:416:9:416:9 | x | variables.rs:408:13:408:13 | x | variables.rs:417:19:417:19 | x | variables.rs:418:19:418:19 | x | +| variables.rs:424:9:424:9 | x | variables.rs:424:9:424:9 | x | variables.rs:426:19:426:19 | x | variables.rs:432:19:432:19 | x | +| variables.rs:424:9:424:9 | x | variables.rs:424:9:424:9 | x | variables.rs:426:19:426:19 | x | variables.rs:434:19:434:19 | x | +| variables.rs:424:9:424:9 | x | variables.rs:424:9:424:9 | x | variables.rs:428:19:428:19 | x | variables.rs:432:19:432:19 | x | +| variables.rs:424:9:424:9 | x | variables.rs:424:9:424:9 | x | variables.rs:428:19:428:19 | x | variables.rs:434:19:434:19 | x | +phi +| variables.rs:180:9:180:44 | [match(true)] phi | variables.rs:180:9:180:44 | a3 | variables.rs:180:22:180:23 | a3 | +| variables.rs:180:9:180:44 | [match(true)] phi | variables.rs:180:9:180:44 | a3 | variables.rs:180:42:180:43 | a3 | +| variables.rs:194:9:194:81 | [match(true)] phi | variables.rs:194:9:194:81 | a4 | variables.rs:194:28:194:29 | a4 | +| variables.rs:194:9:194:81 | [match(true)] phi | variables.rs:194:9:194:81 | a4 | variables.rs:194:54:194:55 | a4 | +| variables.rs:194:9:194:81 | [match(true)] phi | variables.rs:194:9:194:81 | a4 | variables.rs:194:79:194:80 | a4 | +| variables.rs:198:9:198:83 | [match(true)] phi | variables.rs:198:9:198:83 | a5 | variables.rs:198:10:198:57 | [match(true)] phi | +| variables.rs:198:9:198:83 | [match(true)] phi | variables.rs:198:9:198:83 | a5 | variables.rs:198:81:198:82 | a5 | +| variables.rs:198:10:198:57 | [match(true)] phi | variables.rs:198:9:198:83 | a5 | variables.rs:198:29:198:30 | a5 | +| variables.rs:198:10:198:57 | [match(true)] phi | variables.rs:198:9:198:83 | a5 | variables.rs:198:55:198:56 | a5 | +| variables.rs:202:9:202:83 | [match(true)] phi | variables.rs:202:9:202:83 | a6 | variables.rs:202:28:202:29 | a6 | +| variables.rs:202:9:202:83 | [match(true)] phi | variables.rs:202:9:202:83 | a6 | variables.rs:202:35:202:82 | [match(true)] phi | +| variables.rs:202:35:202:82 | [match(true)] phi | variables.rs:202:9:202:83 | a6 | variables.rs:202:55:202:56 | a6 | +| variables.rs:202:35:202:82 | [match(true)] phi | variables.rs:202:9:202:83 | a6 | variables.rs:202:80:202:81 | a6 | +| variables.rs:210:9:210:44 | [match(true)] phi | variables.rs:210:9:210:44 | a7 | variables.rs:210:22:210:23 | a7 | +| variables.rs:210:9:210:44 | [match(true)] phi | variables.rs:210:9:210:44 | a7 | variables.rs:210:42:210:43 | a7 | +| variables.rs:222:14:222:51 | [match(true)] phi | variables.rs:222:14:222:51 | a11 | variables.rs:222:27:222:29 | a11 | +| variables.rs:222:14:222:51 | [match(true)] phi | variables.rs:222:14:222:51 | a11 | variables.rs:222:48:222:50 | a11 | +| variables.rs:244:9:244:109 | [match(true)] phi | variables.rs:244:9:244:109 | a13 | variables.rs:244:27:244:29 | a13 | +| variables.rs:244:9:244:109 | [match(true)] phi | variables.rs:244:9:244:109 | a13 | variables.rs:244:35:244:82 | [match(true)] phi | +| variables.rs:244:9:244:109 | [match(true)] phi | variables.rs:244:9:244:109 | a13 | variables.rs:244:106:244:108 | a13 | +| variables.rs:244:35:244:82 | [match(true)] phi | variables.rs:244:9:244:109 | a13 | variables.rs:244:54:244:56 | a13 | +| variables.rs:244:35:244:82 | [match(true)] phi | variables.rs:244:9:244:109 | a13 | variables.rs:244:79:244:81 | a13 | +| variables.rs:261:6:261:41 | [match(true)] phi | variables.rs:261:6:261:41 | a9 | variables.rs:261:19:261:20 | a9 | +| variables.rs:261:6:261:41 | [match(true)] phi | variables.rs:261:6:261:41 | a9 | variables.rs:261:39:261:40 | a9 | +| variables.rs:411:5:419:5 | phi | variables.rs:408:13:408:13 | x | variables.rs:412:9:412:9 | x | +| variables.rs:411:5:419:5 | phi | variables.rs:408:13:408:13 | x | variables.rs:416:9:416:9 | x | +phiReadNode +| variables.rs:93:11:94:12 | SSA phi read(s1) | variables.rs:91:9:91:10 | s1 | +| variables.rs:425:5:429:5 | SSA phi read(x) | variables.rs:424:9:424:9 | x | +phiReadNodeRead +| variables.rs:93:11:94:12 | SSA phi read(s1) | variables.rs:91:9:91:10 | s1 | variables.rs:94:11:94:12 | s1 | +| variables.rs:425:5:429:5 | SSA phi read(x) | variables.rs:424:9:424:9 | x | variables.rs:432:19:432:19 | x | +| variables.rs:425:5:429:5 | SSA phi read(x) | variables.rs:424:9:424:9 | x | variables.rs:434:19:434:19 | x | +phiReadInput +| variables.rs:93:11:94:12 | SSA phi read(s1) | variables.rs:91:9:91:10 | s1 | +| variables.rs:93:11:94:12 | SSA phi read(s1) | variables.rs:93:11:94:12 | SSA phi read(s1) | +| variables.rs:425:5:429:5 | SSA phi read(x) | variables.rs:424:9:424:9 | x | +ultimateDef +| variables.rs:180:9:180:44 | [match(true)] phi | variables.rs:180:22:180:23 | a3 | +| variables.rs:180:9:180:44 | [match(true)] phi | variables.rs:180:42:180:43 | a3 | +| variables.rs:194:9:194:81 | [match(true)] phi | variables.rs:194:28:194:29 | a4 | +| variables.rs:194:9:194:81 | [match(true)] phi | variables.rs:194:54:194:55 | a4 | +| variables.rs:194:9:194:81 | [match(true)] phi | variables.rs:194:79:194:80 | a4 | +| variables.rs:198:9:198:83 | [match(true)] phi | variables.rs:198:29:198:30 | a5 | +| variables.rs:198:9:198:83 | [match(true)] phi | variables.rs:198:55:198:56 | a5 | +| variables.rs:198:9:198:83 | [match(true)] phi | variables.rs:198:81:198:82 | a5 | +| variables.rs:198:10:198:57 | [match(true)] phi | variables.rs:198:29:198:30 | a5 | +| variables.rs:198:10:198:57 | [match(true)] phi | variables.rs:198:55:198:56 | a5 | +| variables.rs:202:9:202:83 | [match(true)] phi | variables.rs:202:28:202:29 | a6 | +| variables.rs:202:9:202:83 | [match(true)] phi | variables.rs:202:55:202:56 | a6 | +| variables.rs:202:9:202:83 | [match(true)] phi | variables.rs:202:80:202:81 | a6 | +| variables.rs:202:35:202:82 | [match(true)] phi | variables.rs:202:55:202:56 | a6 | +| variables.rs:202:35:202:82 | [match(true)] phi | variables.rs:202:80:202:81 | a6 | +| variables.rs:210:9:210:44 | [match(true)] phi | variables.rs:210:22:210:23 | a7 | +| variables.rs:210:9:210:44 | [match(true)] phi | variables.rs:210:42:210:43 | a7 | +| variables.rs:222:14:222:51 | [match(true)] phi | variables.rs:222:27:222:29 | a11 | +| variables.rs:222:14:222:51 | [match(true)] phi | variables.rs:222:48:222:50 | a11 | +| variables.rs:244:9:244:109 | [match(true)] phi | variables.rs:244:27:244:29 | a13 | +| variables.rs:244:9:244:109 | [match(true)] phi | variables.rs:244:54:244:56 | a13 | +| variables.rs:244:9:244:109 | [match(true)] phi | variables.rs:244:79:244:81 | a13 | +| variables.rs:244:9:244:109 | [match(true)] phi | variables.rs:244:106:244:108 | a13 | +| variables.rs:244:35:244:82 | [match(true)] phi | variables.rs:244:54:244:56 | a13 | +| variables.rs:244:35:244:82 | [match(true)] phi | variables.rs:244:79:244:81 | a13 | +| variables.rs:261:6:261:41 | [match(true)] phi | variables.rs:261:19:261:20 | a9 | +| variables.rs:261:6:261:41 | [match(true)] phi | variables.rs:261:39:261:40 | a9 | +| variables.rs:411:5:419:5 | phi | variables.rs:412:9:412:9 | x | +| variables.rs:411:5:419:5 | phi | variables.rs:416:9:416:9 | x | +assigns +| variables.rs:19:5:19:6 | x2 | variables.rs:19:10:19:10 | 5 | +| variables.rs:412:9:412:9 | x | variables.rs:412:13:412:13 | 2 | +| variables.rs:416:9:416:9 | x | variables.rs:416:13:416:13 | 3 | diff --git a/rust/ql/test/library-tests/variables/Ssa.ql b/rust/ql/test/library-tests/variables/Ssa.ql new file mode 100644 index 000000000000..750aa8f666b4 --- /dev/null +++ b/rust/ql/test/library-tests/variables/Ssa.ql @@ -0,0 +1,52 @@ +import rust +import codeql.rust.controlflow.BasicBlocks +import codeql.rust.controlflow.ControlFlowGraph +import codeql.rust.dataflow.Ssa +import codeql.rust.dataflow.internal.SsaImpl +import ExposedForTestingOnly + +query predicate nonSsaVariable(Variable v) { not v instanceof Ssa::Variable } + +query predicate definition(Ssa::Definition def, Variable v) { def.getSourceVariable() = v } + +query predicate read(Ssa::Definition def, Variable v, CfgNode read) { + def.getSourceVariable() = v and read = def.getARead() +} + +query predicate firstRead(Ssa::Definition def, Variable v, CfgNode read) { + def.getSourceVariable() = v and read = def.getAFirstRead() +} + +query predicate lastRead(Ssa::Definition def, Variable v, CfgNode read) { + def.getSourceVariable() = v and read = def.getALastRead() +} + +query predicate adjacentReads(Ssa::Definition def, Variable v, CfgNode read1, CfgNode read2) { + def.getSourceVariable() = v and + def.hasAdjacentReads(read1, read2) +} + +query predicate phi(Ssa::PhiDefinition phi, Variable v, Ssa::Definition input) { + phi.getSourceVariable() = v and input = phi.getAnInput() +} + +query predicate phiReadNode(PhiReadNode phi, Variable v) { phi.getSourceVariable() = v } + +query predicate phiReadNodeRead(PhiReadNode phi, Variable v, CfgNode read) { + phi.getSourceVariable() = v and + exists(BasicBlock bb, int i | + ssaDefReachesReadExt(v, phi, bb, i) and + read = bb.getNode(i) + ) +} + +query predicate phiReadInput(PhiReadNode phi, DefinitionExt inp) { + phiHasInputFromBlockExt(phi, inp, _) +} + +query predicate ultimateDef(Ssa::Definition def, Definition ult) { + ult = def.getAnUltimateDefinition() and + ult != def +} + +query predicate assigns(Ssa::WriteDefinition def, CfgNode value) { def.assigns(value) } diff --git a/rust/ql/test/library-tests/variables/variables.expected b/rust/ql/test/library-tests/variables/variables.expected index c752e862c818..aad2c9e40f9e 100644 --- a/rust/ql/test/library-tests/variables/variables.expected +++ b/rust/ql/test/library-tests/variables/variables.expected @@ -1,6 +1,4 @@ testFailures -| variables.rs:452:5:452:5 | a | Unexpected result: write_access=a | -| variables.rs:452:16:452:33 | Comment | Missing result:read_access=a | failures variable | variables.rs:3:14:3:14 | s | @@ -247,7 +245,6 @@ variableWriteAccess | variables.rs:279:9:279:11 | a10 | variables.rs:268:13:268:15 | a10 | | variables.rs:412:9:412:9 | x | variables.rs:408:13:408:13 | x | | variables.rs:416:9:416:9 | x | variables.rs:408:13:408:13 | x | -| variables.rs:452:5:452:5 | a | variables.rs:450:13:450:13 | a | | variables.rs:454:5:454:5 | a | variables.rs:450:13:450:13 | a | variableReadAccess | variables.rs:4:20:4:20 | s | variables.rs:3:14:3:14 | s | @@ -371,6 +368,7 @@ variableReadAccess | variables.rs:432:19:432:19 | x | variables.rs:424:9:424:9 | x | | variables.rs:434:19:434:19 | x | variables.rs:424:9:424:9 | x | | variables.rs:451:15:451:15 | a | variables.rs:450:13:450:13 | a | +| variables.rs:452:5:452:5 | a | variables.rs:450:13:450:13 | a | | variables.rs:453:15:453:15 | a | variables.rs:450:13:450:13 | a | | variables.rs:455:15:455:15 | a | variables.rs:450:13:450:13 | a | | variables.rs:459:16:459:16 | x | variables.rs:458:14:458:14 | x | From 1456ec21196fdcbea4cd78b9a98ebf207cd77d90 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Sun, 13 Oct 2024 14:27:51 +0100 Subject: [PATCH 099/217] Fix bad join order in SummarizedParameterNode.gettype Specifically the disjunct for this.getPos() != -1. Running on uber/aresdb, before we had this: 2403 ~1% {3} r6 = JOIN `DataFlowUtil::SummarizedParameterNode.getPos/0#dispred#70a2aab4` WITH `DataFlowPrivate::FlowSummaryNode.getSummarizedCallable/0#dispred#e79ea9be` ON FIRST 1 OUTPUT Lhs.1, Lhs.0, Rhs.1 9149774 ~5% {4} | JOIN WITH `Types::SignatureType.getParameterType/1#dispred#2c11bb7b_102#join_rhs` ON FIRST 1 OUTPUT Lhs.2, Rhs.1, Lhs.1, Rhs.2 923 ~9% {2} | JOIN WITH `Scopes::Callable.getType/0#dispred#55a0e6a2` ON FIRST 2 OUTPUT Lhs.2, Lhs.3 We add a binding pragma to make it not bind on this.getPos() until necessary. After we have this: 2403 ~0% {3} r6 = JOIN `DataFlowUtil::SummarizedParameterNode.getPos/0#dispred#70a2aab4` WITH `DataFlowPrivate::FlowSummaryNode.getSummarizedCallable/0#dispred#e79ea9be` ON FIRST 1 OUTPUT Rhs.1, Lhs.0, Lhs.1 2373 ~0% {3} | JOIN WITH `Scopes::Callable.getType/0#dispred#55a0e6a2` ON FIRST 1 OUTPUT Rhs.1, Lhs.2, Lhs.1 923 ~9% {2} | JOIN WITH `Types::SignatureType.getParameterType/1#dispred#2c11bb7b` ON FIRST 2 OUTPUT Lhs.2, Rhs.2 --- go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll index 0aa517b3fdad..cc353ab64df5 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll @@ -727,7 +727,10 @@ module Public { override string getNodeKind() { result = "external parameter node" } override Type getType() { - result = this.getSummarizedCallable().getType().getParameterType(this.getPos()) + result = + this.getSummarizedCallable() + .getType() + .getParameterType(pragma[only_bind_into](this.getPos())) or this.getPos() = -1 and result = this.getSummarizedCallable().asFunction().(Method).getReceiverType() From 23ee7b955ce4b7b20d93c2d19c9b0d895ddd7dfd Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 14 Oct 2024 11:27:32 +0200 Subject: [PATCH 100/217] Rust: Add CFG tests for question mark operator and scrutinee with return --- .../library-tests/controlflow/Cfg.expected | 273 ++++++++++-------- .../ql/test/library-tests/controlflow/test.rs | 42 ++- 2 files changed, 187 insertions(+), 128 deletions(-) diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 0862f5f3415f..6b8a47953986 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -554,124 +554,155 @@ edges | test.rs:244:13:244:16 | true | test.rs:243:15:245:9 | BlockExpr | | | test.rs:245:16:247:9 | BlockExpr | test.rs:243:9:247:9 | IfExpr | | | test.rs:246:13:246:17 | false | test.rs:245:16:247:9 | BlockExpr | | -| test.rs:251:1:257:1 | enter test_match | test.rs:251:15:251:25 | maybe_digit | | -| test.rs:251:1:257:1 | exit test_match (normal) | test.rs:251:1:257:1 | exit test_match | | -| test.rs:251:15:251:25 | maybe_digit | test.rs:251:15:251:38 | Param | match | -| test.rs:251:15:251:38 | Param | test.rs:252:11:252:21 | maybe_digit | | -| test.rs:251:48:257:1 | BlockExpr | test.rs:251:1:257:1 | exit test_match (normal) | | -| test.rs:252:5:256:5 | MatchExpr | test.rs:251:48:257:1 | BlockExpr | | -| test.rs:252:11:252:21 | maybe_digit | test.rs:253:9:253:23 | TupleStructPat | | -| test.rs:253:9:253:23 | TupleStructPat | test.rs:253:22:253:22 | x | match | -| test.rs:253:9:253:23 | TupleStructPat | test.rs:254:9:254:23 | TupleStructPat | no-match | -| test.rs:253:22:253:22 | x | test.rs:253:28:253:28 | x | match | -| test.rs:253:28:253:28 | x | test.rs:253:32:253:33 | 10 | | -| test.rs:253:28:253:33 | ... < ... | test.rs:253:38:253:38 | x | true | -| test.rs:253:28:253:33 | ... < ... | test.rs:254:9:254:23 | TupleStructPat | false | -| test.rs:253:32:253:33 | 10 | test.rs:253:28:253:33 | ... < ... | | -| test.rs:253:38:253:38 | x | test.rs:253:42:253:42 | 5 | | -| test.rs:253:38:253:42 | ... + ... | test.rs:252:5:256:5 | MatchExpr | | -| test.rs:253:42:253:42 | 5 | test.rs:253:38:253:42 | ... + ... | | -| test.rs:254:9:254:23 | TupleStructPat | test.rs:254:22:254:22 | x | match | -| test.rs:254:9:254:23 | TupleStructPat | test.rs:255:9:255:20 | PathPat | no-match | -| test.rs:254:22:254:22 | x | test.rs:254:28:254:28 | x | match | -| test.rs:254:28:254:28 | x | test.rs:252:5:256:5 | MatchExpr | | -| test.rs:255:9:255:20 | PathPat | test.rs:255:25:255:25 | 5 | match | -| test.rs:255:25:255:25 | 5 | test.rs:252:5:256:5 | MatchExpr | | -| test.rs:260:5:265:5 | enter test_infinite_loop | test.rs:261:9:263:9 | ExprStmt | | -| test.rs:261:9:263:9 | ExprStmt | test.rs:262:13:262:13 | 1 | | -| test.rs:261:14:263:9 | BlockExpr | test.rs:262:13:262:13 | 1 | | -| test.rs:262:13:262:13 | 1 | test.rs:261:14:263:9 | BlockExpr | | -| test.rs:267:5:270:5 | enter test_let_match | test.rs:267:23:267:23 | a | | -| test.rs:267:5:270:5 | exit test_let_match (normal) | test.rs:267:5:270:5 | exit test_let_match | | -| test.rs:267:23:267:23 | a | test.rs:267:23:267:36 | Param | match | -| test.rs:267:23:267:36 | Param | test.rs:268:9:268:49 | LetStmt | | -| test.rs:267:39:270:5 | BlockExpr | test.rs:267:5:270:5 | exit test_let_match (normal) | | -| test.rs:268:9:268:49 | LetStmt | test.rs:268:23:268:23 | a | | -| test.rs:268:13:268:19 | TupleStructPat | test.rs:268:18:268:18 | n | match | -| test.rs:268:13:268:19 | TupleStructPat | test.rs:268:32:268:46 | "Expected some" | no-match | -| test.rs:268:18:268:18 | n | test.rs:269:9:269:9 | n | match | -| test.rs:268:23:268:23 | a | test.rs:268:13:268:19 | TupleStructPat | | -| test.rs:268:32:268:46 | "Expected some" | test.rs:268:30:268:48 | BlockExpr | | -| test.rs:269:9:269:9 | n | test.rs:267:39:270:5 | BlockExpr | | -| test.rs:273:1:278:1 | enter dead_code | test.rs:274:5:276:5 | ExprStmt | | -| test.rs:273:1:278:1 | exit dead_code (normal) | test.rs:273:1:278:1 | exit dead_code | | -| test.rs:274:5:276:5 | ExprStmt | test.rs:274:9:274:12 | true | | -| test.rs:274:9:274:12 | true | test.rs:275:9:275:17 | ExprStmt | true | -| test.rs:275:9:275:16 | ReturnExpr | test.rs:273:1:278:1 | exit dead_code (normal) | return | -| test.rs:275:9:275:17 | ExprStmt | test.rs:275:16:275:16 | 0 | | -| test.rs:275:16:275:16 | 0 | test.rs:275:9:275:16 | ReturnExpr | | -| test.rs:280:1:293:1 | enter labelled_block1 | test.rs:281:5:292:6 | LetStmt | | -| test.rs:280:1:293:1 | exit labelled_block1 (normal) | test.rs:280:1:293:1 | exit labelled_block1 | | -| test.rs:280:29:293:1 | BlockExpr | test.rs:280:1:293:1 | exit labelled_block1 (normal) | | -| test.rs:281:5:292:6 | LetStmt | test.rs:282:9:282:19 | ExprStmt | | -| test.rs:281:9:281:14 | result | test.rs:280:29:293:1 | BlockExpr | match | -| test.rs:281:18:292:5 | BlockExpr | test.rs:281:9:281:14 | result | | -| test.rs:282:9:282:16 | PathExpr | test.rs:282:9:282:18 | CallExpr | | -| test.rs:282:9:282:18 | CallExpr | test.rs:283:9:285:9 | ExprStmt | | -| test.rs:282:9:282:19 | ExprStmt | test.rs:282:9:282:16 | PathExpr | | -| test.rs:283:9:285:9 | ExprStmt | test.rs:283:12:283:28 | PathExpr | | -| test.rs:283:9:285:9 | IfExpr | test.rs:286:9:286:24 | ExprStmt | | -| test.rs:283:12:283:28 | PathExpr | test.rs:283:12:283:30 | CallExpr | | -| test.rs:283:12:283:30 | CallExpr | test.rs:283:9:285:9 | IfExpr | false | -| test.rs:283:12:283:30 | CallExpr | test.rs:284:13:284:27 | ExprStmt | true | -| test.rs:284:13:284:26 | BreakExpr | test.rs:281:18:292:5 | BlockExpr | break | -| test.rs:284:13:284:27 | ExprStmt | test.rs:284:26:284:26 | 1 | | -| test.rs:284:26:284:26 | 1 | test.rs:284:13:284:26 | BreakExpr | | -| test.rs:286:9:286:21 | PathExpr | test.rs:286:9:286:23 | CallExpr | | -| test.rs:286:9:286:23 | CallExpr | test.rs:287:9:289:9 | ExprStmt | | -| test.rs:286:9:286:24 | ExprStmt | test.rs:286:9:286:21 | PathExpr | | -| test.rs:287:9:289:9 | ExprStmt | test.rs:287:12:287:28 | PathExpr | | -| test.rs:287:9:289:9 | IfExpr | test.rs:290:9:290:24 | ExprStmt | | -| test.rs:287:12:287:28 | PathExpr | test.rs:287:12:287:30 | CallExpr | | -| test.rs:287:12:287:30 | CallExpr | test.rs:287:9:289:9 | IfExpr | false | -| test.rs:287:12:287:30 | CallExpr | test.rs:288:13:288:27 | ExprStmt | true | -| test.rs:288:13:288:26 | BreakExpr | test.rs:281:18:292:5 | BlockExpr | break | -| test.rs:288:13:288:27 | ExprStmt | test.rs:288:26:288:26 | 2 | | -| test.rs:288:26:288:26 | 2 | test.rs:288:13:288:26 | BreakExpr | | -| test.rs:290:9:290:21 | PathExpr | test.rs:290:9:290:23 | CallExpr | | -| test.rs:290:9:290:23 | CallExpr | test.rs:291:9:291:9 | 3 | | -| test.rs:290:9:290:24 | ExprStmt | test.rs:290:9:290:21 | PathExpr | | -| test.rs:291:9:291:9 | 3 | test.rs:281:18:292:5 | BlockExpr | | -| test.rs:295:1:303:1 | enter labelled_block2 | test.rs:296:5:302:6 | LetStmt | | -| test.rs:295:1:303:1 | exit labelled_block2 (normal) | test.rs:295:1:303:1 | exit labelled_block2 | | -| test.rs:295:29:303:1 | BlockExpr | test.rs:295:1:303:1 | exit labelled_block2 (normal) | | -| test.rs:296:5:302:6 | LetStmt | test.rs:297:9:297:34 | LetStmt | | -| test.rs:296:9:296:14 | result | test.rs:295:29:303:1 | BlockExpr | match | -| test.rs:296:18:302:5 | BlockExpr | test.rs:296:9:296:14 | result | | -| test.rs:297:9:297:34 | LetStmt | test.rs:297:30:297:33 | PathExpr | | -| test.rs:297:13:297:13 | x | test.rs:298:9:300:10 | LetStmt | match | -| test.rs:297:30:297:33 | PathExpr | test.rs:297:13:297:13 | x | | -| test.rs:298:9:300:10 | LetStmt | test.rs:298:23:298:23 | x | | -| test.rs:298:13:298:19 | TupleStructPat | test.rs:298:18:298:18 | y | match | -| test.rs:298:13:298:19 | TupleStructPat | test.rs:299:13:299:27 | ExprStmt | no-match | -| test.rs:298:18:298:18 | y | test.rs:301:9:301:9 | x | match | -| test.rs:298:23:298:23 | x | test.rs:298:13:298:19 | TupleStructPat | | -| test.rs:299:13:299:26 | BreakExpr | test.rs:296:18:302:5 | BlockExpr | break | -| test.rs:299:13:299:27 | ExprStmt | test.rs:299:26:299:26 | 1 | | -| test.rs:299:26:299:26 | 1 | test.rs:299:13:299:26 | BreakExpr | | -| test.rs:301:9:301:9 | x | test.rs:296:18:302:5 | BlockExpr | | -| test.rs:305:1:311:1 | enter test_nested_function | test.rs:306:5:306:18 | LetStmt | | -| test.rs:305:1:311:1 | exit test_nested_function (normal) | test.rs:305:1:311:1 | exit test_nested_function | | -| test.rs:305:27:311:1 | BlockExpr | test.rs:305:1:311:1 | exit test_nested_function (normal) | | -| test.rs:306:5:306:18 | LetStmt | test.rs:306:17:306:17 | 0 | | -| test.rs:306:9:306:13 | x | test.rs:307:5:309:5 | nested | match | -| test.rs:306:17:306:17 | 0 | test.rs:306:9:306:13 | x | | -| test.rs:307:5:309:5 | enter nested | test.rs:307:15:307:15 | x | | -| test.rs:307:5:309:5 | exit nested (normal) | test.rs:307:5:309:5 | exit nested | | -| test.rs:307:5:309:5 | nested | test.rs:310:5:310:19 | ExprStmt | | -| test.rs:307:15:307:15 | x | test.rs:307:15:307:26 | Param | match | -| test.rs:307:15:307:26 | Param | test.rs:308:9:308:16 | ExprStmt | | -| test.rs:307:29:309:5 | BlockExpr | test.rs:307:5:309:5 | exit nested (normal) | | -| test.rs:308:9:308:10 | * ... | test.rs:308:15:308:15 | 1 | | -| test.rs:308:9:308:15 | ... += ... | test.rs:307:29:309:5 | BlockExpr | | -| test.rs:308:9:308:16 | ExprStmt | test.rs:308:10:308:10 | x | | -| test.rs:308:10:308:10 | x | test.rs:308:9:308:10 | * ... | | -| test.rs:308:15:308:15 | 1 | test.rs:308:9:308:15 | ... += ... | | -| test.rs:310:5:310:10 | PathExpr | test.rs:310:17:310:17 | x | | -| test.rs:310:5:310:18 | CallExpr | test.rs:305:27:311:1 | BlockExpr | | -| test.rs:310:5:310:19 | ExprStmt | test.rs:310:5:310:10 | PathExpr | | -| test.rs:310:12:310:17 | RefExpr | test.rs:310:5:310:18 | CallExpr | | -| test.rs:310:17:310:17 | x | test.rs:310:12:310:17 | RefExpr | | +| test.rs:253:5:255:5 | enter test_question_mark_operator_1 | test.rs:253:38:253:38 | s | | +| test.rs:253:38:253:38 | s | test.rs:253:38:253:44 | Param | match | +| test.rs:257:5:262:5 | enter test_question_mark_operator_2 | test.rs:257:38:257:38 | b | | +| test.rs:257:38:257:38 | b | test.rs:257:38:257:52 | Param | match | +| test.rs:267:5:273:5 | enter test_match | test.rs:267:19:267:29 | maybe_digit | | +| test.rs:267:5:273:5 | exit test_match (normal) | test.rs:267:5:273:5 | exit test_match | | +| test.rs:267:19:267:29 | maybe_digit | test.rs:267:19:267:42 | Param | match | +| test.rs:267:19:267:42 | Param | test.rs:268:15:268:25 | maybe_digit | | +| test.rs:267:52:273:5 | BlockExpr | test.rs:267:5:273:5 | exit test_match (normal) | | +| test.rs:268:9:272:9 | MatchExpr | test.rs:267:52:273:5 | BlockExpr | | +| test.rs:268:15:268:25 | maybe_digit | test.rs:269:13:269:27 | TupleStructPat | | +| test.rs:269:13:269:27 | TupleStructPat | test.rs:269:26:269:26 | x | match | +| test.rs:269:13:269:27 | TupleStructPat | test.rs:270:13:270:27 | TupleStructPat | no-match | +| test.rs:269:26:269:26 | x | test.rs:269:32:269:32 | x | match | +| test.rs:269:32:269:32 | x | test.rs:269:36:269:37 | 10 | | +| test.rs:269:32:269:37 | ... < ... | test.rs:269:42:269:42 | x | true | +| test.rs:269:32:269:37 | ... < ... | test.rs:270:13:270:27 | TupleStructPat | false | +| test.rs:269:36:269:37 | 10 | test.rs:269:32:269:37 | ... < ... | | +| test.rs:269:42:269:42 | x | test.rs:269:46:269:46 | 5 | | +| test.rs:269:42:269:46 | ... + ... | test.rs:268:9:272:9 | MatchExpr | | +| test.rs:269:46:269:46 | 5 | test.rs:269:42:269:46 | ... + ... | | +| test.rs:270:13:270:27 | TupleStructPat | test.rs:270:26:270:26 | x | match | +| test.rs:270:13:270:27 | TupleStructPat | test.rs:271:13:271:24 | PathPat | no-match | +| test.rs:270:26:270:26 | x | test.rs:270:32:270:32 | x | match | +| test.rs:270:32:270:32 | x | test.rs:268:9:272:9 | MatchExpr | | +| test.rs:271:13:271:24 | PathPat | test.rs:271:29:271:29 | 5 | match | +| test.rs:271:29:271:29 | 5 | test.rs:268:9:272:9 | MatchExpr | | +| test.rs:275:5:284:5 | enter test_match_with_return_in_scrutinee | test.rs:275:44:275:54 | maybe_digit | | +| test.rs:275:5:284:5 | exit test_match_with_return_in_scrutinee (normal) | test.rs:275:5:284:5 | exit test_match_with_return_in_scrutinee | | +| test.rs:275:44:275:54 | maybe_digit | test.rs:275:44:275:67 | Param | match | +| test.rs:275:44:275:67 | Param | test.rs:276:19:276:29 | maybe_digit | | +| test.rs:275:77:284:5 | BlockExpr | test.rs:275:5:284:5 | exit test_match_with_return_in_scrutinee (normal) | | +| test.rs:276:9:283:9 | MatchExpr | test.rs:275:77:284:5 | BlockExpr | | +| test.rs:276:16:280:9 | IfExpr | test.rs:281:13:281:27 | TupleStructPat | | +| test.rs:276:19:276:29 | maybe_digit | test.rs:276:34:276:37 | PathExpr | | +| test.rs:276:19:276:40 | ... == ... | test.rs:277:13:277:21 | ExprStmt | true | +| test.rs:276:19:276:40 | ... == ... | test.rs:279:13:279:23 | maybe_digit | false | +| test.rs:276:34:276:37 | PathExpr | test.rs:276:39:276:39 | 3 | | +| test.rs:276:34:276:40 | CallExpr | test.rs:276:19:276:40 | ... == ... | | +| test.rs:276:39:276:39 | 3 | test.rs:276:34:276:40 | CallExpr | | +| test.rs:277:13:277:20 | ReturnExpr | test.rs:275:5:284:5 | exit test_match_with_return_in_scrutinee (normal) | return | +| test.rs:277:13:277:20 | ReturnExpr | test.rs:281:13:281:27 | TupleStructPat | return | +| test.rs:277:13:277:21 | ExprStmt | test.rs:277:20:277:20 | 3 | | +| test.rs:277:20:277:20 | 3 | test.rs:277:13:277:20 | ReturnExpr | | +| test.rs:278:16:280:9 | BlockExpr | test.rs:276:16:280:9 | IfExpr | | +| test.rs:279:13:279:23 | maybe_digit | test.rs:278:16:280:9 | BlockExpr | | +| test.rs:281:13:281:27 | TupleStructPat | test.rs:281:26:281:26 | x | match | +| test.rs:281:13:281:27 | TupleStructPat | test.rs:282:13:282:24 | PathPat | no-match | +| test.rs:281:26:281:26 | x | test.rs:281:32:281:32 | x | match | +| test.rs:281:32:281:32 | x | test.rs:281:36:281:36 | 5 | | +| test.rs:281:32:281:36 | ... + ... | test.rs:276:9:283:9 | MatchExpr | | +| test.rs:281:36:281:36 | 5 | test.rs:281:32:281:36 | ... + ... | | +| test.rs:282:13:282:24 | PathPat | test.rs:282:29:282:29 | 5 | match | +| test.rs:282:29:282:29 | 5 | test.rs:276:9:283:9 | MatchExpr | | +| test.rs:288:5:293:5 | enter test_infinite_loop | test.rs:289:9:291:9 | ExprStmt | | +| test.rs:289:9:291:9 | ExprStmt | test.rs:290:13:290:13 | 1 | | +| test.rs:289:14:291:9 | BlockExpr | test.rs:290:13:290:13 | 1 | | +| test.rs:290:13:290:13 | 1 | test.rs:289:14:291:9 | BlockExpr | | +| test.rs:295:5:298:5 | enter test_let_match | test.rs:295:23:295:23 | a | | +| test.rs:295:5:298:5 | exit test_let_match (normal) | test.rs:295:5:298:5 | exit test_let_match | | +| test.rs:295:23:295:23 | a | test.rs:295:23:295:36 | Param | match | +| test.rs:295:23:295:36 | Param | test.rs:296:9:296:49 | LetStmt | | +| test.rs:295:39:298:5 | BlockExpr | test.rs:295:5:298:5 | exit test_let_match (normal) | | +| test.rs:296:9:296:49 | LetStmt | test.rs:296:23:296:23 | a | | +| test.rs:296:13:296:19 | TupleStructPat | test.rs:296:18:296:18 | n | match | +| test.rs:296:13:296:19 | TupleStructPat | test.rs:296:32:296:46 | "Expected some" | no-match | +| test.rs:296:18:296:18 | n | test.rs:297:9:297:9 | n | match | +| test.rs:296:23:296:23 | a | test.rs:296:13:296:19 | TupleStructPat | | +| test.rs:296:32:296:46 | "Expected some" | test.rs:296:30:296:48 | BlockExpr | | +| test.rs:297:9:297:9 | n | test.rs:295:39:298:5 | BlockExpr | | +| test.rs:301:1:306:1 | enter dead_code | test.rs:302:5:304:5 | ExprStmt | | +| test.rs:301:1:306:1 | exit dead_code (normal) | test.rs:301:1:306:1 | exit dead_code | | +| test.rs:302:5:304:5 | ExprStmt | test.rs:302:9:302:12 | true | | +| test.rs:302:9:302:12 | true | test.rs:303:9:303:17 | ExprStmt | true | +| test.rs:303:9:303:16 | ReturnExpr | test.rs:301:1:306:1 | exit dead_code (normal) | return | +| test.rs:303:9:303:17 | ExprStmt | test.rs:303:16:303:16 | 0 | | +| test.rs:303:16:303:16 | 0 | test.rs:303:9:303:16 | ReturnExpr | | +| test.rs:308:1:321:1 | enter labelled_block1 | test.rs:309:5:320:6 | LetStmt | | +| test.rs:308:1:321:1 | exit labelled_block1 (normal) | test.rs:308:1:321:1 | exit labelled_block1 | | +| test.rs:308:29:321:1 | BlockExpr | test.rs:308:1:321:1 | exit labelled_block1 (normal) | | +| test.rs:309:5:320:6 | LetStmt | test.rs:310:9:310:19 | ExprStmt | | +| test.rs:309:9:309:14 | result | test.rs:308:29:321:1 | BlockExpr | match | +| test.rs:309:18:320:5 | BlockExpr | test.rs:309:9:309:14 | result | | +| test.rs:310:9:310:16 | PathExpr | test.rs:310:9:310:18 | CallExpr | | +| test.rs:310:9:310:18 | CallExpr | test.rs:311:9:313:9 | ExprStmt | | +| test.rs:310:9:310:19 | ExprStmt | test.rs:310:9:310:16 | PathExpr | | +| test.rs:311:9:313:9 | ExprStmt | test.rs:311:12:311:28 | PathExpr | | +| test.rs:311:9:313:9 | IfExpr | test.rs:314:9:314:24 | ExprStmt | | +| test.rs:311:12:311:28 | PathExpr | test.rs:311:12:311:30 | CallExpr | | +| test.rs:311:12:311:30 | CallExpr | test.rs:311:9:313:9 | IfExpr | false | +| test.rs:311:12:311:30 | CallExpr | test.rs:312:13:312:27 | ExprStmt | true | +| test.rs:312:13:312:26 | BreakExpr | test.rs:309:18:320:5 | BlockExpr | break | +| test.rs:312:13:312:27 | ExprStmt | test.rs:312:26:312:26 | 1 | | +| test.rs:312:26:312:26 | 1 | test.rs:312:13:312:26 | BreakExpr | | +| test.rs:314:9:314:21 | PathExpr | test.rs:314:9:314:23 | CallExpr | | +| test.rs:314:9:314:23 | CallExpr | test.rs:315:9:317:9 | ExprStmt | | +| test.rs:314:9:314:24 | ExprStmt | test.rs:314:9:314:21 | PathExpr | | +| test.rs:315:9:317:9 | ExprStmt | test.rs:315:12:315:28 | PathExpr | | +| test.rs:315:9:317:9 | IfExpr | test.rs:318:9:318:24 | ExprStmt | | +| test.rs:315:12:315:28 | PathExpr | test.rs:315:12:315:30 | CallExpr | | +| test.rs:315:12:315:30 | CallExpr | test.rs:315:9:317:9 | IfExpr | false | +| test.rs:315:12:315:30 | CallExpr | test.rs:316:13:316:27 | ExprStmt | true | +| test.rs:316:13:316:26 | BreakExpr | test.rs:309:18:320:5 | BlockExpr | break | +| test.rs:316:13:316:27 | ExprStmt | test.rs:316:26:316:26 | 2 | | +| test.rs:316:26:316:26 | 2 | test.rs:316:13:316:26 | BreakExpr | | +| test.rs:318:9:318:21 | PathExpr | test.rs:318:9:318:23 | CallExpr | | +| test.rs:318:9:318:23 | CallExpr | test.rs:319:9:319:9 | 3 | | +| test.rs:318:9:318:24 | ExprStmt | test.rs:318:9:318:21 | PathExpr | | +| test.rs:319:9:319:9 | 3 | test.rs:309:18:320:5 | BlockExpr | | +| test.rs:323:1:331:1 | enter labelled_block2 | test.rs:324:5:330:6 | LetStmt | | +| test.rs:323:1:331:1 | exit labelled_block2 (normal) | test.rs:323:1:331:1 | exit labelled_block2 | | +| test.rs:323:29:331:1 | BlockExpr | test.rs:323:1:331:1 | exit labelled_block2 (normal) | | +| test.rs:324:5:330:6 | LetStmt | test.rs:325:9:325:34 | LetStmt | | +| test.rs:324:9:324:14 | result | test.rs:323:29:331:1 | BlockExpr | match | +| test.rs:324:18:330:5 | BlockExpr | test.rs:324:9:324:14 | result | | +| test.rs:325:9:325:34 | LetStmt | test.rs:325:30:325:33 | PathExpr | | +| test.rs:325:13:325:13 | x | test.rs:326:9:328:10 | LetStmt | match | +| test.rs:325:30:325:33 | PathExpr | test.rs:325:13:325:13 | x | | +| test.rs:326:9:328:10 | LetStmt | test.rs:326:23:326:23 | x | | +| test.rs:326:13:326:19 | TupleStructPat | test.rs:326:18:326:18 | y | match | +| test.rs:326:13:326:19 | TupleStructPat | test.rs:327:13:327:27 | ExprStmt | no-match | +| test.rs:326:18:326:18 | y | test.rs:329:9:329:9 | x | match | +| test.rs:326:23:326:23 | x | test.rs:326:13:326:19 | TupleStructPat | | +| test.rs:327:13:327:26 | BreakExpr | test.rs:324:18:330:5 | BlockExpr | break | +| test.rs:327:13:327:27 | ExprStmt | test.rs:327:26:327:26 | 1 | | +| test.rs:327:26:327:26 | 1 | test.rs:327:13:327:26 | BreakExpr | | +| test.rs:329:9:329:9 | x | test.rs:324:18:330:5 | BlockExpr | | +| test.rs:333:1:339:1 | enter test_nested_function | test.rs:334:5:334:18 | LetStmt | | +| test.rs:333:1:339:1 | exit test_nested_function (normal) | test.rs:333:1:339:1 | exit test_nested_function | | +| test.rs:333:27:339:1 | BlockExpr | test.rs:333:1:339:1 | exit test_nested_function (normal) | | +| test.rs:334:5:334:18 | LetStmt | test.rs:334:17:334:17 | 0 | | +| test.rs:334:9:334:13 | x | test.rs:335:5:337:5 | nested | match | +| test.rs:334:17:334:17 | 0 | test.rs:334:9:334:13 | x | | +| test.rs:335:5:337:5 | enter nested | test.rs:335:15:335:15 | x | | +| test.rs:335:5:337:5 | exit nested (normal) | test.rs:335:5:337:5 | exit nested | | +| test.rs:335:5:337:5 | nested | test.rs:338:5:338:19 | ExprStmt | | +| test.rs:335:15:335:15 | x | test.rs:335:15:335:25 | Param | match | +| test.rs:335:15:335:25 | Param | test.rs:336:9:336:16 | ExprStmt | | +| test.rs:335:28:337:5 | BlockExpr | test.rs:335:5:337:5 | exit nested (normal) | | +| test.rs:336:9:336:10 | * ... | test.rs:336:15:336:15 | 1 | | +| test.rs:336:9:336:15 | ... += ... | test.rs:335:28:337:5 | BlockExpr | | +| test.rs:336:9:336:16 | ExprStmt | test.rs:336:10:336:10 | x | | +| test.rs:336:10:336:10 | x | test.rs:336:9:336:10 | * ... | | +| test.rs:336:15:336:15 | 1 | test.rs:336:9:336:15 | ... += ... | | +| test.rs:338:5:338:10 | PathExpr | test.rs:338:17:338:17 | x | | +| test.rs:338:5:338:18 | CallExpr | test.rs:333:27:339:1 | BlockExpr | | +| test.rs:338:5:338:19 | ExprStmt | test.rs:338:5:338:10 | PathExpr | | +| test.rs:338:12:338:17 | RefExpr | test.rs:338:5:338:18 | CallExpr | | +| test.rs:338:17:338:17 | x | test.rs:338:12:338:17 | RefExpr | | breakTarget | test.rs:16:17:16:21 | BreakExpr | test.rs:10:9:22:9 | LoopExpr | | test.rs:30:21:30:25 | BreakExpr | test.rs:28:13:35:13 | LoopExpr | @@ -683,9 +714,9 @@ breakTarget | test.rs:170:17:170:28 | BreakExpr | test.rs:168:13:173:9 | LoopExpr | | test.rs:183:17:183:35 | BreakExpr | test.rs:181:13:186:9 | LoopExpr | | test.rs:195:13:195:30 | BreakExpr | test.rs:194:13:196:9 | BlockExpr | -| test.rs:284:13:284:26 | BreakExpr | test.rs:281:18:292:5 | BlockExpr | -| test.rs:288:13:288:26 | BreakExpr | test.rs:281:18:292:5 | BlockExpr | -| test.rs:299:13:299:26 | BreakExpr | test.rs:296:18:302:5 | BlockExpr | +| test.rs:312:13:312:26 | BreakExpr | test.rs:309:18:320:5 | BlockExpr | +| test.rs:316:13:316:26 | BreakExpr | test.rs:309:18:320:5 | BlockExpr | +| test.rs:327:13:327:26 | BreakExpr | test.rs:324:18:330:5 | BlockExpr | continueTarget | test.rs:19:17:19:24 | ContinueExpr | test.rs:10:9:22:9 | LoopExpr | | test.rs:45:21:45:28 | ContinueExpr | test.rs:43:13:50:13 | LoopExpr | diff --git a/rust/ql/test/library-tests/controlflow/test.rs b/rust/ql/test/library-tests/controlflow/test.rs index 74a8589181c3..674c697f7154 100644 --- a/rust/ql/test/library-tests/controlflow/test.rs +++ b/rust/ql/test/library-tests/controlflow/test.rs @@ -248,11 +248,39 @@ mod logical_operators { } } -fn test_match(maybe_digit: Option) -> i64 { - match maybe_digit { - Option::Some(x) if x < 10 => x + 5, - Option::Some(x) => x, - Option::None => 5, +mod question_mark_operator { + + fn test_question_mark_operator_1(s: &str) -> Option { + str.parse::()? + 4 + } + + fn test_question_mark_operator_2(b: Option) -> Option { + match b? { + true => Some(false), + false => Some(true), + } + } +} + +mod match_expression { + + fn test_match(maybe_digit: Option) -> i64 { + match maybe_digit { + Option::Some(x) if x < 10 => x + 5, + Option::Some(x) => x, + Option::None => 5, + } + } + + fn test_match_with_return_in_scrutinee(maybe_digit: Option) -> i64 { + match (if maybe_digit == Some(3) { + return 3; + } else { + maybe_digit + }) { + Option::Some(x) => x + 5, + Option::None => 5, + } } } @@ -304,8 +332,8 @@ fn labelled_block2() -> i64 { fn test_nested_function() { let mut x = 0; - fn nested(x : &mut i64) { + fn nested(x: &mut i64) { *x += 1; } nested(&mut x); -} \ No newline at end of file +} From 2f07f1c730f32defe5f8f7e0f314da1702c6ad17 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 14 Oct 2024 11:32:22 +0200 Subject: [PATCH 101/217] Rust: Abnormal completion in scrutinee does not continue to match arms --- .../codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll | 3 ++- rust/ql/test/library-tests/controlflow/Cfg.expected | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index 795ae50d363d..a430d074ec25 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -504,7 +504,8 @@ class MatchExprTree extends PostOrderTree instanceof MatchExpr { override predicate succ(AstNode pred, AstNode succ, Completion c) { // Edge from the scrutinee to the first arm. last(super.getExpr(), pred, c) and - first(super.getArm(0).getPat(), succ) + first(super.getArm(0).getPat(), succ) and + completionIsNormal(c) or // Edge from a failed match/guard in one arm to the beginning of the next arm. exists(int i | diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 6b8a47953986..c260604236c9 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -595,7 +595,6 @@ edges | test.rs:276:34:276:40 | CallExpr | test.rs:276:19:276:40 | ... == ... | | | test.rs:276:39:276:39 | 3 | test.rs:276:34:276:40 | CallExpr | | | test.rs:277:13:277:20 | ReturnExpr | test.rs:275:5:284:5 | exit test_match_with_return_in_scrutinee (normal) | return | -| test.rs:277:13:277:20 | ReturnExpr | test.rs:281:13:281:27 | TupleStructPat | return | | test.rs:277:13:277:21 | ExprStmt | test.rs:277:20:277:20 | 3 | | | test.rs:277:20:277:20 | 3 | test.rs:277:13:277:20 | ReturnExpr | | | test.rs:278:16:280:9 | BlockExpr | test.rs:276:16:280:9 | IfExpr | | From 8e4e663739a13e3a08230c1bd5139ecfb9637e6f Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 14 Oct 2024 11:38:35 +0200 Subject: [PATCH 102/217] Rust: Handle question mark operator in CFG --- .../rust/controlflow/internal/Completion.qll | 12 +++++++-- .../internal/ControlFlowGraphImpl.qll | 4 +++ .../library-tests/controlflow/Cfg.expected | 25 +++++++++++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll b/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll index 256b058f823e..487426e53325 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll @@ -36,7 +36,13 @@ class SimpleCompletion extends NormalCompletion, TSimpleCompletion { // `SimpleCompletion` is the "default" completion type, thus it is valid for // any node where there isn't another more specific completion type. - override predicate isValidFor(AstNode e) { not any(Completion c).isValidForSpecific(e) } + override predicate isValidFor(AstNode e) { + not any(Completion c).isValidForSpecific(e) + or + // A `?` expression can both proceed normally or cause an early return, so + // we explicitly allow the former here. + e instanceof TryExpr + } override string toString() { result = "simple" } } @@ -204,7 +210,9 @@ class ContinueCompletion extends TContinueCompletion, Completion { class ReturnCompletion extends TReturnCompletion, Completion { override ReturnSuccessor getAMatchingSuccessorType() { any() } - override predicate isValidForSpecific(AstNode e) { e instanceof ReturnExpr } + override predicate isValidForSpecific(AstNode e) { + e instanceof ReturnExpr or e instanceof TryExpr + } override string toString() { result = "return" } } diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index a430d074ec25..678c2203ec2f 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -586,6 +586,10 @@ class ReturnExprTree extends PostOrderTree instanceof ReturnExpr { } } +class TryExprTree extends StandardPostOrderTree instanceof TryExpr { + override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } +} + class TupleExprTree extends StandardPostOrderTree instanceof TupleExpr { override AstNode getChildNode(int i) { result = super.getField(i) } } diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index c260604236c9..42f39dfec830 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -555,9 +555,34 @@ edges | test.rs:245:16:247:9 | BlockExpr | test.rs:243:9:247:9 | IfExpr | | | test.rs:246:13:246:17 | false | test.rs:245:16:247:9 | BlockExpr | | | test.rs:253:5:255:5 | enter test_question_mark_operator_1 | test.rs:253:38:253:38 | s | | +| test.rs:253:5:255:5 | exit test_question_mark_operator_1 (normal) | test.rs:253:5:255:5 | exit test_question_mark_operator_1 | | | test.rs:253:38:253:38 | s | test.rs:253:38:253:44 | Param | match | +| test.rs:253:38:253:44 | Param | test.rs:254:9:254:11 | PathExpr | | +| test.rs:253:62:255:5 | BlockExpr | test.rs:253:5:255:5 | exit test_question_mark_operator_1 (normal) | | +| test.rs:254:9:254:11 | PathExpr | test.rs:254:9:254:26 | MethodCallExpr | | +| test.rs:254:9:254:26 | MethodCallExpr | test.rs:254:9:254:27 | TryExpr | | +| test.rs:254:9:254:27 | TryExpr | test.rs:253:5:255:5 | exit test_question_mark_operator_1 (normal) | return | +| test.rs:254:9:254:27 | TryExpr | test.rs:254:31:254:31 | 4 | | +| test.rs:254:9:254:31 | ... + ... | test.rs:253:62:255:5 | BlockExpr | | +| test.rs:254:31:254:31 | 4 | test.rs:254:9:254:31 | ... + ... | | | test.rs:257:5:262:5 | enter test_question_mark_operator_2 | test.rs:257:38:257:38 | b | | +| test.rs:257:5:262:5 | exit test_question_mark_operator_2 (normal) | test.rs:257:5:262:5 | exit test_question_mark_operator_2 | | | test.rs:257:38:257:38 | b | test.rs:257:38:257:52 | Param | match | +| test.rs:257:38:257:52 | Param | test.rs:258:15:258:15 | b | | +| test.rs:257:71:262:5 | BlockExpr | test.rs:257:5:262:5 | exit test_question_mark_operator_2 (normal) | | +| test.rs:258:9:261:9 | MatchExpr | test.rs:257:71:262:5 | BlockExpr | | +| test.rs:258:15:258:15 | b | test.rs:258:15:258:16 | TryExpr | | +| test.rs:258:15:258:16 | TryExpr | test.rs:257:5:262:5 | exit test_question_mark_operator_2 (normal) | return | +| test.rs:258:15:258:16 | TryExpr | test.rs:259:13:259:16 | LiteralPat | | +| test.rs:259:13:259:16 | LiteralPat | test.rs:259:21:259:24 | PathExpr | match | +| test.rs:259:13:259:16 | LiteralPat | test.rs:260:13:260:17 | LiteralPat | no-match | +| test.rs:259:21:259:24 | PathExpr | test.rs:259:26:259:30 | false | | +| test.rs:259:21:259:31 | CallExpr | test.rs:258:9:261:9 | MatchExpr | | +| test.rs:259:26:259:30 | false | test.rs:259:21:259:31 | CallExpr | | +| test.rs:260:13:260:17 | LiteralPat | test.rs:260:22:260:25 | PathExpr | match | +| test.rs:260:22:260:25 | PathExpr | test.rs:260:27:260:30 | true | | +| test.rs:260:22:260:31 | CallExpr | test.rs:258:9:261:9 | MatchExpr | | +| test.rs:260:27:260:30 | true | test.rs:260:22:260:31 | CallExpr | | | test.rs:267:5:273:5 | enter test_match | test.rs:267:19:267:29 | maybe_digit | | | test.rs:267:5:273:5 | exit test_match (normal) | test.rs:267:5:273:5 | exit test_match | | | test.rs:267:19:267:29 | maybe_digit | test.rs:267:19:267:42 | Param | match | From e83f1d17bfc9e5a21df7e6bc856502cbe4a732b0 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 14 Oct 2024 11:40:35 +0200 Subject: [PATCH 103/217] Rust: Simplify return implementation in CFG --- .../controlflow/internal/ControlFlowGraphImpl.qll | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index 678c2203ec2f..f6587bf76554 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -572,18 +572,8 @@ class RefExprTree extends StandardPostOrderTree instanceof RefExpr { override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } } -class ReturnExprTree extends PostOrderTree instanceof ReturnExpr { - override predicate propagatesAbnormal(AstNode child) { child = super.getExpr() } - - override predicate first(AstNode node) { - first(super.getExpr(), node) - or - not super.hasExpr() and node = this - } - - override predicate succ(AstNode pred, AstNode succ, Completion c) { - last(super.getExpr(), pred, c) and succ = this and completionIsNormal(c) - } +class ReturnExprTree extends StandardPostOrderTree instanceof ReturnExpr { + override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } } class TryExprTree extends StandardPostOrderTree instanceof TryExpr { From 3402a729d00ab642075ae6b720a2778f4503d6ba Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 14 Oct 2024 12:36:56 +0200 Subject: [PATCH 104/217] Python: adjust test expectations for extractor test --- .../python-2-deprecation/query.without-python2.expected | 1 - 1 file changed, 1 deletion(-) diff --git a/python/extractor/cli-integration-test/python-2-deprecation/query.without-python2.expected b/python/extractor/cli-integration-test/python-2-deprecation/query.without-python2.expected index 3fa1f24a7853..d43fc3e2a7e6 100644 --- a/python/extractor/cli-integration-test/python-2-deprecation/query.without-python2.expected +++ b/python/extractor/cli-integration-test/python-2-deprecation/query.without-python2.expected @@ -1,4 +1,3 @@ | name | +------+ -| stat | | test | From 22261c1480ffaf454c6d68580b0ee9ffd6ad7017 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 14 Oct 2024 13:43:57 +0200 Subject: [PATCH 105/217] Rust: Rename isIrrefutablePattern to isExhaustiveMatch --- .../rust/controlflow/internal/Completion.qll | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll b/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll index 487426e53325..faf3508379b8 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll @@ -123,9 +123,9 @@ class BooleanCompletion extends ConditionalCompletion, TBooleanCompletion { override string toString() { result = "boolean(" + value + ")" } } -/** Holds if `pat` is guaranteed to match. */ +/** Holds if `pat` is guaranteed to match at the point in the AST where it occurs. */ pragma[nomagic] -private predicate isIrrefutablePattern(Pat pat) { +private predicate isExhaustiveMatch(Pat pat) { ( pat instanceof WildcardPat or @@ -133,18 +133,18 @@ private predicate isIrrefutablePattern(Pat pat) { or pat instanceof RestPat or - // `let` statements without an `else` branch must be irrefutible + // `let` statements without an `else` branch must be exhaustive pat = any(LetStmt let | not let.hasLetElse()).getPat() or - // `match` expressions must be irrefutible, so last arm cannot fail + // `match` expressions must be exhaustive, so last arm cannot fail pat = any(MatchExpr me).getLastArm().getPat() or - // parameter patterns must be irrefutible + // parameter patterns must be exhaustive pat = any(Param p).getPat() ) and not pat = any(ForExpr for).getPat() // workaround until `for` loops are desugared or - exists(Pat parent | isIrrefutablePattern(parent) | + exists(Pat parent | isExhaustiveMatch(parent) | pat = parent.(BoxPat).getPat() or pat = parent.(IdentPat).getPat() @@ -171,7 +171,7 @@ class MatchCompletion extends TMatchCompletion, ConditionalCompletion { override predicate isValidForSpecific(AstNode e) { e instanceof Pat and - if isIrrefutablePattern(e) then value = true else any() + if isExhaustiveMatch(e) then value = true else any() } override MatchSuccessor getAMatchingSuccessorType() { result.getValue() = value } From 493a68a2328a027557dc97e6e7a7a2125476be40 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Sat, 12 Oct 2024 10:49:59 +0200 Subject: [PATCH 106/217] Rust: add MacroPat to isExhaustiveMatch --- rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll b/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll index faf3508379b8..ca74a10fe4ba 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll @@ -139,6 +139,9 @@ private predicate isExhaustiveMatch(Pat pat) { // `match` expressions must be exhaustive, so last arm cannot fail pat = any(MatchExpr me).getLastArm().getPat() or + // macro patterns is exhaustive if its expansion is + pat = any(MacroPat mp | isExhaustiveMatch(mp.getMacroCall().getExpanded())) + or // parameter patterns must be exhaustive pat = any(Param p).getPat() ) and @@ -149,6 +152,8 @@ private predicate isExhaustiveMatch(Pat pat) { or pat = parent.(IdentPat).getPat() or + pat = parent.(MacroPat).getMacroCall().getExpanded() + or pat = parent.(ParenPat).getPat() or pat = parent.(RecordPat).getRecordPatFieldList().getField(_).getPat() From ae7afa7aff0f8cca10885faaccaea5648f2eaef0 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Mon, 14 Oct 2024 15:20:43 +0200 Subject: [PATCH 107/217] Update rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll Co-authored-by: Simon Friis Vindum --- rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll b/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll index ca74a10fe4ba..a72b904dcf1b 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll @@ -139,7 +139,7 @@ private predicate isExhaustiveMatch(Pat pat) { // `match` expressions must be exhaustive, so last arm cannot fail pat = any(MatchExpr me).getLastArm().getPat() or - // macro patterns is exhaustive if its expansion is + // macro invocations are exhaustive if their expansion is pat = any(MacroPat mp | isExhaustiveMatch(mp.getMacroCall().getExpanded())) or // parameter patterns must be exhaustive From 9d8d7ab237bd3277261ca6f8666581952f233df4 Mon Sep 17 00:00:00 2001 From: yoff Date: Mon, 14 Oct 2024 14:14:40 +0000 Subject: [PATCH 108/217] python: update extractor expectations --- .../python-2-deprecation/query.only-python2.expected | 5 ----- .../query.python2-using-python3.expected | 9 ++++----- 2 files changed, 4 insertions(+), 10 deletions(-) delete mode 100644 python/extractor/cli-integration-test/python-2-deprecation/query.only-python2.expected diff --git a/python/extractor/cli-integration-test/python-2-deprecation/query.only-python2.expected b/python/extractor/cli-integration-test/python-2-deprecation/query.only-python2.expected deleted file mode 100644 index 75bc50740598..000000000000 --- a/python/extractor/cli-integration-test/python-2-deprecation/query.only-python2.expected +++ /dev/null @@ -1,5 +0,0 @@ -| name | -+----------+ -| dircache | -| stat | -| test | diff --git a/python/extractor/cli-integration-test/python-2-deprecation/query.python2-using-python3.expected b/python/extractor/cli-integration-test/python-2-deprecation/query.python2-using-python3.expected index 75bc50740598..3fa1f24a7853 100644 --- a/python/extractor/cli-integration-test/python-2-deprecation/query.python2-using-python3.expected +++ b/python/extractor/cli-integration-test/python-2-deprecation/query.python2-using-python3.expected @@ -1,5 +1,4 @@ -| name | -+----------+ -| dircache | -| stat | -| test | +| name | ++------+ +| stat | +| test | From da5e9ac18c8b6de8c292e47437159f5be7f26158 Mon Sep 17 00:00:00 2001 From: yoff Date: Mon, 14 Oct 2024 14:54:33 +0000 Subject: [PATCH 109/217] python: more adjustments... --- .../python-2-deprecation/query.python2-using-python3.expected | 1 - 1 file changed, 1 deletion(-) diff --git a/python/extractor/cli-integration-test/python-2-deprecation/query.python2-using-python3.expected b/python/extractor/cli-integration-test/python-2-deprecation/query.python2-using-python3.expected index 3fa1f24a7853..d43fc3e2a7e6 100644 --- a/python/extractor/cli-integration-test/python-2-deprecation/query.python2-using-python3.expected +++ b/python/extractor/cli-integration-test/python-2-deprecation/query.python2-using-python3.expected @@ -1,4 +1,3 @@ | name | +------+ -| stat | | test | From 134539060d16d4f86cc4edcb8a586c3be5f67275 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:38:30 +0100 Subject: [PATCH 110/217] Rust: correct some 'spurious' annotations that are off by one line. --- rust/ql/test/query-tests/unusedentities/unreachable.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rust/ql/test/query-tests/unusedentities/unreachable.rs b/rust/ql/test/query-tests/unusedentities/unreachable.rs index 8a8fbcf70bdb..05163d4a082b 100644 --- a/rust/ql/test/query-tests/unusedentities/unreachable.rs +++ b/rust/ql/test/query-tests/unusedentities/unreachable.rs @@ -97,16 +97,16 @@ fn unreachable_panic() { if cond() { do_something(); - _ = false && panic!(); // does not panic due to short-circuiting - do_something(); // SPURIOUS: unreachable + _ = false && panic!(); // does not panic due to short-circuiting SPURIOUS: unreachable + do_something(); _ = false || panic!(); do_something(); // BAD: unreachable code [NOT DETECTED] } if cond() { do_something(); - _ = true || panic!(); // does not panic due to short-circuiting - do_something(); // SPURIOUS: unreachable + _ = true || panic!(); // does not panic due to short-circuiting SPURIOUS: unreachable + do_something(); _ = true && panic!(); do_something(); // BAD: unreachable code [NOT DETECTED] } From 528641c55a588fbe784ce287de0132f25dd55636 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:22:44 +0100 Subject: [PATCH 111/217] Rust: Test spacing. --- .../unusedentities/UnreachableCode.expected | 18 +-- .../unusedentities/UnusedVariable.expected | 26 ++-- .../test/query-tests/unusedentities/main.rs | 122 ++++++++++++++++++ .../query-tests/unusedentities/unreachable.rs | 6 + 4 files changed, 150 insertions(+), 22 deletions(-) diff --git a/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected b/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected index 18831b723278..fa463c47fc35 100644 --- a/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected +++ b/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected @@ -3,12 +3,12 @@ | unreachable.rs:32:3:32:17 | ExprStmt | This code is never reached. | | unreachable.rs:39:3:39:17 | ExprStmt | This code is never reached. | | unreachable.rs:60:2:60:16 | ExprStmt | This code is never reached. | -| unreachable.rs:100:16:100:23 | ExprStmt | This code is never reached. | -| unreachable.rs:108:15:108:22 | ExprStmt | This code is never reached. | -| unreachable.rs:124:2:124:16 | ExprStmt | This code is never reached. | -| unreachable.rs:134:2:134:16 | ExprStmt | This code is never reached. | -| unreachable.rs:141:3:141:17 | ExprStmt | This code is never reached. | -| unreachable.rs:150:4:150:18 | ExprStmt | This code is never reached. | -| unreachable.rs:156:3:156:17 | ExprStmt | This code is never reached. | -| unreachable.rs:162:4:162:18 | ExprStmt | This code is never reached. | -| unreachable.rs:165:2:165:16 | ExprStmt | This code is never reached. | +| unreachable.rs:106:16:106:23 | ExprStmt | This code is never reached. | +| unreachable.rs:114:15:114:22 | ExprStmt | This code is never reached. | +| unreachable.rs:130:2:130:16 | ExprStmt | This code is never reached. | +| unreachable.rs:140:2:140:16 | ExprStmt | This code is never reached. | +| unreachable.rs:147:3:147:17 | ExprStmt | This code is never reached. | +| unreachable.rs:156:4:156:18 | ExprStmt | This code is never reached. | +| unreachable.rs:162:3:162:17 | ExprStmt | This code is never reached. | +| unreachable.rs:168:4:168:18 | ExprStmt | This code is never reached. | +| unreachable.rs:171:2:171:16 | ExprStmt | This code is never reached. | diff --git a/rust/ql/test/query-tests/unusedentities/UnusedVariable.expected b/rust/ql/test/query-tests/unusedentities/UnusedVariable.expected index 8203501f3a23..ee87d297230b 100644 --- a/rust/ql/test/query-tests/unusedentities/UnusedVariable.expected +++ b/rust/ql/test/query-tests/unusedentities/UnusedVariable.expected @@ -1,16 +1,16 @@ | main.rs:25:9:25:9 | a | Variable is not used. | | main.rs:90:13:90:13 | d | Variable is not used. | | main.rs:141:5:141:5 | y | Variable is not used. | -| main.rs:164:9:164:9 | x | Variable is not used. | -| main.rs:202:17:202:17 | a | Variable is not used. | -| main.rs:210:20:210:22 | val | Variable is not used. | -| main.rs:223:14:223:16 | val | Variable is not used. | -| main.rs:240:22:240:24 | val | Variable is not used. | -| main.rs:248:24:248:26 | val | Variable is not used. | -| main.rs:257:13:257:15 | num | Variable is not used. | -| main.rs:272:12:272:12 | j | Variable is not used. | -| main.rs:294:25:294:25 | y | Variable is not used. | -| main.rs:298:28:298:28 | a | Variable is not used. | -| main.rs:302:9:302:9 | p | Variable is not used. | -| main.rs:309:13:309:13 | y | Variable is not used. | -| main.rs:317:21:317:21 | y | Variable is not used. | +| main.rs:168:9:168:9 | x | Variable is not used. | +| main.rs:250:17:250:17 | a | Variable is not used. | +| main.rs:258:20:258:22 | val | Variable is not used. | +| main.rs:271:14:271:16 | val | Variable is not used. | +| main.rs:288:22:288:24 | val | Variable is not used. | +| main.rs:296:24:296:26 | val | Variable is not used. | +| main.rs:305:13:305:15 | num | Variable is not used. | +| main.rs:320:12:320:12 | j | Variable is not used. | +| main.rs:342:25:342:25 | y | Variable is not used. | +| main.rs:346:28:346:28 | a | Variable is not used. | +| main.rs:350:9:350:9 | p | Variable is not used. | +| main.rs:378:13:378:13 | y | Variable is not used. | +| main.rs:386:21:386:21 | y | Variable is not used. | diff --git a/rust/ql/test/query-tests/unusedentities/main.rs b/rust/ql/test/query-tests/unusedentities/main.rs index 9b4fdb0cdd19..a3bfa2caa7b8 100644 --- a/rust/ql/test/query-tests/unusedentities/main.rs +++ b/rust/ql/test/query-tests/unusedentities/main.rs @@ -146,6 +146,10 @@ fn parameters( // --- loops --- + + + + fn loops() { let mut a: i64 = 10; let b: i64 = 20; @@ -171,10 +175,54 @@ fn loops() { println!("x is {}", x); } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + for x in 1..10 { assert!(x != 11); } + + + + + + + + + + } // --- lets --- @@ -302,6 +350,27 @@ fn if_lets_matches() { p => { // BAD: unused variable } } + + + + + + + + + + + + + + + + + + + + + } fn shadowing() -> i32 { @@ -322,7 +391,58 @@ fn shadowing() -> i32 { } } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + // --- main --- + fn main() { locals_1(); locals_2(); @@ -334,6 +454,8 @@ fn main() { if_lets_matches(); shadowing(); + + unreachable_if(); unreachable_panic(); unreachable_match(); diff --git a/rust/ql/test/query-tests/unusedentities/unreachable.rs b/rust/ql/test/query-tests/unusedentities/unreachable.rs index 05163d4a082b..8ac1907faaa3 100644 --- a/rust/ql/test/query-tests/unusedentities/unreachable.rs +++ b/rust/ql/test/query-tests/unusedentities/unreachable.rs @@ -79,6 +79,12 @@ fn unreachable_panic() { do_something(); // BAD: unreachable code [NOT DETECTED] } + + + + + + if cond() { let mut maybe; From e5885f65dba02e3fb76d86b4ae06e8fce9be9a87 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 14 Oct 2024 14:10:23 +0100 Subject: [PATCH 112/217] Rust: Add more test cases for unused variables and unreachable code. --- .../unusedentities/UnusedVariable.expected | 6 + .../test/query-tests/unusedentities/main.rs | 186 +++++++++--------- .../query-tests/unusedentities/unreachable.rs | 10 +- 3 files changed, 104 insertions(+), 98 deletions(-) diff --git a/rust/ql/test/query-tests/unusedentities/UnusedVariable.expected b/rust/ql/test/query-tests/unusedentities/UnusedVariable.expected index ee87d297230b..2c570b315070 100644 --- a/rust/ql/test/query-tests/unusedentities/UnusedVariable.expected +++ b/rust/ql/test/query-tests/unusedentities/UnusedVariable.expected @@ -2,6 +2,8 @@ | main.rs:90:13:90:13 | d | Variable is not used. | | main.rs:141:5:141:5 | y | Variable is not used. | | main.rs:168:9:168:9 | x | Variable is not used. | +| main.rs:196:9:196:9 | x | Variable is not used. | +| main.rs:201:9:201:9 | x | Variable is not used. | | main.rs:250:17:250:17 | a | Variable is not used. | | main.rs:258:20:258:22 | val | Variable is not used. | | main.rs:271:14:271:16 | val | Variable is not used. | @@ -12,5 +14,9 @@ | main.rs:342:25:342:25 | y | Variable is not used. | | main.rs:346:28:346:28 | a | Variable is not used. | | main.rs:350:9:350:9 | p | Variable is not used. | +| main.rs:365:9:365:13 | right | Variable is not used. | +| main.rs:371:9:371:14 | right2 | Variable is not used. | | main.rs:378:13:378:13 | y | Variable is not used. | | main.rs:386:21:386:21 | y | Variable is not used. | +| main.rs:434:27:434:29 | val | Variable is not used. | +| main.rs:437:22:437:24 | acc | Variable is not used. | diff --git a/rust/ql/test/query-tests/unusedentities/main.rs b/rust/ql/test/query-tests/unusedentities/main.rs index a3bfa2caa7b8..2edcc4b87160 100644 --- a/rust/ql/test/query-tests/unusedentities/main.rs +++ b/rust/ql/test/query-tests/unusedentities/main.rs @@ -146,9 +146,9 @@ fn parameters( // --- loops --- - - - +fn id(v: i32) -> i32 { + return v; +} fn loops() { let mut a: i64 = 10; @@ -175,53 +175,53 @@ fn loops() { println!("x is {}", x); } + for x + in 1..10 { + println!("x is {:?}", x); + } + for x + in 1..10 { + println!("x + 1 is {}", x + 1); + } + for x + in 1..10 { + for y + in 1..x { + println!("y is {}", y); + } + } + for x // SPURIOUS: unused variable + in 1..10 { + println!("x is {x}"); + } + for x // SPURIOUS: unused variable + in 1..10 { + _ = format!("x is {x}"); + } - - - - - - - - - - - - - - - - - - - - - - - - - - - - + for x + in 1..10 { + println!("x is {val}", val = x); + } for x in 1..10 { assert!(x != 11); } + for x + in 1..10 { + assert_eq!(x, 1); + } - - - - - - - + for x + in 1..10 { + assert_eq!(id(x), id(1)); + } } @@ -351,26 +351,26 @@ fn if_lets_matches() { } } + let duration1 = std::time::Duration::new(10, 0); // ten seconds + assert_eq!(duration1.as_secs(), 10); + let duration2:Result = + Ok(std::time::Duration::new(10, 0)); + match (duration2) { + Ok(n) => { println!("duration was {} seconds", n.as_secs()); } + Err(_) => { println!("failed"); } + } + let(left, + right) = // BAD: unused value [NOT DETECTED] SPURIOUS: unused variable + (1, 2); + _ = left; - - - - - - - - - - - - - - - - - + let pair = (1, 2); + let(left2, + right2) = // BAD: unused value [NOT DETECTED] SPURIOUS: unused variable + pair; + _ = left2; } fn shadowing() -> i32 { @@ -391,55 +391,55 @@ fn shadowing() -> i32 { } } +// --- function pointers --- +type FuncPtr = fn(i32) -> i32; +fn increment(x: i32) -> i32 { + return x + 1; +} +fn func_ptrs() { + let MyFunc: FuncPtr = increment; + for x + in 1..10 { + _ = x + 1; + } + for x + in 1..10 { + _ = increment(x); + } + for x + in 1..10 { + _ = MyFunc(x); + } +} +// --- folds and closures --- +fn folds_and_closures() { + let a1 = 1..10; + _ = a1.sum::(); + let a2 = 1..10; + _ = a2.fold(0, | acc: i32, val: i32 | -> i32 { acc + val } ); + let a3 = 1..10; + _ = a3.fold(0, | acc, val | acc + val); + let a4 = 1..10; + _ = a4.fold(0, | acc, val | acc); // BAD: unused variable + let a5 = 1..10; + _ = a5.fold(0, | acc, val | val); // BAD: unused variable - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + let i6 = 1; + let a6 = 1..10; + _ = a6.fold(0, | acc, val | acc + val + i6); +} // --- main --- @@ -453,8 +453,8 @@ fn main() { loops(); if_lets_matches(); shadowing(); - - + func_ptrs(); + folds_and_closures(); unreachable_if(); unreachable_panic(); diff --git a/rust/ql/test/query-tests/unusedentities/unreachable.rs b/rust/ql/test/query-tests/unusedentities/unreachable.rs index 8ac1907faaa3..328c6edf0ea0 100644 --- a/rust/ql/test/query-tests/unusedentities/unreachable.rs +++ b/rust/ql/test/query-tests/unusedentities/unreachable.rs @@ -79,11 +79,11 @@ fn unreachable_panic() { do_something(); // BAD: unreachable code [NOT DETECTED] } - - - - - + if cond() { + do_something(); + unreachable!(); + do_something(); // BAD: unreachable code [NOT DETECTED] + } if cond() { let mut maybe; From 57875554f4c90d4ea37c9b79ad204f190fd2d808 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 14 Oct 2024 17:06:55 +0100 Subject: [PATCH 113/217] Rust: Accept consistency failures in the new test cases. --- .../CONSISTENCY/CfgConsistency.expected | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 rust/ql/test/query-tests/unusedentities/CONSISTENCY/CfgConsistency.expected diff --git a/rust/ql/test/query-tests/unusedentities/CONSISTENCY/CfgConsistency.expected b/rust/ql/test/query-tests/unusedentities/CONSISTENCY/CfgConsistency.expected new file mode 100644 index 000000000000..bdd995b19f3e --- /dev/null +++ b/rust/ql/test/query-tests/unusedentities/CONSISTENCY/CfgConsistency.expected @@ -0,0 +1,11 @@ +multipleSuccessors +| main.rs:428:17:428:17 | 0 | successor | main.rs:428:9:428:10 | a2 | +| main.rs:428:17:428:17 | 0 | successor | main.rs:428:20:428:62 | ClosureExpr | +| main.rs:431:17:431:17 | 0 | successor | main.rs:431:9:431:10 | a3 | +| main.rs:431:17:431:17 | 0 | successor | main.rs:431:20:431:41 | ClosureExpr | +| main.rs:434:17:434:17 | 0 | successor | main.rs:434:9:434:10 | a4 | +| main.rs:434:17:434:17 | 0 | successor | main.rs:434:20:434:35 | ClosureExpr | +| main.rs:437:17:437:17 | 0 | successor | main.rs:437:9:437:10 | a5 | +| main.rs:437:17:437:17 | 0 | successor | main.rs:437:20:437:35 | ClosureExpr | +| main.rs:441:17:441:17 | 0 | successor | main.rs:441:9:441:10 | a6 | +| main.rs:441:17:441:17 | 0 | successor | main.rs:441:20:441:46 | ClosureExpr | From 8169ccd21ede3fd97e8677b71ab0879f89e4628b Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 15 Oct 2024 09:36:09 +0100 Subject: [PATCH 114/217] Apply suggestions from code review Co-authored-by: Simon Friis Vindum --- rust/ql/test/query-tests/unusedentities/main.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rust/ql/test/query-tests/unusedentities/main.rs b/rust/ql/test/query-tests/unusedentities/main.rs index 2edcc4b87160..21403ac3ddf1 100644 --- a/rust/ql/test/query-tests/unusedentities/main.rs +++ b/rust/ql/test/query-tests/unusedentities/main.rs @@ -356,7 +356,7 @@ fn if_lets_matches() { let duration2:Result = Ok(std::time::Duration::new(10, 0)); - match (duration2) { + match duration2 { Ok(n) => { println!("duration was {} seconds", n.as_secs()); } Err(_) => { println!("failed"); } } @@ -400,7 +400,7 @@ fn increment(x: i32) -> i32 { } fn func_ptrs() { - let MyFunc: FuncPtr = increment; + let my_func: FuncPtr = increment; for x in 1..10 { @@ -414,7 +414,7 @@ fn func_ptrs() { for x in 1..10 { - _ = MyFunc(x); + _ = my_func(x); } } From 5e33d9a14586ad05b4262fadab71494abe857423 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 15 Oct 2024 09:37:43 +0100 Subject: [PATCH 115/217] Rust: Further changes from code review. --- rust/ql/test/query-tests/unusedentities/main.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rust/ql/test/query-tests/unusedentities/main.rs b/rust/ql/test/query-tests/unusedentities/main.rs index 21403ac3ddf1..3b81b0db54a9 100644 --- a/rust/ql/test/query-tests/unusedentities/main.rs +++ b/rust/ql/test/query-tests/unusedentities/main.rs @@ -361,13 +361,13 @@ fn if_lets_matches() { Err(_) => { println!("failed"); } } - let(left, + let (left, right) = // BAD: unused value [NOT DETECTED] SPURIOUS: unused variable (1, 2); _ = left; let pair = (1, 2); - let(left2, + let (left2, right2) = // BAD: unused value [NOT DETECTED] SPURIOUS: unused variable pair; _ = left2; From 983179b84e6dd1acf72f565b7fcfb26325e5716c Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 15 Oct 2024 11:23:16 +0100 Subject: [PATCH 116/217] Rust: Autoformat. --- rust/ql/consistency-queries/CfgConsistency.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/ql/consistency-queries/CfgConsistency.ql b/rust/ql/consistency-queries/CfgConsistency.ql index 9f766a9f6687..4e155ca307b0 100644 --- a/rust/ql/consistency-queries/CfgConsistency.ql +++ b/rust/ql/consistency-queries/CfgConsistency.ql @@ -5,4 +5,4 @@ * @id rust/diagnostics/cfg-consistency */ - import codeql.rust.controlflow.internal.CfgConsistency +import codeql.rust.controlflow.internal.CfgConsistency From 255f55cf1ab0739fa521598b959db26b4397d72a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 15 Oct 2024 10:29:25 +0000 Subject: [PATCH 117/217] Release preparation for version 2.19.2 --- cpp/ql/lib/CHANGELOG.md | 7 +++++++ .../change-notes/2024-10-07-range-analysis-of-getc.md | 4 ---- cpp/ql/lib/change-notes/2024-10-09-fopen-taint.md | 4 ---- cpp/ql/lib/change-notes/released/2.0.2.md | 6 ++++++ cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 9 +++++++++ .../2024-09-26-wcharcharconversion-false-positives.md | 5 ----- .../src/change-notes/2024-10-02-uninitialized-local.md | 4 ---- .../2024-10-07-unclear-array-index-validation.md | 4 ---- cpp/ql/src/change-notes/released/1.2.5.md | 8 ++++++++ cpp/ql/src/codeql-pack.release.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md | 4 ++++ .../Solorigate/lib/change-notes/released/1.7.27.md | 3 +++ .../campaigns/Solorigate/lib/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/src/CHANGELOG.md | 4 ++++ .../Solorigate/src/change-notes/released/1.7.27.md | 3 +++ .../campaigns/Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 4 ++++ csharp/ql/lib/change-notes/released/3.0.1.md | 3 +++ csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 4 ++++ csharp/ql/src/change-notes/released/1.0.10.md | 3 +++ csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 ++++ .../change-notes/released/1.0.10.md | 3 +++ go/ql/consistency-queries/codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 8 ++++++++ .../change-notes/2024-09-03-tags-and-interface-ids.md | 5 ----- .../2.1.1.md} | 9 ++++++--- go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 4 ++++ go/ql/src/change-notes/released/1.1.1.md | 3 +++ go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/automodel/src/CHANGELOG.md | 4 ++++ java/ql/automodel/src/change-notes/released/1.0.10.md | 3 +++ java/ql/automodel/src/codeql-pack.release.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 4 ++++ java/ql/lib/change-notes/released/4.1.1.md | 3 +++ java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 4 ++++ java/ql/src/change-notes/released/1.1.7.md | 3 +++ java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 4 ++++ javascript/ql/lib/change-notes/released/2.0.2.md | 3 +++ javascript/ql/lib/codeql-pack.release.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/CHANGELOG.md | 4 ++++ javascript/ql/src/change-notes/released/1.2.2.md | 3 +++ javascript/ql/src/codeql-pack.release.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/CHANGELOG.md | 4 ++++ misc/suite-helpers/change-notes/released/1.0.10.md | 3 +++ misc/suite-helpers/codeql-pack.release.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/CHANGELOG.md | 10 ++++++++++ .../ql/lib/change-notes/2024-09-24-std-lib-models.md | 4 ---- .../lib/change-notes/2024-10-01-comprehension-flow.md | 5 ----- .../2024-10-03-typetracking-through-comprehensions.md | 4 ---- .../ql/lib/change-notes/2024-10-09-finditer-match.md | 4 ---- python/ql/lib/change-notes/released/2.1.1.md | 9 +++++++++ python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 6 +++++- python/ql/src/change-notes/released/1.3.1.md | 3 +++ python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 6 ++++++ .../2.0.2.md} | 7 ++++--- ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 6 ++++++ .../1.1.5.md} | 7 ++++--- ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 ++++ shared/controlflow/change-notes/released/1.0.10.md | 3 +++ shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 4 ++++ shared/dataflow/change-notes/released/1.1.4.md | 3 +++ shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ++++ shared/mad/change-notes/released/1.0.10.md | 3 +++ shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ++++ shared/rangeanalysis/change-notes/released/1.0.10.md | 3 +++ shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ++++ shared/regex/change-notes/released/1.0.10.md | 3 +++ shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ++++ shared/ssa/change-notes/released/1.0.10.md | 3 +++ shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 ++++ shared/threat-models/change-notes/released/1.0.10.md | 3 +++ shared/threat-models/codeql-pack.release.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/CHANGELOG.md | 4 ++++ shared/tutorial/change-notes/released/1.0.10.md | 3 +++ shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/CHANGELOG.md | 4 ++++ shared/typeflow/change-notes/released/1.0.10.md | 3 +++ shared/typeflow/codeql-pack.release.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ++++ shared/typetracking/change-notes/released/1.0.10.md | 3 +++ shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ++++ shared/typos/change-notes/released/1.0.10.md | 3 +++ shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ++++ shared/util/change-notes/released/1.0.10.md | 3 +++ shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/CHANGELOG.md | 4 ++++ shared/xml/change-notes/released/1.0.10.md | 3 +++ shared/xml/codeql-pack.release.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ++++ shared/yaml/change-notes/released/1.0.10.md | 3 +++ shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 4 ++++ swift/ql/lib/change-notes/released/2.0.2.md | 3 +++ swift/ql/lib/codeql-pack.release.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/CHANGELOG.md | 4 ++++ swift/ql/src/change-notes/released/1.0.10.md | 3 +++ swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 150 files changed, 357 insertions(+), 123 deletions(-) delete mode 100644 cpp/ql/lib/change-notes/2024-10-07-range-analysis-of-getc.md delete mode 100644 cpp/ql/lib/change-notes/2024-10-09-fopen-taint.md create mode 100644 cpp/ql/lib/change-notes/released/2.0.2.md delete mode 100644 cpp/ql/src/change-notes/2024-09-26-wcharcharconversion-false-positives.md delete mode 100644 cpp/ql/src/change-notes/2024-10-02-uninitialized-local.md delete mode 100644 cpp/ql/src/change-notes/2024-10-07-unclear-array-index-validation.md create mode 100644 cpp/ql/src/change-notes/released/1.2.5.md create mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.27.md create mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.27.md create mode 100644 csharp/ql/lib/change-notes/released/3.0.1.md create mode 100644 csharp/ql/src/change-notes/released/1.0.10.md create mode 100644 go/ql/consistency-queries/change-notes/released/1.0.10.md delete mode 100644 go/ql/lib/change-notes/2024-09-03-tags-and-interface-ids.md rename go/ql/lib/change-notes/{2024-08-29-add-stdin-threat-models.md => released/2.1.1.md} (64%) create mode 100644 go/ql/src/change-notes/released/1.1.1.md create mode 100644 java/ql/automodel/src/change-notes/released/1.0.10.md create mode 100644 java/ql/lib/change-notes/released/4.1.1.md create mode 100644 java/ql/src/change-notes/released/1.1.7.md create mode 100644 javascript/ql/lib/change-notes/released/2.0.2.md create mode 100644 javascript/ql/src/change-notes/released/1.2.2.md create mode 100644 misc/suite-helpers/change-notes/released/1.0.10.md delete mode 100644 python/ql/lib/change-notes/2024-09-24-std-lib-models.md delete mode 100644 python/ql/lib/change-notes/2024-10-01-comprehension-flow.md delete mode 100644 python/ql/lib/change-notes/2024-10-03-typetracking-through-comprehensions.md delete mode 100644 python/ql/lib/change-notes/2024-10-09-finditer-match.md create mode 100644 python/ql/lib/change-notes/released/2.1.1.md create mode 100644 python/ql/src/change-notes/released/1.3.1.md rename ruby/ql/lib/change-notes/{2024-10-03-extraction-warnings.md => released/2.0.2.md} (77%) rename ruby/ql/src/change-notes/{2024-10-03-extraction-warnings.md => released/1.1.5.md} (82%) create mode 100644 shared/controlflow/change-notes/released/1.0.10.md create mode 100644 shared/dataflow/change-notes/released/1.1.4.md create mode 100644 shared/mad/change-notes/released/1.0.10.md create mode 100644 shared/rangeanalysis/change-notes/released/1.0.10.md create mode 100644 shared/regex/change-notes/released/1.0.10.md create mode 100644 shared/ssa/change-notes/released/1.0.10.md create mode 100644 shared/threat-models/change-notes/released/1.0.10.md create mode 100644 shared/tutorial/change-notes/released/1.0.10.md create mode 100644 shared/typeflow/change-notes/released/1.0.10.md create mode 100644 shared/typetracking/change-notes/released/1.0.10.md create mode 100644 shared/typos/change-notes/released/1.0.10.md create mode 100644 shared/util/change-notes/released/1.0.10.md create mode 100644 shared/xml/change-notes/released/1.0.10.md create mode 100644 shared/yaml/change-notes/released/1.0.10.md create mode 100644 swift/ql/lib/change-notes/released/2.0.2.md create mode 100644 swift/ql/src/change-notes/released/1.0.10.md diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index 5d39629f62b0..73c42c5dfa07 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,10 @@ +## 2.0.2 + +### Minor Analysis Improvements + +* Added taint flow model for `fopen` and related functions. +* The `SimpleRangeAnalysis` library (`semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis`) now generates more precise ranges for calls to `fgetc` and `getc`. + ## 2.0.1 No user-facing changes. diff --git a/cpp/ql/lib/change-notes/2024-10-07-range-analysis-of-getc.md b/cpp/ql/lib/change-notes/2024-10-07-range-analysis-of-getc.md deleted file mode 100644 index f796fba2ece2..000000000000 --- a/cpp/ql/lib/change-notes/2024-10-07-range-analysis-of-getc.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The `SimpleRangeAnalysis` library (`semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis`) now generates more precise ranges for calls to `fgetc` and `getc`. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2024-10-09-fopen-taint.md b/cpp/ql/lib/change-notes/2024-10-09-fopen-taint.md deleted file mode 100644 index d2516859a910..000000000000 --- a/cpp/ql/lib/change-notes/2024-10-09-fopen-taint.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added taint flow model for `fopen` and related functions. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/released/2.0.2.md b/cpp/ql/lib/change-notes/released/2.0.2.md new file mode 100644 index 000000000000..db3a11e55a8e --- /dev/null +++ b/cpp/ql/lib/change-notes/released/2.0.2.md @@ -0,0 +1,6 @@ +## 2.0.2 + +### Minor Analysis Improvements + +* Added taint flow model for `fopen` and related functions. +* The `SimpleRangeAnalysis` library (`semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis`) now generates more precise ranges for calls to `fgetc` and `getc`. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index fe974a4dbf37..81c7f1dbc13c 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.1 +lastReleaseVersion: 2.0.2 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index ba5db8c6e6f9..91af68ed6411 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 2.0.2-dev +version: 2.0.2 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 8eaccb0404dc..7896479549fc 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,12 @@ +## 1.2.5 + +### Minor Analysis Improvements + +* The `cpp/unclear-array-index-validation` ("Unclear validation of array index") query has been improved to reduce false positives increase true positives. +* Fixed false positives in the `cpp/uninitialized-local` ("Potentially uninitialized local variable") query if there are extraction errors in the function. +* The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to detect byte arrays. +* The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to recognize dynamic checks prior to possible dangerous widening. + ## 1.2.4 ### Minor Analysis Improvements diff --git a/cpp/ql/src/change-notes/2024-09-26-wcharcharconversion-false-positives.md b/cpp/ql/src/change-notes/2024-09-26-wcharcharconversion-false-positives.md deleted file mode 100644 index b0fa7a953c59..000000000000 --- a/cpp/ql/src/change-notes/2024-09-26-wcharcharconversion-false-positives.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to detect byte arrays. -* The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to recognize dynamic checks prior to possible dangerous widening. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-10-02-uninitialized-local.md b/cpp/ql/src/change-notes/2024-10-02-uninitialized-local.md deleted file mode 100644 index e34a942f38a6..000000000000 --- a/cpp/ql/src/change-notes/2024-10-02-uninitialized-local.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Fixed false positives in the `cpp/uninitialized-local` ("Potentially uninitialized local variable") query if there are extraction errors in the function. diff --git a/cpp/ql/src/change-notes/2024-10-07-unclear-array-index-validation.md b/cpp/ql/src/change-notes/2024-10-07-unclear-array-index-validation.md deleted file mode 100644 index b237afdd6be8..000000000000 --- a/cpp/ql/src/change-notes/2024-10-07-unclear-array-index-validation.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The `cpp/unclear-array-index-validation` ("Unclear validation of array index") query has been improved to reduce false positives increase true positives. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/released/1.2.5.md b/cpp/ql/src/change-notes/released/1.2.5.md new file mode 100644 index 000000000000..cf937d43e6b3 --- /dev/null +++ b/cpp/ql/src/change-notes/released/1.2.5.md @@ -0,0 +1,8 @@ +## 1.2.5 + +### Minor Analysis Improvements + +* The `cpp/unclear-array-index-validation` ("Unclear validation of array index") query has been improved to reduce false positives increase true positives. +* Fixed false positives in the `cpp/uninitialized-local` ("Potentially uninitialized local variable") query if there are extraction errors in the function. +* The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to detect byte arrays. +* The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to recognize dynamic checks prior to possible dangerous widening. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 172090f46b6d..40355f0807f9 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.4 +lastReleaseVersion: 1.2.5 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index d01ac2f048c2..eee6e064b22f 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.2.5-dev +version: 1.2.5 groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 989d5e74408f..eb646b9ce77f 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.27 + +No user-facing changes. + ## 1.7.26 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.27.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.27.md new file mode 100644 index 000000000000..7d323c891002 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.27.md @@ -0,0 +1,3 @@ +## 1.7.27 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index ca4c34e70d1b..5c0490dbda8e 100644 --- a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.26 +lastReleaseVersion: 1.7.27 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 3cab08a0f3ec..e02f2f0733ce 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.27-dev +version: 1.7.27 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 989d5e74408f..eb646b9ce77f 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.27 + +No user-facing changes. + ## 1.7.26 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.27.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.27.md new file mode 100644 index 000000000000..7d323c891002 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.27.md @@ -0,0 +1,3 @@ +## 1.7.27 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index ca4c34e70d1b..5c0490dbda8e 100644 --- a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.26 +lastReleaseVersion: 1.7.27 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index c46baf0b2518..d94e11459d4c 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.27-dev +version: 1.7.27 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 7e8378798830..302087e4f147 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 3.0.1 + +No user-facing changes. + ## 3.0.0 ### Breaking Changes diff --git a/csharp/ql/lib/change-notes/released/3.0.1.md b/csharp/ql/lib/change-notes/released/3.0.1.md new file mode 100644 index 000000000000..ac5998ace618 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/3.0.1.md @@ -0,0 +1,3 @@ +## 3.0.1 + +No user-facing changes. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 33d3a2cd1139..e3b15d965db6 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 3.0.0 +lastReleaseVersion: 3.0.1 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 55a99929ac87..1515544bc960 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 3.0.1-dev +version: 3.0.1 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 4c162b64d8f7..59a98aca72a2 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 ### Minor Analysis Improvements diff --git a/csharp/ql/src/change-notes/released/1.0.10.md b/csharp/ql/src/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/csharp/ql/src/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 6209cc5f88d5..90e7ec11d865 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.0.10-dev +version: 1.0.10 groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index 9589b67148fa..b62e06e3dff0 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.10.md b/go/ql/consistency-queries/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/go/ql/consistency-queries/codeql-pack.release.yml b/go/ql/consistency-queries/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 5a7ca8082a53..726aa918f891 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.10-dev +version: 1.0.10 groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index a9a8190e6acc..d3c6fcd4a611 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,11 @@ +## 2.1.1 + +### Minor Analysis Improvements + +* Added member predicates `StructTag.hasOwnFieldWithTag` and `Field.getTag`, which enable CodeQL queries to examine struct field tags. +* Added member predicate `InterfaceType.hasPrivateMethodWithQualifiedName`, which enables CodeQL queries to distinguish interfaces with matching non-exported method names that are declared in different packages, and are therefore incompatible. +* Local source models with the `stdin` source kind have been added for the variable `os.Stdin` and the functions `fmt.Scan`, `fmt.Scanf` and `fmt.Scanln`. You can optionally include threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see [Analyzing your code with CodeQL queries](https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>) and [Customizing your advanced setup for code scanning](https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models). + ## 2.1.0 ### Deprecated APIs diff --git a/go/ql/lib/change-notes/2024-09-03-tags-and-interface-ids.md b/go/ql/lib/change-notes/2024-09-03-tags-and-interface-ids.md deleted file mode 100644 index 749ae4cde998..000000000000 --- a/go/ql/lib/change-notes/2024-09-03-tags-and-interface-ids.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* Added member predicates `StructTag.hasOwnFieldWithTag` and `Field.getTag`, which enable CodeQL queries to examine struct field tags. -* Added member predicate `InterfaceType.hasPrivateMethodWithQualifiedName`, which enables CodeQL queries to distinguish interfaces with matching non-exported method names that are declared in different packages, and are therefore incompatible. diff --git a/go/ql/lib/change-notes/2024-08-29-add-stdin-threat-models.md b/go/ql/lib/change-notes/released/2.1.1.md similarity index 64% rename from go/ql/lib/change-notes/2024-08-29-add-stdin-threat-models.md rename to go/ql/lib/change-notes/released/2.1.1.md index d98ac68f1edc..7319120fd3cb 100644 --- a/go/ql/lib/change-notes/2024-08-29-add-stdin-threat-models.md +++ b/go/ql/lib/change-notes/released/2.1.1.md @@ -1,4 +1,7 @@ ---- -category: minorAnalysis ---- +## 2.1.1 + +### Minor Analysis Improvements + +* Added member predicates `StructTag.hasOwnFieldWithTag` and `Field.getTag`, which enable CodeQL queries to examine struct field tags. +* Added member predicate `InterfaceType.hasPrivateMethodWithQualifiedName`, which enables CodeQL queries to distinguish interfaces with matching non-exported method names that are declared in different packages, and are therefore incompatible. * Local source models with the `stdin` source kind have been added for the variable `os.Stdin` and the functions `fmt.Scan`, `fmt.Scanf` and `fmt.Scanln`. You can optionally include threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see [Analyzing your code with CodeQL queries](https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>) and [Customizing your advanced setup for code scanning](https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models). diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 487a1a58b2b8..576c2ea18d68 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.1.0 +lastReleaseVersion: 2.1.1 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 9cb5e3620117..ba6a48a29d49 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 2.1.1-dev +version: 2.1.1 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index 69a5ed3e9f83..bdb40a2d2bb4 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.1 + +No user-facing changes. + ## 1.1.0 ### Query Metadata Changes diff --git a/go/ql/src/change-notes/released/1.1.1.md b/go/ql/src/change-notes/released/1.1.1.md new file mode 100644 index 000000000000..7fb56d366105 --- /dev/null +++ b/go/ql/src/change-notes/released/1.1.1.md @@ -0,0 +1,3 @@ +## 1.1.1 + +No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 2ac15439f561..1a19084be3f7 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.0 +lastReleaseVersion: 1.1.1 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 0b3f5076bb6d..0dbc1fe67fae 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.1.1-dev +version: 1.1.1 groups: - go - queries diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index 4d632a2ae2d2..537e84b2c0e5 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/1.0.10.md b/java/ql/automodel/src/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/java/ql/automodel/src/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/java/ql/automodel/src/codeql-pack.release.yml b/java/ql/automodel/src/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index fe961cb4392c..7621f1900d53 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 1.0.10-dev +version: 1.0.10 groups: - java - automodel diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 5441126d72c9..6be0cdc10e5a 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.1.1 + +No user-facing changes. + ## 4.1.0 ### Deprecated APIs diff --git a/java/ql/lib/change-notes/released/4.1.1.md b/java/ql/lib/change-notes/released/4.1.1.md new file mode 100644 index 000000000000..23583cbad734 --- /dev/null +++ b/java/ql/lib/change-notes/released/4.1.1.md @@ -0,0 +1,3 @@ +## 4.1.1 + +No user-facing changes. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index d5b1bf88d10e..9c871cefc42c 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.1.0 +lastReleaseVersion: 4.1.1 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 0d4f67146c1b..23871cfb7d82 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 4.1.1-dev +version: 4.1.1 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 20e7a248aebb..a034dc0abf90 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.7 + +No user-facing changes. + ## 1.1.6 ### Minor Analysis Improvements diff --git a/java/ql/src/change-notes/released/1.1.7.md b/java/ql/src/change-notes/released/1.1.7.md new file mode 100644 index 000000000000..81505c0507a2 --- /dev/null +++ b/java/ql/src/change-notes/released/1.1.7.md @@ -0,0 +1,3 @@ +## 1.1.7 + +No user-facing changes. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 9e712a00a21d..759105565166 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.6 +lastReleaseVersion: 1.1.7 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index c8e95f52ca4a..82b14986199e 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.1.7-dev +version: 1.1.7 groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index bb77b4f1f496..6068cf26319d 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.2 + +No user-facing changes. + ## 2.0.1 No user-facing changes. diff --git a/javascript/ql/lib/change-notes/released/2.0.2.md b/javascript/ql/lib/change-notes/released/2.0.2.md new file mode 100644 index 000000000000..862ef0e9df7c --- /dev/null +++ b/javascript/ql/lib/change-notes/released/2.0.2.md @@ -0,0 +1,3 @@ +## 2.0.2 + +No user-facing changes. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index fe974a4dbf37..81c7f1dbc13c 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.1 +lastReleaseVersion: 2.0.2 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index bea3bbacd5fa..8cf13a5240ce 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.0.2-dev +version: 2.0.2 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index adf7daa3eb43..df7becd46de5 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.2.2 + +No user-facing changes. + ## 1.2.1 No user-facing changes. diff --git a/javascript/ql/src/change-notes/released/1.2.2.md b/javascript/ql/src/change-notes/released/1.2.2.md new file mode 100644 index 000000000000..7b520f6c258f --- /dev/null +++ b/javascript/ql/src/change-notes/released/1.2.2.md @@ -0,0 +1,3 @@ +## 1.2.2 + +No user-facing changes. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 73dd403938c9..0a70a9a01a7e 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.1 +lastReleaseVersion: 1.2.2 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 407aa03f7802..5aee59e9b015 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 1.2.2-dev +version: 1.2.2 groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 729794553521..e9c580c60cef 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/1.0.10.md b/misc/suite-helpers/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/misc/suite-helpers/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 76c86b26be6b..6b8eb63063ba 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.10-dev +version: 1.0.10 groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index 4cadb40bc2f5..4832015d920d 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,13 @@ +## 2.1.1 + +### Minor Analysis Improvements + +* Modelled that `re.finditer` returns an iterable of `re.Match` objects. This is now understood by the API graph in many cases. +* Type tracking, and hence the API graph, is now able to correctly trace trough comprehensions. +* More precise modelling of the dataflow through comprehensions. In particular, captured variables are now handled correctly. +* Dataflow out of yield is added, allowing proper tracing through generators. +* Added several models of standard library functions and classes, in anticipation of no longer extracting the standard library in a future release. + ## 2.1.0 ### New Features diff --git a/python/ql/lib/change-notes/2024-09-24-std-lib-models.md b/python/ql/lib/change-notes/2024-09-24-std-lib-models.md deleted file mode 100644 index 3166e0c8ff0f..000000000000 --- a/python/ql/lib/change-notes/2024-09-24-std-lib-models.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added several models of standard library functions and classes, in anticipation of no longer extracting the standard library in a future release. \ No newline at end of file diff --git a/python/ql/lib/change-notes/2024-10-01-comprehension-flow.md b/python/ql/lib/change-notes/2024-10-01-comprehension-flow.md deleted file mode 100644 index bc3165f05f33..000000000000 --- a/python/ql/lib/change-notes/2024-10-01-comprehension-flow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* More precise modelling of the dataflow through comprehensions. In particular, captured variables are now handled correctly. -* Dataflow out of yield is added, allowing proper tracing through generators. \ No newline at end of file diff --git a/python/ql/lib/change-notes/2024-10-03-typetracking-through-comprehensions.md b/python/ql/lib/change-notes/2024-10-03-typetracking-through-comprehensions.md deleted file mode 100644 index 72d853460305..000000000000 --- a/python/ql/lib/change-notes/2024-10-03-typetracking-through-comprehensions.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Type tracking, and hence the API graph, is now able to correctly trace trough comprehensions. \ No newline at end of file diff --git a/python/ql/lib/change-notes/2024-10-09-finditer-match.md b/python/ql/lib/change-notes/2024-10-09-finditer-match.md deleted file mode 100644 index ee2ccc1119a4..000000000000 --- a/python/ql/lib/change-notes/2024-10-09-finditer-match.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Modelled that `re.finditer` returns an iterable of `re.Match` objects. This is now understood by the API graph in many cases. \ No newline at end of file diff --git a/python/ql/lib/change-notes/released/2.1.1.md b/python/ql/lib/change-notes/released/2.1.1.md new file mode 100644 index 000000000000..949fcd07f7aa --- /dev/null +++ b/python/ql/lib/change-notes/released/2.1.1.md @@ -0,0 +1,9 @@ +## 2.1.1 + +### Minor Analysis Improvements + +* Modelled that `re.finditer` returns an iterable of `re.Match` objects. This is now understood by the API graph in many cases. +* Type tracking, and hence the API graph, is now able to correctly trace trough comprehensions. +* More precise modelling of the dataflow through comprehensions. In particular, captured variables are now handled correctly. +* Dataflow out of yield is added, allowing proper tracing through generators. +* Added several models of standard library functions and classes, in anticipation of no longer extracting the standard library in a future release. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index 487a1a58b2b8..576c2ea18d68 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.1.0 +lastReleaseVersion: 2.1.1 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 445940cdd889..dd92c1068daf 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 2.1.1-dev +version: 2.1.1 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index 21c9ebcf16f9..ea236eb11ba5 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,8 +1,12 @@ +## 1.3.1 + +No user-facing changes. + ## 1.3.0 ### New Queries -* The `py/cors-misconfiguration-with-credentials` query, which finds insecure CORS middleware configurations. +* The experimental `py/cors-misconfiguration-with-credentials` query, which finds insecure CORS middleware configurations. ## 1.2.2 diff --git a/python/ql/src/change-notes/released/1.3.1.md b/python/ql/src/change-notes/released/1.3.1.md new file mode 100644 index 000000000000..8dd9964197cb --- /dev/null +++ b/python/ql/src/change-notes/released/1.3.1.md @@ -0,0 +1,3 @@ +## 1.3.1 + +No user-facing changes. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index ec16350ed6fd..e71b6d081f15 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.3.0 +lastReleaseVersion: 1.3.1 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 3f5ee4e78041..52d6ee0b6032 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.3.1-dev +version: 1.3.1 groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index 59c058c1c45c..fcfaf0238c21 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.0.2 + +### Minor Analysis Improvements + +* The `ExtractionError` class has been split into `ExtractionError` and `ExtractionWarning`, reporting extraction errors and warnings respectively. + ## 2.0.1 No user-facing changes. diff --git a/ruby/ql/lib/change-notes/2024-10-03-extraction-warnings.md b/ruby/ql/lib/change-notes/released/2.0.2.md similarity index 77% rename from ruby/ql/lib/change-notes/2024-10-03-extraction-warnings.md rename to ruby/ql/lib/change-notes/released/2.0.2.md index 5d6128354c3b..9d7757a2e03e 100644 --- a/ruby/ql/lib/change-notes/2024-10-03-extraction-warnings.md +++ b/ruby/ql/lib/change-notes/released/2.0.2.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 2.0.2 + +### Minor Analysis Improvements + * The `ExtractionError` class has been split into `ExtractionError` and `ExtractionWarning`, reporting extraction errors and warnings respectively. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index fe974a4dbf37..81c7f1dbc13c 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.1 +lastReleaseVersion: 2.0.2 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index dc0b471a171d..53ea89afe3b1 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 2.0.2-dev +version: 2.0.2 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 5e9c68a56a01..363b517dec19 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.1.5 + +### Minor Analysis Improvements + +* The `rb/diagnostics/extraction-errors` diagnostic query has been split into `rb/diagnostics/extraction-errors` and `rb/diagnostics/extraction-warnings`, counting extraction errors and warnings respectively. + ## 1.1.4 No user-facing changes. diff --git a/ruby/ql/src/change-notes/2024-10-03-extraction-warnings.md b/ruby/ql/src/change-notes/released/1.1.5.md similarity index 82% rename from ruby/ql/src/change-notes/2024-10-03-extraction-warnings.md rename to ruby/ql/src/change-notes/released/1.1.5.md index ac97cd1e7ba2..fd55457a718c 100644 --- a/ruby/ql/src/change-notes/2024-10-03-extraction-warnings.md +++ b/ruby/ql/src/change-notes/released/1.1.5.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 1.1.5 + +### Minor Analysis Improvements + * The `rb/diagnostics/extraction-errors` diagnostic query has been split into `rb/diagnostics/extraction-errors` and `rb/diagnostics/extraction-warnings`, counting extraction errors and warnings respectively. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 26cbcd3f123b..df39a9de059d 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.4 +lastReleaseVersion: 1.1.5 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index b7eee713fbaa..2c0ea256429e 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.1.5-dev +version: 1.1.5 groups: - ruby - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index 52b731626290..7aaa7597d5bb 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/1.0.10.md b/shared/controlflow/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/controlflow/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 532b2fa69a09..0d1248c09815 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index 360dc9cc8bff..c9f031d51134 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.4 + +No user-facing changes. + ## 1.1.3 No user-facing changes. diff --git a/shared/dataflow/change-notes/released/1.1.4.md b/shared/dataflow/change-notes/released/1.1.4.md new file mode 100644 index 000000000000..b95051903c5a --- /dev/null +++ b/shared/dataflow/change-notes/released/1.1.4.md @@ -0,0 +1,3 @@ +## 1.1.4 + +No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 35e710ab1bf0..26cbcd3f123b 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.3 +lastReleaseVersion: 1.1.4 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index df5c8c4c38af..3d21af7c256b 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 1.1.4-dev +version: 1.1.4 groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 7857f62905c7..02a3541df616 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/mad/change-notes/released/1.0.10.md b/shared/mad/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/mad/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index ef3755c80bc4..b45f7415c81a 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 5878f9b564c0..992ad108bcd6 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/1.0.10.md b/shared/rangeanalysis/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index b4deed51c9d8..a11b83edace6 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index 01154f6c5f52..3a71d968b43c 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/regex/change-notes/released/1.0.10.md b/shared/regex/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/regex/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 5593197f674b..bfb63fdee77f 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 85bef6a32845..76edd23e4428 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/ssa/change-notes/released/1.0.10.md b/shared/ssa/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/ssa/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 7bc3773a575f..7e09739a333a 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index 9589b67148fa..b62e06e3dff0 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/1.0.10.md b/shared/threat-models/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/threat-models/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index dd4331d7e749..7609a088b6e9 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.10-dev +version: 1.0.10 library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index ba77e020439d..676b469b866a 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/1.0.10.md b/shared/tutorial/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/tutorial/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 2390ce7ad116..1cfbfb40c91c 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/CHANGELOG.md b/shared/typeflow/CHANGELOG.md index 93c030dee3e4..19badb815f98 100644 --- a/shared/typeflow/CHANGELOG.md +++ b/shared/typeflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/typeflow/change-notes/released/1.0.10.md b/shared/typeflow/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/typeflow/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/typeflow/codeql-pack.release.yml b/shared/typeflow/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/typeflow/codeql-pack.release.yml +++ b/shared/typeflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index 04f843aacb5f..430f9e468126 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true dependencies: diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index a4e57c221876..29b2bdbb3dae 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/1.0.10.md b/shared/typetracking/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/typetracking/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index e48446dc3e0b..d29f0c0bd6e4 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index acee82ce867b..0f6b529e512c 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/typos/change-notes/released/1.0.10.md b/shared/typos/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/typos/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 5eccd54b2afa..4e15f26a72c5 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index 2f918fd0416f..f81ed05cc13b 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/util/change-notes/released/1.0.10.md b/shared/util/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/util/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 508143471db4..d73aee511702 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true dependencies: null diff --git a/shared/xml/CHANGELOG.md b/shared/xml/CHANGELOG.md index 90afd761e7d4..bc002596b451 100644 --- a/shared/xml/CHANGELOG.md +++ b/shared/xml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/xml/change-notes/released/1.0.10.md b/shared/xml/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/xml/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/xml/codeql-pack.release.yml b/shared/xml/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/xml/codeql-pack.release.yml +++ b/shared/xml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index a81184e65886..56f477c27e19 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true dependencies: diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index 222c0ec037c6..a6804be01273 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/yaml/change-notes/released/1.0.10.md b/shared/yaml/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/yaml/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 1df4193b862f..b1e351ce1968 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index 5602ebc7d231..004e85afa62d 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.2 + +No user-facing changes. + ## 2.0.1 ### Minor Analysis Improvements diff --git a/swift/ql/lib/change-notes/released/2.0.2.md b/swift/ql/lib/change-notes/released/2.0.2.md new file mode 100644 index 000000000000..862ef0e9df7c --- /dev/null +++ b/swift/ql/lib/change-notes/released/2.0.2.md @@ -0,0 +1,3 @@ +## 2.0.2 + +No user-facing changes. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index fe974a4dbf37..81c7f1dbc13c 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.1 +lastReleaseVersion: 2.0.2 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 1904a1b1ca48..31dd6d915f3d 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 2.0.2-dev +version: 2.0.2 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index b47f96f9eb9e..daeeee421ba8 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/swift/ql/src/change-notes/released/1.0.10.md b/swift/ql/src/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/swift/ql/src/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 6fbae9403605..17bf94f219d8 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.0.10-dev +version: 1.0.10 groups: - swift - queries From abc498130083832dc592bd7b57bc581708cbcc0f Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 15 Oct 2024 11:30:03 +0100 Subject: [PATCH 118/217] Rust: Address QL-for-QL complaint. --- rust/ql/src/queries/summary/Stats.qll | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rust/ql/src/queries/summary/Stats.qll b/rust/ql/src/queries/summary/Stats.qll index c1f0bdd08961..242bb990e04a 100644 --- a/rust/ql/src/queries/summary/Stats.qll +++ b/rust/ql/src/queries/summary/Stats.qll @@ -20,4 +20,6 @@ int getLinesOfUserCode() { /** * Gets a count of the total number of control flow graph inconsistencies in the database. */ -int getTotalCfgInconsistencies() { result = sum(CfgConsistency::getCfgInconsistencyCounts(_)) } +int getTotalCfgInconsistencies() { + result = sum(string type | | CfgConsistency::getCfgInconsistencyCounts(type)) +} From 9ba804583774092cbb1634160cb74a3da7efb679 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Tue, 15 Oct 2024 11:06:20 +0000 Subject: [PATCH 119/217] Fix typos in changelog entries --- cpp/ql/src/CHANGELOG.md | 2 +- cpp/ql/src/change-notes/released/1.2.5.md | 2 +- python/ql/lib/CHANGELOG.md | 2 +- python/ql/lib/change-notes/released/2.1.1.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 7896479549fc..e73850bbfe96 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -2,7 +2,7 @@ ### Minor Analysis Improvements -* The `cpp/unclear-array-index-validation` ("Unclear validation of array index") query has been improved to reduce false positives increase true positives. +* The `cpp/unclear-array-index-validation` ("Unclear validation of array index") query has been improved to reduce false positives and increase true positives. * Fixed false positives in the `cpp/uninitialized-local` ("Potentially uninitialized local variable") query if there are extraction errors in the function. * The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to detect byte arrays. * The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to recognize dynamic checks prior to possible dangerous widening. diff --git a/cpp/ql/src/change-notes/released/1.2.5.md b/cpp/ql/src/change-notes/released/1.2.5.md index cf937d43e6b3..04aead25cb99 100644 --- a/cpp/ql/src/change-notes/released/1.2.5.md +++ b/cpp/ql/src/change-notes/released/1.2.5.md @@ -2,7 +2,7 @@ ### Minor Analysis Improvements -* The `cpp/unclear-array-index-validation` ("Unclear validation of array index") query has been improved to reduce false positives increase true positives. +* The `cpp/unclear-array-index-validation` ("Unclear validation of array index") query has been improved to reduce false positives and increase true positives. * Fixed false positives in the `cpp/uninitialized-local` ("Potentially uninitialized local variable") query if there are extraction errors in the function. * The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to detect byte arrays. * The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to recognize dynamic checks prior to possible dangerous widening. diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index 4832015d920d..c1f3765162e0 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -3,7 +3,7 @@ ### Minor Analysis Improvements * Modelled that `re.finditer` returns an iterable of `re.Match` objects. This is now understood by the API graph in many cases. -* Type tracking, and hence the API graph, is now able to correctly trace trough comprehensions. +* Type tracking, and hence the API graph, is now able to correctly trace through comprehensions. * More precise modelling of the dataflow through comprehensions. In particular, captured variables are now handled correctly. * Dataflow out of yield is added, allowing proper tracing through generators. * Added several models of standard library functions and classes, in anticipation of no longer extracting the standard library in a future release. diff --git a/python/ql/lib/change-notes/released/2.1.1.md b/python/ql/lib/change-notes/released/2.1.1.md index 949fcd07f7aa..bd2b31a218d9 100644 --- a/python/ql/lib/change-notes/released/2.1.1.md +++ b/python/ql/lib/change-notes/released/2.1.1.md @@ -3,7 +3,7 @@ ### Minor Analysis Improvements * Modelled that `re.finditer` returns an iterable of `re.Match` objects. This is now understood by the API graph in many cases. -* Type tracking, and hence the API graph, is now able to correctly trace trough comprehensions. +* Type tracking, and hence the API graph, is now able to correctly trace through comprehensions. * More precise modelling of the dataflow through comprehensions. In particular, captured variables are now handled correctly. * Dataflow out of yield is added, allowing proper tracing through generators. * Added several models of standard library functions and classes, in anticipation of no longer extracting the standard library in a future release. From 1ced5b44d7e725a9958a1a56581010ee6e488dea Mon Sep 17 00:00:00 2001 From: Taus Date: Mon, 7 Oct 2024 12:13:17 +0000 Subject: [PATCH 120/217] Python: Add test for type parameter defaults --- python/extractor/tests/parser/types_new.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/python/extractor/tests/parser/types_new.py b/python/extractor/tests/parser/types_new.py index 844ba4930edd..12e5eac0556c 100644 --- a/python/extractor/tests/parser/types_new.py +++ b/python/extractor/tests/parser/types_new.py @@ -3,3 +3,20 @@ def f[T6, T7: E2, *T8, **T9](): ... class C[T10, T11: E3, *T12, **T13]: ... + +# From PEP-696 (https://peps.python.org/pep-0696/#grammar-changes): + +# TypeVars +class Foo1[T14 = str]: ... + +# ParamSpecs +class Baz1[**P1 = [int, str]]: ... + +# TypeVarTuples +class Qux1[*Ts1 = *tuple[int, bool]]: ... + +# TypeAliases +type Foo2[T15, U1 = str] = Bar1[T15, U1] +type Baz2[**P2 = [int, str]] = Spam[**P2] +type Qux2[*Ts2 = *tuple[str]] = Ham[*Ts2] +type Rab[U2, T15 = str] = Bar2[T15, U2] From 882249ef824fe855f57de4273663622616686a19 Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 8 Oct 2024 12:25:13 +0000 Subject: [PATCH 121/217] Python: Add grammar support for type defaults Also fixes an oversight in the grammar: starred expressions should be allowed inside the subscript of an `Index` expression. --- python/extractor/tsg-python/tsp/grammar.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/python/extractor/tsg-python/tsp/grammar.js b/python/extractor/tsg-python/tsp/grammar.js index 3fc832cb4e55..ebef231f3621 100644 --- a/python/extractor/tsg-python/tsp/grammar.js +++ b/python/extractor/tsg-python/tsp/grammar.js @@ -589,17 +589,20 @@ module.exports = grammar({ typevar_parameter: $ => seq( field('name', $.identifier), - optional($._type_bound) + optional($._type_bound), + optional($._type_param_default) ), typevartuple_parameter: $ => seq( '*', field('name', $.identifier), + optional($._type_param_default) ), paramspec_parameter: $ => seq( '**', field('name', $.identifier), + optional($._type_param_default), ), _type_parameter: $ => choice( @@ -608,6 +611,11 @@ module.exports = grammar({ $.paramspec_parameter, ), + _type_param_default: $ => seq( + '=', + field('default', choice($.list_splat, $.expression)) + ), + parenthesized_list_splat: $ => prec(PREC.parenthesized_list_splat, seq( '(', choice( @@ -923,7 +931,7 @@ module.exports = grammar({ subscript: $ => prec(PREC.call, seq( field('value', $.primary_expression), '[', - commaSep1(field('subscript', choice($.expression, $.slice))), + commaSep1(field('subscript', choice($.list_splat, $.expression, $.slice))), optional(','), ']' )), From 6545bfffa7aa7711f7f6fac2e9a321912b24cc3d Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 8 Oct 2024 12:27:58 +0000 Subject: [PATCH 122/217] Python: Regenerate parser files Two new files -- alloc.h and array.h -- suddenly appeared. Presumably they are used by the somewhat newer version of tree-sitter. To be safe, I included them in this commit. --- .../extractor/tsg-python/tsp/src/grammar.json | 72 +- .../tsg-python/tsp/src/node-types.json | 55 + python/extractor/tsg-python/tsp/src/parser.c | 62872 ++++++++-------- .../tsg-python/tsp/src/tree_sitter/alloc.h | 54 + .../tsg-python/tsp/src/tree_sitter/array.h | 290 + .../tsg-python/tsp/src/tree_sitter/parser.h | 68 +- 6 files changed, 30873 insertions(+), 32538 deletions(-) create mode 100644 python/extractor/tsg-python/tsp/src/tree_sitter/alloc.h create mode 100644 python/extractor/tsg-python/tsp/src/tree_sitter/array.h diff --git a/python/extractor/tsg-python/tsp/src/grammar.json b/python/extractor/tsg-python/tsp/src/grammar.json index 957471765c3f..0f37f9865ece 100644 --- a/python/extractor/tsg-python/tsp/src/grammar.json +++ b/python/extractor/tsg-python/tsp/src/grammar.json @@ -1,4 +1,5 @@ { + "$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json", "name": "python", "word": "identifier", "rules": { @@ -2970,6 +2971,18 @@ "type": "BLANK" } ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_type_param_default" + }, + { + "type": "BLANK" + } + ] } ] }, @@ -2987,6 +3000,18 @@ "type": "SYMBOL", "name": "identifier" } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_type_param_default" + }, + { + "type": "BLANK" + } + ] } ] }, @@ -3004,6 +3029,18 @@ "type": "SYMBOL", "name": "identifier" } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_type_param_default" + }, + { + "type": "BLANK" + } + ] } ] }, @@ -3024,6 +3061,32 @@ } ] }, + "_type_param_default": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "=" + }, + { + "type": "FIELD", + "name": "default", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "list_splat" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + } + } + ] + }, "parenthesized_list_splat": { "type": "PREC", "value": 1, @@ -5006,6 +5069,10 @@ "content": { "type": "CHOICE", "members": [ + { + "type": "SYMBOL", + "name": "list_splat" + }, { "type": "SYMBOL", "name": "expression" @@ -5032,6 +5099,10 @@ "content": { "type": "CHOICE", "members": [ + { + "type": "SYMBOL", + "name": "list_splat" + }, { "type": "SYMBOL", "name": "expression" @@ -6612,4 +6683,3 @@ "parameter" ] } - diff --git a/python/extractor/tsg-python/tsp/src/node-types.json b/python/extractor/tsg-python/tsp/src/node-types.json index 515d815d8333..3d6613fac979 100644 --- a/python/extractor/tsg-python/tsp/src/node-types.json +++ b/python/extractor/tsg-python/tsp/src/node-types.json @@ -2691,6 +2691,7 @@ { "type": "module", "named": true, + "root": true, "fields": {}, "children": { "multiple": true, @@ -2809,6 +2810,20 @@ "type": "paramspec_parameter", "named": true, "fields": { + "default": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "list_splat", + "named": true + } + ] + }, "name": { "multiple": false, "required": true, @@ -3193,6 +3208,10 @@ "type": "expression", "named": true }, + { + "type": "list_splat", + "named": true + }, { "type": "slice", "named": true @@ -3476,6 +3495,20 @@ } ] }, + "default": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "list_splat", + "named": true + } + ] + }, "name": { "multiple": false, "required": true, @@ -3492,6 +3525,20 @@ "type": "typevartuple_parameter", "named": true, "fields": { + "default": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "list_splat", + "named": true + } + ] + }, "name": { "multiple": false, "required": true, @@ -3765,6 +3812,10 @@ "type": ":=", "named": false }, + { + "type": ";", + "named": false + }, { "type": "<", "named": false @@ -3821,6 +3872,10 @@ "type": "[", "named": false }, + { + "type": "\\", + "named": false + }, { "type": "]", "named": false diff --git a/python/extractor/tsg-python/tsp/src/parser.c b/python/extractor/tsg-python/tsp/src/parser.c index 05a076d96a24..f6968085e588 100644 --- a/python/extractor/tsg-python/tsp/src/parser.c +++ b/python/extractor/tsg-python/tsp/src/parser.c @@ -1,22 +1,21 @@ -#include +#include "tree_sitter/parser.h" #if defined(__GNUC__) || defined(__clang__) -#pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wmissing-field-initializers" #endif #define LANGUAGE_VERSION 14 -#define STATE_COUNT 1525 +#define STATE_COUNT 1532 #define LARGE_STATE_COUNT 155 -#define SYMBOL_COUNT 280 +#define SYMBOL_COUNT 283 #define ALIAS_COUNT 3 #define TOKEN_COUNT 108 #define EXTERNAL_TOKEN_COUNT 6 -#define FIELD_COUNT 53 +#define FIELD_COUNT 54 #define MAX_ALIAS_SEQUENCE_LENGTH 10 -#define PRODUCTION_ID_COUNT 161 +#define PRODUCTION_ID_COUNT 165 -enum { +enum ts_symbol_identifiers { sym_identifier = 1, anon_sym_import = 2, anon_sym_DOT = 3, @@ -107,7 +106,7 @@ enum { anon_sym_LBRACE2 = 88, sym__escape_interpolation = 89, sym_escape_sequence = 90, - sym__not_escape_sequence = 91, + anon_sym_BSLASH = 91, aux_sym_format_specifier_token1 = 92, sym_type_conversion = 93, sym_integer = 94, @@ -117,7 +116,7 @@ enum { sym_false = 98, sym_none = 99, sym_comment = 100, - sym__semicolon = 101, + anon_sym_SEMI = 101, sym__newline = 102, sym__indent = 103, sym__dedent = 104, @@ -199,106 +198,109 @@ enum { sym_typevartuple_parameter = 180, sym_paramspec_parameter = 181, sym__type_parameter = 182, - sym_parenthesized_list_splat = 183, - sym_argument_list = 184, - sym_decorated_definition = 185, - sym_decorator = 186, - sym_block = 187, - sym_expression_list = 188, - sym_dotted_name = 189, - sym__parameters = 190, - sym__patterns = 191, - sym_parameter = 192, - sym_pattern = 193, - sym_tuple_pattern = 194, - sym_list_pattern = 195, - sym_default_parameter = 196, - sym_typed_default_parameter = 197, - sym_list_splat_pattern = 198, - sym_dictionary_splat_pattern = 199, - sym__expression_within_for_in_clause = 200, - sym_expression = 201, - sym_primary_expression = 202, - sym_not_operator = 203, - sym_boolean_operator = 204, - sym_binary_operator = 205, - sym_unary_operator = 206, - sym_comparison_operator = 207, - sym_lambda = 208, - sym_lambda_within_for_in_clause = 209, - sym_assignment = 210, - sym_augmented_assignment = 211, - sym_pattern_list = 212, - sym__right_hand_side = 213, - sym_yield = 214, - sym_attribute = 215, - sym_subscript = 216, - sym_slice = 217, - sym_call = 218, - sym_typed_parameter = 219, - sym_type = 220, - sym_keyword_argument = 221, - sym_list = 222, - sym_set = 223, - sym_tuple = 224, - sym_dictionary = 225, - sym_pair = 226, - sym_list_comprehension = 227, - sym_dictionary_comprehension = 228, - sym_set_comprehension = 229, - sym_generator_expression = 230, - sym__comprehension_clauses = 231, - sym_parenthesized_expression = 232, - sym__collection_elements = 233, - sym_for_in_clause = 234, - sym_if_clause = 235, - sym_conditional_expression = 236, - sym_concatenated_string = 237, - sym_string = 238, - sym_string_content = 239, - sym_interpolation = 240, - sym__f_expression = 241, - sym_format_specifier = 242, - sym_await = 243, - sym_positional_separator = 244, - sym_keyword_separator = 245, - aux_sym_module_repeat1 = 246, - aux_sym__simple_statements_repeat1 = 247, - aux_sym_import_prefix_repeat1 = 248, - aux_sym__import_list_repeat1 = 249, - aux_sym_print_statement_repeat1 = 250, - aux_sym_assert_statement_repeat1 = 251, - aux_sym_if_statement_repeat1 = 252, - aux_sym_try_statement_repeat1 = 253, - aux_sym_try_statement_repeat2 = 254, - aux_sym_with_clause_repeat1 = 255, - aux_sym_cases_repeat1 = 256, - aux_sym_open_sequence_match_pattern_repeat1 = 257, - aux_sym_match_or_pattern_repeat1 = 258, - aux_sym_match_value_pattern_repeat1 = 259, - aux_sym_match_mapping_pattern_repeat1 = 260, - aux_sym_match_class_pattern_repeat1 = 261, - aux_sym_match_class_pattern_repeat2 = 262, - aux_sym_global_statement_repeat1 = 263, - aux_sym_type_parameters_repeat1 = 264, - aux_sym_argument_list_repeat1 = 265, - aux_sym_decorated_definition_repeat1 = 266, - aux_sym_expression_list_repeat1 = 267, - aux_sym__parameters_repeat1 = 268, - aux_sym__patterns_repeat1 = 269, - aux_sym_comparison_operator_repeat1 = 270, - aux_sym_subscript_repeat1 = 271, - aux_sym_dictionary_repeat1 = 272, - aux_sym__comprehension_clauses_repeat1 = 273, - aux_sym__collection_elements_repeat1 = 274, - aux_sym_for_in_clause_repeat1 = 275, - aux_sym_concatenated_string_repeat1 = 276, - aux_sym_string_repeat1 = 277, - aux_sym_string_content_repeat1 = 278, - aux_sym_format_specifier_repeat1 = 279, - alias_sym_format_expression = 280, - anon_alias_sym_isnot = 281, - anon_alias_sym_notin = 282, + sym__type_param_default = 183, + sym_parenthesized_list_splat = 184, + sym_argument_list = 185, + sym_decorated_definition = 186, + sym_decorator = 187, + sym_block = 188, + sym_expression_list = 189, + sym_dotted_name = 190, + sym__parameters = 191, + sym__patterns = 192, + sym_parameter = 193, + sym_pattern = 194, + sym_tuple_pattern = 195, + sym_list_pattern = 196, + sym_default_parameter = 197, + sym_typed_default_parameter = 198, + sym_list_splat_pattern = 199, + sym_dictionary_splat_pattern = 200, + sym__expression_within_for_in_clause = 201, + sym_expression = 202, + sym_primary_expression = 203, + sym_not_operator = 204, + sym_boolean_operator = 205, + sym_binary_operator = 206, + sym_unary_operator = 207, + sym_comparison_operator = 208, + sym_lambda = 209, + sym_lambda_within_for_in_clause = 210, + sym_assignment = 211, + sym_augmented_assignment = 212, + sym_pattern_list = 213, + sym__right_hand_side = 214, + sym_yield = 215, + sym_attribute = 216, + sym_subscript = 217, + sym_slice = 218, + sym_call = 219, + sym_typed_parameter = 220, + sym_type = 221, + sym_keyword_argument = 222, + sym_list = 223, + sym_set = 224, + sym_tuple = 225, + sym_dictionary = 226, + sym_pair = 227, + sym_list_comprehension = 228, + sym_dictionary_comprehension = 229, + sym_set_comprehension = 230, + sym_generator_expression = 231, + sym__comprehension_clauses = 232, + sym_parenthesized_expression = 233, + sym__collection_elements = 234, + sym_for_in_clause = 235, + sym_if_clause = 236, + sym_conditional_expression = 237, + sym_concatenated_string = 238, + sym_string = 239, + sym_string_content = 240, + sym_interpolation = 241, + sym__f_expression = 242, + sym__not_escape_sequence = 243, + sym_format_specifier = 244, + sym_await = 245, + sym_positional_separator = 246, + sym_keyword_separator = 247, + sym__semicolon = 248, + aux_sym_module_repeat1 = 249, + aux_sym__simple_statements_repeat1 = 250, + aux_sym_import_prefix_repeat1 = 251, + aux_sym__import_list_repeat1 = 252, + aux_sym_print_statement_repeat1 = 253, + aux_sym_assert_statement_repeat1 = 254, + aux_sym_if_statement_repeat1 = 255, + aux_sym_try_statement_repeat1 = 256, + aux_sym_try_statement_repeat2 = 257, + aux_sym_with_clause_repeat1 = 258, + aux_sym_cases_repeat1 = 259, + aux_sym_open_sequence_match_pattern_repeat1 = 260, + aux_sym_match_or_pattern_repeat1 = 261, + aux_sym_match_value_pattern_repeat1 = 262, + aux_sym_match_mapping_pattern_repeat1 = 263, + aux_sym_match_class_pattern_repeat1 = 264, + aux_sym_match_class_pattern_repeat2 = 265, + aux_sym_global_statement_repeat1 = 266, + aux_sym_type_parameters_repeat1 = 267, + aux_sym_argument_list_repeat1 = 268, + aux_sym_decorated_definition_repeat1 = 269, + aux_sym_expression_list_repeat1 = 270, + aux_sym__parameters_repeat1 = 271, + aux_sym__patterns_repeat1 = 272, + aux_sym_comparison_operator_repeat1 = 273, + aux_sym_subscript_repeat1 = 274, + aux_sym_dictionary_repeat1 = 275, + aux_sym__comprehension_clauses_repeat1 = 276, + aux_sym__collection_elements_repeat1 = 277, + aux_sym_for_in_clause_repeat1 = 278, + aux_sym_concatenated_string_repeat1 = 279, + aux_sym_string_repeat1 = 280, + aux_sym_string_content_repeat1 = 281, + aux_sym_format_specifier_repeat1 = 282, + alias_sym_format_expression = 283, + anon_alias_sym_isnot = 284, + anon_alias_sym_notin = 285, }; static const char * const ts_symbol_names[] = { @@ -393,7 +395,7 @@ static const char * const ts_symbol_names[] = { [anon_sym_LBRACE2] = "{", [sym__escape_interpolation] = "_escape_interpolation", [sym_escape_sequence] = "escape_sequence", - [sym__not_escape_sequence] = "_not_escape_sequence", + [anon_sym_BSLASH] = "\\", [aux_sym_format_specifier_token1] = "format_specifier_token1", [sym_type_conversion] = "type_conversion", [sym_integer] = "integer", @@ -403,7 +405,7 @@ static const char * const ts_symbol_names[] = { [sym_false] = "false", [sym_none] = "none", [sym_comment] = "comment", - [sym__semicolon] = "_semicolon", + [anon_sym_SEMI] = ";", [sym__newline] = "_newline", [sym__indent] = "_indent", [sym__dedent] = "_dedent", @@ -485,6 +487,7 @@ static const char * const ts_symbol_names[] = { [sym_typevartuple_parameter] = "typevartuple_parameter", [sym_paramspec_parameter] = "paramspec_parameter", [sym__type_parameter] = "_type_parameter", + [sym__type_param_default] = "_type_param_default", [sym_parenthesized_list_splat] = "parenthesized_list_splat", [sym_argument_list] = "argument_list", [sym_decorated_definition] = "decorated_definition", @@ -544,10 +547,12 @@ static const char * const ts_symbol_names[] = { [sym_string_content] = "string_content", [sym_interpolation] = "interpolation", [sym__f_expression] = "_f_expression", + [sym__not_escape_sequence] = "_not_escape_sequence", [sym_format_specifier] = "format_specifier", [sym_await] = "await", [sym_positional_separator] = "positional_separator", [sym_keyword_separator] = "keyword_separator", + [sym__semicolon] = "_semicolon", [aux_sym_module_repeat1] = "module_repeat1", [aux_sym__simple_statements_repeat1] = "_simple_statements_repeat1", [aux_sym_import_prefix_repeat1] = "import_prefix_repeat1", @@ -679,7 +684,7 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_LBRACE2] = anon_sym_LBRACE, [sym__escape_interpolation] = sym__escape_interpolation, [sym_escape_sequence] = sym_escape_sequence, - [sym__not_escape_sequence] = sym__not_escape_sequence, + [anon_sym_BSLASH] = anon_sym_BSLASH, [aux_sym_format_specifier_token1] = aux_sym_format_specifier_token1, [sym_type_conversion] = sym_type_conversion, [sym_integer] = sym_integer, @@ -689,7 +694,7 @@ static const TSSymbol ts_symbol_map[] = { [sym_false] = sym_false, [sym_none] = sym_none, [sym_comment] = sym_comment, - [sym__semicolon] = sym__semicolon, + [anon_sym_SEMI] = anon_sym_SEMI, [sym__newline] = sym__newline, [sym__indent] = sym__indent, [sym__dedent] = sym__dedent, @@ -771,6 +776,7 @@ static const TSSymbol ts_symbol_map[] = { [sym_typevartuple_parameter] = sym_typevartuple_parameter, [sym_paramspec_parameter] = sym_paramspec_parameter, [sym__type_parameter] = sym__type_parameter, + [sym__type_param_default] = sym__type_param_default, [sym_parenthesized_list_splat] = sym_parenthesized_list_splat, [sym_argument_list] = sym_argument_list, [sym_decorated_definition] = sym_decorated_definition, @@ -830,10 +836,12 @@ static const TSSymbol ts_symbol_map[] = { [sym_string_content] = sym_string_content, [sym_interpolation] = sym_interpolation, [sym__f_expression] = sym__f_expression, + [sym__not_escape_sequence] = sym__not_escape_sequence, [sym_format_specifier] = sym_format_specifier, [sym_await] = sym_await, [sym_positional_separator] = sym_positional_separator, [sym_keyword_separator] = sym_keyword_separator, + [sym__semicolon] = sym__semicolon, [aux_sym_module_repeat1] = aux_sym_module_repeat1, [aux_sym__simple_statements_repeat1] = aux_sym__simple_statements_repeat1, [aux_sym_import_prefix_repeat1] = aux_sym_import_prefix_repeat1, @@ -1238,9 +1246,9 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, - [sym__not_escape_sequence] = { - .visible = false, - .named = true, + [anon_sym_BSLASH] = { + .visible = true, + .named = false, }, [aux_sym_format_specifier_token1] = { .visible = false, @@ -1278,9 +1286,9 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, - [sym__semicolon] = { - .visible = false, - .named = true, + [anon_sym_SEMI] = { + .visible = true, + .named = false, }, [sym__newline] = { .visible = false, @@ -1606,6 +1614,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = false, .named = true, }, + [sym__type_param_default] = { + .visible = false, + .named = true, + }, [sym_parenthesized_list_splat] = { .visible = true, .named = true, @@ -1846,6 +1858,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = false, .named = true, }, + [sym__not_escape_sequence] = { + .visible = false, + .named = true, + }, [sym_format_specifier] = { .visible = true, .named = true, @@ -1862,6 +1878,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, + [sym__semicolon] = { + .visible = false, + .named = true, + }, [aux_sym_module_repeat1] = { .visible = false, .named = false, @@ -2012,7 +2032,7 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { }, }; -enum { +enum ts_field_identifiers { field_alias = 1, field_alternative = 2, field_argument = 3, @@ -2027,45 +2047,46 @@ enum { field_condition = 12, field_consequence = 13, field_content = 14, - field_definition = 15, - field_element = 16, - field_expression = 17, - field_function = 18, - field_guard = 19, - field_imaginary = 20, - field_inner = 21, - field_interpolation = 22, - field_key = 23, - field_kwarg = 24, - field_left = 25, - field_module_name = 26, - field_name = 27, - field_object = 28, - field_operator = 29, - field_operators = 30, - field_parameters = 31, - field_pattern = 32, - field_prefix = 33, - field_prefix_operator = 34, - field_real = 35, - field_return_type = 36, - field_right = 37, - field_start = 38, - field_step = 39, - field_stop = 40, - field_string_content = 41, - field_subject = 42, - field_subscript = 43, - field_suffix = 44, - field_superclasses = 45, - field_target = 46, - field_test = 47, - field_trailing_comma = 48, - field_type = 49, - field_type_parameter = 50, - field_type_parameters = 51, - field_value = 52, - field_vararg = 53, + field_default = 15, + field_definition = 16, + field_element = 17, + field_expression = 18, + field_function = 19, + field_guard = 20, + field_imaginary = 21, + field_inner = 22, + field_interpolation = 23, + field_key = 24, + field_kwarg = 25, + field_left = 26, + field_module_name = 27, + field_name = 28, + field_object = 29, + field_operator = 30, + field_operators = 31, + field_parameters = 32, + field_pattern = 33, + field_prefix = 34, + field_prefix_operator = 35, + field_real = 36, + field_return_type = 37, + field_right = 38, + field_start = 39, + field_step = 40, + field_stop = 41, + field_string_content = 42, + field_subject = 43, + field_subscript = 44, + field_suffix = 45, + field_superclasses = 46, + field_target = 47, + field_test = 48, + field_trailing_comma = 49, + field_type = 50, + field_type_parameter = 51, + field_type_parameters = 52, + field_value = 53, + field_vararg = 54, }; static const char * const ts_field_names[] = { @@ -2084,6 +2105,7 @@ static const char * const ts_field_names[] = { [field_condition] = "condition", [field_consequence] = "consequence", [field_content] = "content", + [field_default] = "default", [field_definition] = "definition", [field_element] = "element", [field_expression] = "expression", @@ -2192,8 +2214,8 @@ static const TSFieldMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { [66] = {.index = 94, .length = 2}, [67] = {.index = 43, .length = 1}, [68] = {.index = 96, .length = 1}, - [69] = {.index = 97, .length = 1}, - [70] = {.index = 98, .length = 2}, + [69] = {.index = 97, .length = 2}, + [70] = {.index = 99, .length = 1}, [71] = {.index = 100, .length = 2}, [72] = {.index = 100, .length = 2}, [74] = {.index = 102, .length = 1}, @@ -2207,82 +2229,86 @@ static const TSFieldMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { [82] = {.index = 121, .length = 2}, [83] = {.index = 123, .length = 1}, [84] = {.index = 124, .length = 2}, - [85] = {.index = 126, .length = 1}, - [86] = {.index = 127, .length = 3}, - [87] = {.index = 130, .length = 3}, - [88] = {.index = 133, .length = 3}, - [89] = {.index = 136, .length = 3}, - [90] = {.index = 139, .length = 3}, - [91] = {.index = 142, .length = 3}, - [92] = {.index = 85, .length = 2}, - [93] = {.index = 145, .length = 1}, - [94] = {.index = 146, .length = 1}, - [95] = {.index = 147, .length = 2}, + [85] = {.index = 126, .length = 2}, + [86] = {.index = 128, .length = 1}, + [87] = {.index = 129, .length = 3}, + [88] = {.index = 132, .length = 3}, + [89] = {.index = 135, .length = 3}, + [90] = {.index = 138, .length = 3}, + [91] = {.index = 141, .length = 3}, + [92] = {.index = 144, .length = 3}, + [93] = {.index = 85, .length = 2}, + [94] = {.index = 147, .length = 1}, + [95] = {.index = 148, .length = 1}, [96] = {.index = 149, .length = 3}, [97] = {.index = 152, .length = 2}, - [98] = {.index = 154, .length = 1}, - [99] = {.index = 155, .length = 2}, + [98] = {.index = 154, .length = 2}, + [99] = {.index = 156, .length = 1}, [100] = {.index = 157, .length = 2}, - [101] = {.index = 159, .length = 4}, - [102] = {.index = 163, .length = 2}, - [103] = {.index = 165, .length = 4}, - [104] = {.index = 169, .length = 4}, - [105] = {.index = 173, .length = 2}, - [106] = {.index = 175, .length = 3}, - [107] = {.index = 178, .length = 3}, - [108] = {.index = 181, .length = 4}, - [109] = {.index = 185, .length = 2}, - [110] = {.index = 187, .length = 1}, - [111] = {.index = 188, .length = 2}, - [112] = {.index = 190, .length = 2}, - [113] = {.index = 192, .length = 4}, - [114] = {.index = 196, .length = 4}, - [115] = {.index = 200, .length = 4}, - [116] = {.index = 204, .length = 4}, - [117] = {.index = 208, .length = 4}, - [118] = {.index = 212, .length = 3}, - [119] = {.index = 215, .length = 2}, - [120] = {.index = 217, .length = 2}, - [121] = {.index = 219, .length = 2}, - [122] = {.index = 221, .length = 3}, - [123] = {.index = 224, .length = 5}, - [124] = {.index = 229, .length = 3}, - [125] = {.index = 232, .length = 4}, - [126] = {.index = 236, .length = 4}, - [127] = {.index = 240, .length = 4}, - [128] = {.index = 244, .length = 4}, - [129] = {.index = 248, .length = 2}, - [130] = {.index = 250, .length = 1}, - [131] = {.index = 251, .length = 3}, - [132] = {.index = 254, .length = 1}, - [133] = {.index = 255, .length = 2}, - [134] = {.index = 257, .length = 2}, - [135] = {.index = 259, .length = 1}, - [136] = {.index = 260, .length = 4}, - [137] = {.index = 264, .length = 5}, - [138] = {.index = 269, .length = 5}, - [139] = {.index = 274, .length = 3}, - [140] = {.index = 277, .length = 3}, - [141] = {.index = 280, .length = 4}, - [142] = {.index = 284, .length = 4}, - [143] = {.index = 288, .length = 4}, - [144] = {.index = 292, .length = 5}, - [145] = {.index = 297, .length = 5}, - [146] = {.index = 302, .length = 3}, - [147] = {.index = 305, .length = 4}, - [148] = {.index = 309, .length = 3}, - [149] = {.index = 312, .length = 3}, - [150] = {.index = 315, .length = 5}, - [151] = {.index = 320, .length = 5}, - [152] = {.index = 325, .length = 5}, - [153] = {.index = 330, .length = 5}, - [154] = {.index = 335, .length = 5}, - [155] = {.index = 340, .length = 3}, - [156] = {.index = 343, .length = 4}, - [157] = {.index = 347, .length = 2}, - [158] = {.index = 349, .length = 6}, - [159] = {.index = 355, .length = 6}, - [160] = {.index = 361, .length = 4}, + [101] = {.index = 159, .length = 2}, + [102] = {.index = 161, .length = 4}, + [103] = {.index = 165, .length = 2}, + [104] = {.index = 167, .length = 4}, + [105] = {.index = 171, .length = 4}, + [106] = {.index = 175, .length = 2}, + [107] = {.index = 177, .length = 3}, + [108] = {.index = 180, .length = 3}, + [109] = {.index = 183, .length = 4}, + [110] = {.index = 187, .length = 2}, + [111] = {.index = 189, .length = 2}, + [112] = {.index = 191, .length = 1}, + [113] = {.index = 192, .length = 1}, + [114] = {.index = 193, .length = 3}, + [115] = {.index = 196, .length = 2}, + [116] = {.index = 198, .length = 2}, + [117] = {.index = 200, .length = 4}, + [118] = {.index = 204, .length = 4}, + [119] = {.index = 208, .length = 4}, + [120] = {.index = 212, .length = 4}, + [121] = {.index = 216, .length = 4}, + [122] = {.index = 220, .length = 3}, + [123] = {.index = 223, .length = 2}, + [124] = {.index = 225, .length = 2}, + [125] = {.index = 227, .length = 2}, + [126] = {.index = 229, .length = 3}, + [127] = {.index = 232, .length = 5}, + [128] = {.index = 237, .length = 3}, + [129] = {.index = 240, .length = 4}, + [130] = {.index = 244, .length = 4}, + [131] = {.index = 248, .length = 4}, + [132] = {.index = 252, .length = 4}, + [133] = {.index = 256, .length = 2}, + [134] = {.index = 258, .length = 1}, + [135] = {.index = 259, .length = 3}, + [136] = {.index = 262, .length = 1}, + [137] = {.index = 263, .length = 2}, + [138] = {.index = 265, .length = 2}, + [139] = {.index = 267, .length = 1}, + [140] = {.index = 268, .length = 4}, + [141] = {.index = 272, .length = 5}, + [142] = {.index = 277, .length = 5}, + [143] = {.index = 282, .length = 3}, + [144] = {.index = 285, .length = 3}, + [145] = {.index = 288, .length = 4}, + [146] = {.index = 292, .length = 4}, + [147] = {.index = 296, .length = 4}, + [148] = {.index = 300, .length = 5}, + [149] = {.index = 305, .length = 5}, + [150] = {.index = 310, .length = 3}, + [151] = {.index = 313, .length = 4}, + [152] = {.index = 317, .length = 3}, + [153] = {.index = 320, .length = 3}, + [154] = {.index = 323, .length = 5}, + [155] = {.index = 328, .length = 5}, + [156] = {.index = 333, .length = 5}, + [157] = {.index = 338, .length = 5}, + [158] = {.index = 343, .length = 5}, + [159] = {.index = 348, .length = 3}, + [160] = {.index = 351, .length = 4}, + [161] = {.index = 355, .length = 2}, + [162] = {.index = 357, .length = 6}, + [163] = {.index = 363, .length = 6}, + [164] = {.index = 369, .length = 4}, }; static const TSFieldMapEntry ts_field_map_entries[] = { @@ -2444,10 +2470,10 @@ static const TSFieldMapEntry ts_field_map_entries[] = { [96] = {field_stop, 1}, [97] = - {field_start, 0}, - [98] = {field_subscript, 2}, {field_value, 0}, + [99] = + {field_start, 0}, [100] = {field_operators, 0}, {field_operators, 1}, @@ -2487,38 +2513,38 @@ static const TSFieldMapEntry ts_field_map_entries[] = { {field_bound, 1, .inherited = true}, {field_name, 0}, [126] = + {field_default, 1, .inherited = true}, + {field_name, 0}, + [128] = {field_type_parameter, 1}, - [127] = + [129] = {field_body, 4}, {field_name, 1}, {field_parameters, 2}, - [130] = + [132] = {field_name, 1}, {field_type_parameters, 2}, {field_value, 4}, - [133] = + [135] = {field_body, 3}, {field_body, 4}, {field_name, 1}, - [136] = + [138] = {field_body, 4}, {field_name, 1}, {field_type_parameters, 2}, - [139] = + [141] = {field_body, 4}, {field_name, 1}, {field_superclasses, 2}, - [142] = + [144] = {field_left, 0}, {field_right, 4}, {field_type, 2}, - [145] = + [147] = {field_step, 2}, - [146] = + [148] = {field_subscript, 1}, - [147] = - {field_start, 0}, - {field_stop, 2}, [149] = {field_subscript, 2}, {field_subscript, 3, .inherited = true}, @@ -2527,275 +2553,287 @@ static const TSFieldMapEntry ts_field_map_entries[] = { {field_subscript, 0, .inherited = true}, {field_subscript, 1, .inherited = true}, [154] = + {field_start, 0}, + {field_stop, 2}, + [156] = {field_name, 4, .inherited = true}, - [155] = + [157] = {field_module_name, 1}, {field_name, 4, .inherited = true}, - [157] = + [159] = {field_left, 1}, {field_right, 3}, - [159] = + [161] = {field_alternative, 4, .inherited = true}, {field_alternative, 5}, {field_condition, 1}, {field_consequence, 3}, - [163] = + [165] = {field_alternative, 0, .inherited = true}, {field_alternative, 1, .inherited = true}, - [165] = + [167] = {field_alternative, 5}, {field_condition, 1}, {field_consequence, 3}, {field_consequence, 4}, - [169] = + [171] = {field_alternative, 5, .inherited = true}, {field_condition, 1}, {field_consequence, 3}, {field_consequence, 4}, - [173] = + [175] = {field_body, 4}, {field_body, 5}, - [175] = + [177] = {field_body, 5}, {field_name, 2}, {field_parameters, 3}, - [178] = + [180] = {field_body, 5}, {field_left, 1}, {field_right, 3}, - [181] = + [183] = {field_alternative, 5}, {field_body, 3}, {field_body, 4}, {field_condition, 1}, - [185] = + [187] = {field_prefix_operator, 0}, {field_real, 1}, - [187] = + [189] = + {field_default, 2, .inherited = true}, + {field_name, 1}, + [191] = {field_bound, 1}, - [188] = + [192] = + {field_default, 1}, + [193] = + {field_bound, 1, .inherited = true}, + {field_default, 2, .inherited = true}, + {field_name, 0}, + [196] = {field_type_parameter, 1}, {field_type_parameter, 2, .inherited = true}, - [190] = + [198] = {field_type_parameter, 0, .inherited = true}, {field_type_parameter, 1, .inherited = true}, - [192] = + [200] = {field_body, 4}, {field_body, 5}, {field_name, 1}, {field_parameters, 2}, - [196] = + [204] = {field_body, 5}, {field_name, 1}, {field_parameters, 3}, {field_type_parameters, 2}, - [200] = + [208] = {field_body, 4}, {field_body, 5}, {field_name, 1}, {field_type_parameters, 2}, - [204] = + [212] = {field_body, 5}, {field_name, 1}, {field_superclasses, 3}, {field_type_parameters, 2}, - [208] = + [216] = {field_body, 4}, {field_body, 5}, {field_name, 1}, {field_superclasses, 2}, - [212] = + [220] = {field_name, 0}, {field_type, 2}, {field_value, 4}, - [215] = + [223] = {field_step, 3}, {field_stop, 1}, - [217] = + [225] = {field_start, 0}, {field_step, 3}, - [219] = + [227] = {field_left, 2}, {field_right, 4}, - [221] = + [229] = {field_left, 1}, {field_right, 3}, {field_right, 4}, - [224] = + [232] = {field_alternative, 5, .inherited = true}, {field_alternative, 6}, {field_condition, 1}, {field_consequence, 3}, {field_consequence, 4}, - [229] = + [237] = {field_body, 6}, {field_left, 2}, {field_right, 4}, - [232] = + [240] = {field_body, 5}, {field_body, 6}, {field_name, 2}, {field_parameters, 3}, - [236] = + [244] = {field_body, 6}, {field_name, 2}, {field_parameters, 4}, {field_type_parameters, 3}, - [240] = + [248] = {field_alternative, 6}, {field_body, 5}, {field_left, 1}, {field_right, 3}, - [244] = + [252] = {field_body, 5}, {field_body, 6}, {field_left, 1}, {field_right, 3}, - [248] = + [256] = {field_body, 3}, {field_type, 1}, - [250] = + [258] = {field_content, 1}, - [251] = + [259] = {field_imaginary, 2}, {field_operator, 1}, {field_real, 0}, - [254] = + [262] = {field_test, 1}, - [255] = + [263] = {field_body, 3}, {field_pattern, 1}, - [257] = + [265] = {field_alias, 2}, {field_pattern, 0}, - [259] = + [267] = {field_class, 0}, - [260] = + [268] = {field_body, 6}, {field_name, 1}, {field_parameters, 2}, {field_return_type, 4}, - [264] = + [272] = {field_body, 5}, {field_body, 6}, {field_name, 1}, {field_parameters, 3}, {field_type_parameters, 2}, - [269] = + [277] = {field_body, 5}, {field_body, 6}, {field_name, 1}, {field_superclasses, 3}, {field_type_parameters, 2}, - [274] = + [282] = {field_start, 0}, {field_step, 4}, {field_stop, 2}, - [277] = + [285] = {field_left, 2}, {field_right, 4}, {field_right, 5}, - [280] = + [288] = {field_alternative, 7}, {field_body, 6}, {field_left, 2}, {field_right, 4}, - [284] = + [292] = {field_body, 6}, {field_body, 7}, {field_left, 2}, {field_right, 4}, - [288] = + [296] = {field_body, 7}, {field_name, 2}, {field_parameters, 3}, {field_return_type, 5}, - [292] = + [300] = {field_body, 6}, {field_body, 7}, {field_name, 2}, {field_parameters, 4}, {field_type_parameters, 3}, - [297] = + [305] = {field_alternative, 7}, {field_body, 5}, {field_body, 6}, {field_left, 1}, {field_right, 3}, - [302] = + [310] = {field_body, 3}, {field_body, 4}, {field_type, 1}, - [305] = + [313] = {field_imaginary, 3}, {field_operator, 2}, {field_prefix_operator, 0}, {field_real, 1}, - [309] = + [317] = {field_body, 3}, {field_body, 4}, {field_pattern, 1}, - [312] = + [320] = {field_body, 4}, {field_guard, 2}, {field_pattern, 1}, - [315] = + [323] = {field_body, 6}, {field_body, 7}, {field_name, 1}, {field_parameters, 2}, {field_return_type, 4}, - [320] = + [328] = {field_body, 7}, {field_name, 1}, {field_parameters, 3}, {field_return_type, 5}, {field_type_parameters, 2}, - [325] = + [333] = {field_alternative, 8}, {field_body, 6}, {field_body, 7}, {field_left, 2}, {field_right, 4}, - [330] = + [338] = {field_body, 7}, {field_body, 8}, {field_name, 2}, {field_parameters, 3}, {field_return_type, 5}, - [335] = + [343] = {field_body, 8}, {field_name, 2}, {field_parameters, 4}, {field_return_type, 6}, {field_type_parameters, 3}, - [340] = + [348] = {field_alias, 3}, {field_body, 5}, {field_type, 1}, - [343] = + [351] = {field_body, 4}, {field_body, 5}, {field_guard, 2}, {field_pattern, 1}, - [347] = + [355] = {field_attribute, 0}, {field_value, 2}, - [349] = + [357] = {field_body, 7}, {field_body, 8}, {field_name, 1}, {field_parameters, 3}, {field_return_type, 5}, {field_type_parameters, 2}, - [355] = + [363] = {field_body, 8}, {field_body, 9}, {field_name, 2}, {field_parameters, 4}, {field_return_type, 6}, {field_type_parameters, 3}, - [361] = + [369] = {field_alias, 3}, {field_body, 5}, {field_body, 6}, @@ -2863,67 +2901,67 @@ static const TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE [79] = { [3] = sym_block, }, - [86] = { + [87] = { [4] = sym_block, }, - [89] = { + [90] = { [4] = sym_block, }, - [90] = { + [91] = { [4] = sym_block, }, - [92] = { + [93] = { [1] = sym_parenthesized_expression, }, - [101] = { + [102] = { [3] = sym_block, }, - [106] = { + [107] = { [5] = sym_block, }, - [107] = { + [108] = { [5] = sym_block, }, - [114] = { + [118] = { [5] = sym_block, }, - [116] = { + [120] = { [5] = sym_block, }, - [124] = { + [128] = { [6] = sym_block, }, - [126] = { + [130] = { [6] = sym_block, }, - [127] = { + [131] = { [5] = sym_block, }, - [129] = { + [133] = { [3] = sym_block, }, - [133] = { + [137] = { [3] = sym_block, }, - [136] = { + [140] = { [6] = sym_block, }, - [141] = { + [145] = { [6] = sym_block, }, - [143] = { + [147] = { [7] = sym_block, }, - [149] = { + [153] = { [4] = sym_block, }, - [151] = { + [155] = { [7] = sym_block, }, - [154] = { + [158] = { [8] = sym_block, }, - [155] = { + [159] = { [5] = sym_block, }, }; @@ -2955,66 +2993,66 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [7] = 7, [8] = 8, [9] = 9, - [10] = 8, + [10] = 10, [11] = 11, [12] = 12, [13] = 13, [14] = 14, [15] = 15, [16] = 16, - [17] = 5, - [18] = 13, - [19] = 14, + [17] = 17, + [18] = 18, + [19] = 19, [20] = 20, - [21] = 16, + [21] = 4, [22] = 22, [23] = 23, [24] = 24, - [25] = 6, - [26] = 3, - [27] = 12, - [28] = 15, - [29] = 29, - [30] = 30, - [31] = 22, - [32] = 23, - [33] = 33, - [34] = 34, - [35] = 35, + [25] = 25, + [26] = 26, + [27] = 27, + [28] = 11, + [29] = 2, + [30] = 5, + [31] = 31, + [32] = 32, + [33] = 8, + [34] = 32, + [35] = 31, [36] = 36, - [37] = 20, + [37] = 10, [38] = 38, - [39] = 39, - [40] = 36, - [41] = 41, - [42] = 9, - [43] = 24, - [44] = 4, - [45] = 41, - [46] = 39, - [47] = 34, - [48] = 35, - [49] = 49, - [50] = 2, - [51] = 7, - [52] = 33, - [53] = 30, - [54] = 54, - [55] = 54, - [56] = 11, - [57] = 38, - [58] = 49, - [59] = 29, + [39] = 27, + [40] = 26, + [41] = 6, + [42] = 7, + [43] = 25, + [44] = 24, + [45] = 23, + [46] = 22, + [47] = 20, + [48] = 19, + [49] = 18, + [50] = 17, + [51] = 36, + [52] = 16, + [53] = 15, + [54] = 14, + [55] = 13, + [56] = 12, + [57] = 3, + [58] = 38, + [59] = 9, [60] = 60, - [61] = 60, - [62] = 60, - [63] = 63, - [64] = 64, - [65] = 60, - [66] = 60, - [67] = 63, - [68] = 60, - [69] = 60, + [61] = 61, + [62] = 62, + [63] = 61, + [64] = 61, + [65] = 62, + [66] = 61, + [67] = 61, + [68] = 61, + [69] = 61, [70] = 70, [71] = 70, [72] = 72, @@ -3028,141 +3066,141 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [80] = 80, [81] = 81, [82] = 82, - [83] = 80, + [83] = 83, [84] = 84, - [85] = 74, + [85] = 85, [86] = 86, - [87] = 82, + [87] = 87, [88] = 88, [89] = 89, - [90] = 84, - [91] = 72, - [92] = 92, - [93] = 93, - [94] = 77, + [90] = 73, + [91] = 85, + [92] = 80, + [93] = 81, + [94] = 82, [95] = 95, [96] = 96, - [97] = 97, + [97] = 83, [98] = 76, - [99] = 89, + [99] = 74, [100] = 100, - [101] = 78, - [102] = 102, - [103] = 103, + [101] = 101, + [102] = 96, + [103] = 75, [104] = 104, - [105] = 105, - [106] = 102, - [107] = 81, - [108] = 108, - [109] = 96, - [110] = 88, - [111] = 93, - [112] = 112, - [113] = 105, + [105] = 88, + [106] = 84, + [107] = 77, + [108] = 86, + [109] = 89, + [110] = 101, + [111] = 111, + [112] = 79, + [113] = 78, [114] = 114, [115] = 115, [116] = 116, - [117] = 79, - [118] = 73, - [119] = 108, - [120] = 92, - [121] = 116, - [122] = 115, - [123] = 104, - [124] = 97, - [125] = 103, - [126] = 100, - [127] = 95, - [128] = 112, - [129] = 86, - [130] = 114, + [117] = 117, + [118] = 104, + [119] = 100, + [120] = 95, + [121] = 121, + [122] = 122, + [123] = 121, + [124] = 72, + [125] = 116, + [126] = 117, + [127] = 111, + [128] = 122, + [129] = 114, + [130] = 115, [131] = 131, [132] = 132, [133] = 133, - [134] = 133, - [135] = 135, - [136] = 135, + [134] = 134, + [135] = 133, + [136] = 133, [137] = 133, - [138] = 133, - [139] = 133, - [140] = 133, - [141] = 135, - [142] = 135, - [143] = 135, - [144] = 135, + [138] = 134, + [139] = 134, + [140] = 134, + [141] = 134, + [142] = 134, + [143] = 133, + [144] = 134, [145] = 133, - [146] = 135, + [146] = 133, [147] = 147, [148] = 148, [149] = 148, [150] = 148, - [151] = 151, - [152] = 131, + [151] = 132, + [152] = 152, [153] = 148, - [154] = 151, + [154] = 152, [155] = 155, [156] = 156, [157] = 157, [158] = 158, [159] = 159, [160] = 159, - [161] = 159, - [162] = 162, + [161] = 161, + [162] = 161, [163] = 163, - [164] = 162, + [164] = 161, [165] = 165, - [166] = 166, + [166] = 165, [167] = 167, [168] = 168, - [169] = 166, - [170] = 166, + [169] = 169, + [170] = 170, [171] = 171, - [172] = 172, + [172] = 165, [173] = 173, - [174] = 174, + [174] = 173, [175] = 175, [176] = 176, [177] = 177, [178] = 178, - [179] = 177, - [180] = 158, + [179] = 179, + [180] = 173, [181] = 181, - [182] = 182, - [183] = 178, - [184] = 177, + [182] = 158, + [183] = 183, + [184] = 181, [185] = 185, [186] = 186, [187] = 187, [188] = 188, [189] = 189, - [190] = 187, - [191] = 187, - [192] = 192, - [193] = 188, - [194] = 194, - [195] = 168, + [190] = 190, + [191] = 191, + [192] = 167, + [193] = 193, + [194] = 188, + [195] = 195, [196] = 196, - [197] = 194, - [198] = 189, - [199] = 199, + [197] = 171, + [198] = 186, + [199] = 187, [200] = 200, - [201] = 201, - [202] = 202, - [203] = 196, - [204] = 188, - [205] = 171, - [206] = 194, - [207] = 189, - [208] = 186, - [209] = 199, - [210] = 167, - [211] = 200, - [212] = 188, - [213] = 213, - [214] = 186, - [215] = 199, - [216] = 196, - [217] = 187, + [201] = 170, + [202] = 186, + [203] = 189, + [204] = 187, + [205] = 196, + [206] = 190, + [207] = 193, + [208] = 190, + [209] = 188, + [210] = 193, + [211] = 211, + [212] = 189, + [213] = 196, + [214] = 200, + [215] = 188, + [216] = 216, + [217] = 189, [218] = 218, [219] = 219, [220] = 220, @@ -3178,57 +3216,57 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [230] = 230, [231] = 231, [232] = 232, - [233] = 233, - [234] = 234, - [235] = 233, + [233] = 230, + [234] = 232, + [235] = 228, [236] = 236, - [237] = 234, - [238] = 232, - [239] = 236, - [240] = 229, - [241] = 228, - [242] = 242, + [237] = 237, + [238] = 229, + [239] = 239, + [240] = 240, + [241] = 240, + [242] = 236, [243] = 243, - [244] = 244, - [245] = 244, + [244] = 240, + [245] = 243, [246] = 246, - [247] = 247, - [248] = 243, - [249] = 243, - [250] = 242, - [251] = 246, - [252] = 246, - [253] = 242, - [254] = 247, - [255] = 255, - [256] = 256, - [257] = 255, - [258] = 258, + [247] = 239, + [248] = 246, + [249] = 246, + [250] = 243, + [251] = 251, + [252] = 252, + [253] = 253, + [254] = 254, + [255] = 253, + [256] = 251, + [257] = 252, + [258] = 251, [259] = 259, - [260] = 256, + [260] = 259, [261] = 261, - [262] = 261, - [263] = 263, + [262] = 259, + [263] = 261, [264] = 264, - [265] = 265, - [266] = 266, - [267] = 267, + [265] = 261, + [266] = 252, + [267] = 264, [268] = 268, - [269] = 261, - [270] = 267, - [271] = 266, - [272] = 268, - [273] = 256, - [274] = 255, + [269] = 269, + [270] = 270, + [271] = 271, + [272] = 272, + [273] = 273, + [274] = 274, [275] = 275, - [276] = 263, - [277] = 258, + [276] = 274, + [277] = 277, [278] = 278, - [279] = 265, - [280] = 280, - [281] = 281, - [282] = 282, - [283] = 283, + [279] = 275, + [280] = 273, + [281] = 272, + [282] = 268, + [283] = 271, [284] = 284, [285] = 285, [286] = 286, @@ -3236,100 +3274,100 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [288] = 288, [289] = 289, [290] = 290, - [291] = 281, - [292] = 283, + [291] = 291, + [292] = 292, [293] = 293, [294] = 294, [295] = 295, [296] = 296, [297] = 297, - [298] = 296, + [298] = 298, [299] = 299, - [300] = 300, - [301] = 299, + [300] = 287, + [301] = 301, [302] = 302, [303] = 303, [304] = 304, - [305] = 288, - [306] = 306, - [307] = 285, + [305] = 305, + [306] = 305, + [307] = 307, [308] = 308, [309] = 309, - [310] = 299, - [311] = 287, - [312] = 312, - [313] = 308, - [314] = 314, - [315] = 282, - [316] = 316, - [317] = 317, - [318] = 318, - [319] = 288, - [320] = 320, - [321] = 321, - [322] = 322, + [310] = 310, + [311] = 291, + [312] = 292, + [313] = 302, + [314] = 303, + [315] = 308, + [316] = 310, + [317] = 227, + [318] = 305, + [319] = 291, + [320] = 305, + [321] = 292, + [322] = 303, [323] = 323, [324] = 324, - [325] = 325, - [326] = 281, - [327] = 316, + [325] = 291, + [326] = 326, + [327] = 223, [328] = 328, - [329] = 329, - [330] = 330, - [331] = 331, - [332] = 317, - [333] = 333, - [334] = 334, - [335] = 335, - [336] = 226, - [337] = 218, - [338] = 338, - [339] = 339, - [340] = 340, - [341] = 321, - [342] = 220, - [343] = 221, - [344] = 223, + [329] = 218, + [330] = 224, + [331] = 292, + [332] = 332, + [333] = 308, + [334] = 225, + [335] = 291, + [336] = 305, + [337] = 292, + [338] = 308, + [339] = 303, + [340] = 292, + [341] = 303, + [342] = 305, + [343] = 343, + [344] = 344, [345] = 345, - [346] = 322, - [347] = 347, - [348] = 348, - [349] = 347, - [350] = 323, - [351] = 351, - [352] = 219, - [353] = 340, - [354] = 288, - [355] = 282, - [356] = 281, - [357] = 333, - [358] = 308, - [359] = 288, - [360] = 308, - [361] = 361, - [362] = 308, - [363] = 329, - [364] = 364, - [365] = 227, - [366] = 328, - [367] = 287, - [368] = 324, - [369] = 308, - [370] = 281, - [371] = 282, - [372] = 318, - [373] = 320, - [374] = 287, - [375] = 287, - [376] = 281, - [377] = 325, - [378] = 287, - [379] = 282, - [380] = 345, - [381] = 288, - [382] = 282, - [383] = 335, - [384] = 331, + [346] = 308, + [347] = 344, + [348] = 323, + [349] = 291, + [350] = 308, + [351] = 220, + [352] = 352, + [353] = 353, + [354] = 326, + [355] = 355, + [356] = 356, + [357] = 357, + [358] = 358, + [359] = 355, + [360] = 360, + [361] = 343, + [362] = 362, + [363] = 357, + [364] = 324, + [365] = 358, + [366] = 366, + [367] = 367, + [368] = 368, + [369] = 366, + [370] = 368, + [371] = 226, + [372] = 372, + [373] = 332, + [374] = 372, + [375] = 375, + [376] = 303, + [377] = 377, + [378] = 377, + [379] = 379, + [380] = 362, + [381] = 381, + [382] = 379, + [383] = 381, + [384] = 352, [385] = 385, [386] = 386, [387] = 387, @@ -3342,7 +3380,7 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [394] = 394, [395] = 395, [396] = 396, - [397] = 397, + [397] = 391, [398] = 398, [399] = 399, [400] = 400, @@ -3350,128 +3388,128 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [402] = 402, [403] = 403, [404] = 404, - [405] = 389, + [405] = 405, [406] = 406, - [407] = 403, - [408] = 408, - [409] = 396, - [410] = 396, - [411] = 395, + [407] = 388, + [408] = 403, + [409] = 409, + [410] = 409, + [411] = 403, [412] = 412, [413] = 413, - [414] = 408, - [415] = 386, - [416] = 402, - [417] = 417, - [418] = 387, - [419] = 391, + [414] = 414, + [415] = 415, + [416] = 393, + [417] = 406, + [418] = 404, + [419] = 419, [420] = 420, - [421] = 388, - [422] = 392, - [423] = 404, + [421] = 421, + [422] = 422, + [423] = 423, [424] = 400, - [425] = 425, - [426] = 386, + [425] = 391, + [426] = 426, [427] = 427, - [428] = 427, - [429] = 386, + [428] = 387, + [429] = 429, [430] = 430, [431] = 431, - [432] = 430, - [433] = 420, + [432] = 432, + [433] = 412, [434] = 434, - [435] = 435, - [436] = 397, - [437] = 397, + [435] = 387, + [436] = 427, + [437] = 390, [438] = 438, - [439] = 385, - [440] = 413, - [441] = 441, - [442] = 442, - [443] = 385, + [439] = 438, + [440] = 389, + [441] = 389, + [442] = 409, + [443] = 443, [444] = 444, - [445] = 391, - [446] = 395, - [447] = 425, - [448] = 389, - [449] = 449, + [445] = 402, + [446] = 446, + [447] = 394, + [448] = 448, + [449] = 448, [450] = 450, [451] = 451, - [452] = 392, + [452] = 452, [453] = 453, - [454] = 454, + [454] = 421, [455] = 395, - [456] = 385, - [457] = 396, - [458] = 444, - [459] = 459, - [460] = 442, + [456] = 386, + [457] = 426, + [458] = 404, + [459] = 400, + [460] = 430, [461] = 461, - [462] = 462, - [463] = 444, - [464] = 464, - [465] = 397, - [466] = 466, - [467] = 454, - [468] = 398, - [469] = 406, - [470] = 391, - [471] = 399, - [472] = 464, + [462] = 448, + [463] = 398, + [464] = 387, + [465] = 409, + [466] = 405, + [467] = 406, + [468] = 403, + [469] = 389, + [470] = 470, + [471] = 406, + [472] = 404, [473] = 473, - [474] = 473, - [475] = 475, - [476] = 392, - [477] = 477, - [478] = 401, - [479] = 479, + [474] = 443, + [475] = 400, + [476] = 461, + [477] = 391, + [478] = 415, + [479] = 448, [480] = 480, - [481] = 444, - [482] = 389, + [481] = 453, + [482] = 419, [483] = 483, - [484] = 412, + [484] = 432, [485] = 485, - [486] = 485, + [486] = 486, [487] = 487, [488] = 488, - [489] = 489, - [490] = 487, - [491] = 491, + [489] = 486, + [490] = 490, + [491] = 490, [492] = 492, - [493] = 492, - [494] = 491, + [493] = 493, + [494] = 487, [495] = 488, - [496] = 489, - [497] = 497, + [496] = 492, + [497] = 493, [498] = 498, [499] = 499, [500] = 500, [501] = 501, - [502] = 502, + [502] = 498, [503] = 503, [504] = 504, [505] = 505, [506] = 506, - [507] = 507, + [507] = 504, [508] = 508, [509] = 509, [510] = 510, - [511] = 511, + [511] = 510, [512] = 512, - [513] = 512, + [513] = 513, [514] = 514, - [515] = 498, - [516] = 507, + [515] = 515, + [516] = 512, [517] = 517, [518] = 518, [519] = 519, - [520] = 504, + [520] = 520, [521] = 521, [522] = 522, [523] = 523, [524] = 524, - [525] = 500, - [526] = 524, + [525] = 513, + [526] = 526, [527] = 527, [528] = 528, [529] = 529, @@ -3481,66 +3519,66 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [533] = 533, [534] = 534, [535] = 535, - [536] = 534, - [537] = 529, - [538] = 530, - [539] = 511, - [540] = 533, + [536] = 536, + [537] = 537, + [538] = 538, + [539] = 524, + [540] = 540, [541] = 541, - [542] = 502, + [542] = 505, [543] = 543, [544] = 544, - [545] = 510, - [546] = 509, + [545] = 545, + [546] = 503, [547] = 508, - [548] = 501, - [549] = 549, - [550] = 527, - [551] = 503, + [548] = 545, + [549] = 540, + [550] = 533, + [551] = 551, [552] = 552, - [553] = 531, - [554] = 549, - [555] = 528, - [556] = 506, - [557] = 505, - [558] = 532, - [559] = 559, - [560] = 543, - [561] = 561, - [562] = 541, - [563] = 535, - [564] = 559, - [565] = 561, - [566] = 517, + [553] = 553, + [554] = 523, + [555] = 541, + [556] = 543, + [557] = 538, + [558] = 553, + [559] = 532, + [560] = 560, + [561] = 522, + [562] = 562, + [563] = 563, + [564] = 515, + [565] = 501, + [566] = 527, [567] = 567, - [568] = 514, - [569] = 567, - [570] = 570, - [571] = 571, - [572] = 571, - [573] = 573, - [574] = 573, - [575] = 575, - [576] = 522, - [577] = 575, - [578] = 544, - [579] = 579, - [580] = 497, - [581] = 581, - [582] = 582, - [583] = 579, + [568] = 517, + [569] = 518, + [570] = 519, + [571] = 506, + [572] = 521, + [573] = 500, + [574] = 560, + [575] = 520, + [576] = 576, + [577] = 526, + [578] = 563, + [579] = 562, + [580] = 576, + [581] = 528, + [582] = 529, + [583] = 534, [584] = 499, - [585] = 570, - [586] = 581, - [587] = 587, - [588] = 523, - [589] = 582, - [590] = 587, - [591] = 518, - [592] = 521, - [593] = 519, - [594] = 552, - [595] = 595, + [585] = 537, + [586] = 535, + [587] = 552, + [588] = 551, + [589] = 544, + [590] = 536, + [591] = 509, + [592] = 530, + [593] = 531, + [594] = 514, + [595] = 567, [596] = 596, [597] = 597, [598] = 598, @@ -3548,10 +3586,10 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [600] = 600, [601] = 601, [602] = 602, - [603] = 603, - [604] = 602, - [605] = 603, - [606] = 606, + [603] = 599, + [604] = 604, + [605] = 605, + [606] = 602, [607] = 607, [608] = 608, [609] = 609, @@ -3575,7 +3613,7 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [627] = 627, [628] = 628, [629] = 629, - [630] = 630, + [630] = 621, [631] = 631, [632] = 632, [633] = 633, @@ -3588,216 +3626,216 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [640] = 640, [641] = 641, [642] = 642, - [643] = 630, + [643] = 643, [644] = 644, [645] = 645, [646] = 646, [647] = 647, - [648] = 647, + [648] = 648, [649] = 649, - [650] = 650, - [651] = 651, + [650] = 648, + [651] = 647, [652] = 652, [653] = 653, - [654] = 651, - [655] = 645, + [654] = 654, + [655] = 646, [656] = 656, - [657] = 656, + [657] = 657, [658] = 653, - [659] = 659, - [660] = 646, - [661] = 650, + [659] = 656, + [660] = 654, + [661] = 661, [662] = 662, - [663] = 662, - [664] = 659, - [665] = 652, - [666] = 649, - [667] = 667, + [663] = 649, + [664] = 652, + [665] = 661, + [666] = 662, + [667] = 657, [668] = 668, - [669] = 669, - [670] = 669, + [669] = 668, + [670] = 670, [671] = 671, - [672] = 672, - [673] = 669, - [674] = 667, - [675] = 668, - [676] = 669, - [677] = 599, - [678] = 598, - [679] = 679, - [680] = 680, + [672] = 668, + [673] = 673, + [674] = 600, + [675] = 675, + [676] = 673, + [677] = 670, + [678] = 601, + [679] = 668, + [680] = 600, [681] = 681, [682] = 682, - [683] = 683, - [684] = 630, + [683] = 607, + [684] = 684, [685] = 685, - [686] = 682, + [686] = 686, [687] = 687, [688] = 688, - [689] = 599, - [690] = 690, - [691] = 679, - [692] = 681, - [693] = 693, - [694] = 679, - [695] = 695, - [696] = 680, - [697] = 695, + [689] = 685, + [690] = 686, + [691] = 691, + [692] = 601, + [693] = 682, + [694] = 694, + [695] = 682, + [696] = 696, + [697] = 691, [698] = 698, - [699] = 690, - [700] = 682, - [701] = 688, - [702] = 680, - [703] = 695, - [704] = 681, - [705] = 690, - [706] = 687, - [707] = 698, - [708] = 687, - [709] = 683, - [710] = 687, - [711] = 682, - [712] = 679, - [713] = 600, - [714] = 690, - [715] = 715, - [716] = 693, - [717] = 681, - [718] = 688, - [719] = 683, - [720] = 598, - [721] = 695, - [722] = 680, - [723] = 698, + [699] = 687, + [700] = 700, + [701] = 671, + [702] = 698, + [703] = 675, + [704] = 704, + [705] = 700, + [706] = 688, + [707] = 686, + [708] = 696, + [709] = 694, + [710] = 621, + [711] = 687, + [712] = 694, + [713] = 685, + [714] = 698, + [715] = 691, + [716] = 696, + [717] = 698, + [718] = 696, + [719] = 691, + [720] = 685, + [721] = 704, + [722] = 686, + [723] = 688, [724] = 688, - [725] = 672, - [726] = 683, - [727] = 671, - [728] = 698, - [729] = 693, - [730] = 693, - [731] = 662, - [732] = 649, + [725] = 687, + [726] = 704, + [727] = 704, + [728] = 700, + [729] = 682, + [730] = 694, + [731] = 700, + [732] = 648, [733] = 652, - [734] = 659, - [735] = 647, - [736] = 609, - [737] = 653, - [738] = 651, - [739] = 645, - [740] = 630, - [741] = 646, - [742] = 600, - [743] = 656, - [744] = 610, - [745] = 650, - [746] = 662, - [747] = 651, - [748] = 748, - [749] = 330, - [750] = 653, - [751] = 652, - [752] = 649, - [753] = 647, - [754] = 667, - [755] = 668, - [756] = 645, - [757] = 659, - [758] = 609, - [759] = 759, - [760] = 760, - [761] = 646, - [762] = 449, - [763] = 656, - [764] = 334, - [765] = 475, - [766] = 650, - [767] = 767, - [768] = 441, - [769] = 610, - [770] = 431, - [771] = 626, - [772] = 639, - [773] = 625, - [774] = 624, - [775] = 637, - [776] = 620, - [777] = 623, - [778] = 617, - [779] = 475, - [780] = 622, - [781] = 629, - [782] = 632, - [783] = 615, - [784] = 627, - [785] = 628, - [786] = 671, - [787] = 672, - [788] = 631, - [789] = 441, - [790] = 634, - [791] = 635, - [792] = 633, + [734] = 646, + [735] = 610, + [736] = 649, + [737] = 657, + [738] = 647, + [739] = 607, + [740] = 621, + [741] = 662, + [742] = 656, + [743] = 611, + [744] = 653, + [745] = 654, + [746] = 661, + [747] = 747, + [748] = 656, + [749] = 470, + [750] = 654, + [751] = 423, + [752] = 653, + [753] = 652, + [754] = 661, + [755] = 646, + [756] = 673, + [757] = 611, + [758] = 758, + [759] = 657, + [760] = 367, + [761] = 761, + [762] = 670, + [763] = 662, + [764] = 647, + [765] = 648, + [766] = 610, + [767] = 392, + [768] = 768, + [769] = 385, + [770] = 444, + [771] = 649, + [772] = 636, + [773] = 615, + [774] = 627, + [775] = 673, + [776] = 631, + [777] = 632, + [778] = 618, + [779] = 643, + [780] = 638, + [781] = 637, + [782] = 617, + [783] = 633, + [784] = 628, + [785] = 635, + [786] = 639, + [787] = 640, + [788] = 612, + [789] = 614, + [790] = 619, + [791] = 644, + [792] = 620, [793] = 613, - [794] = 618, - [795] = 612, - [796] = 640, - [797] = 642, - [798] = 667, - [799] = 621, - [800] = 641, - [801] = 668, - [802] = 644, - [803] = 619, - [804] = 611, - [805] = 638, - [806] = 431, - [807] = 616, - [808] = 614, - [809] = 634, - [810] = 220, - [811] = 642, - [812] = 759, - [813] = 626, - [814] = 625, - [815] = 624, - [816] = 623, - [817] = 611, - [818] = 622, - [819] = 637, - [820] = 621, - [821] = 620, - [822] = 219, - [823] = 616, - [824] = 614, - [825] = 629, - [826] = 641, - [827] = 632, - [828] = 638, - [829] = 227, - [830] = 644, - [831] = 613, - [832] = 618, - [833] = 631, - [834] = 223, - [835] = 640, - [836] = 221, - [837] = 760, - [838] = 639, - [839] = 612, - [840] = 627, - [841] = 617, - [842] = 628, - [843] = 615, - [844] = 218, - [845] = 226, - [846] = 619, - [847] = 633, - [848] = 635, - [849] = 849, + [794] = 629, + [795] = 622, + [796] = 671, + [797] = 444, + [798] = 634, + [799] = 624, + [800] = 470, + [801] = 675, + [802] = 670, + [803] = 625, + [804] = 641, + [805] = 626, + [806] = 645, + [807] = 642, + [808] = 616, + [809] = 423, + [810] = 638, + [811] = 624, + [812] = 637, + [813] = 622, + [814] = 639, + [815] = 616, + [816] = 627, + [817] = 631, + [818] = 634, + [819] = 613, + [820] = 643, + [821] = 645, + [822] = 635, + [823] = 633, + [824] = 632, + [825] = 620, + [826] = 636, + [827] = 226, + [828] = 641, + [829] = 220, + [830] = 227, + [831] = 761, + [832] = 642, + [833] = 625, + [834] = 626, + [835] = 223, + [836] = 617, + [837] = 629, + [838] = 224, + [839] = 225, + [840] = 644, + [841] = 614, + [842] = 218, + [843] = 640, + [844] = 619, + [845] = 612, + [846] = 628, + [847] = 615, + [848] = 618, + [849] = 758, [850] = 850, [851] = 851, - [852] = 849, + [852] = 851, [853] = 853, [854] = 854, [855] = 855, @@ -3814,92 +3852,92 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [866] = 866, [867] = 867, [868] = 868, - [869] = 868, + [869] = 869, [870] = 870, - [871] = 870, - [872] = 872, + [871] = 869, + [872] = 870, [873] = 873, [874] = 874, [875] = 875, [876] = 876, - [877] = 868, - [878] = 870, - [879] = 879, - [880] = 880, - [881] = 870, - [882] = 882, - [883] = 868, - [884] = 884, + [877] = 877, + [878] = 878, + [879] = 869, + [880] = 870, + [881] = 881, + [882] = 870, + [883] = 883, + [884] = 869, [885] = 885, - [886] = 885, + [886] = 886, [887] = 887, - [888] = 885, - [889] = 889, - [890] = 885, - [891] = 891, + [888] = 888, + [889] = 888, + [890] = 888, + [891] = 888, [892] = 892, [893] = 893, [894] = 894, [895] = 895, [896] = 896, - [897] = 897, - [898] = 895, - [899] = 896, - [900] = 900, + [897] = 896, + [898] = 898, + [899] = 899, + [900] = 899, [901] = 901, [902] = 902, - [903] = 902, - [904] = 904, + [903] = 903, + [904] = 902, [905] = 905, [906] = 906, [907] = 907, [908] = 908, [909] = 909, [910] = 910, - [911] = 907, + [911] = 911, [912] = 912, [913] = 913, - [914] = 914, + [914] = 909, [915] = 915, [916] = 916, [917] = 917, - [918] = 907, - [919] = 909, - [920] = 920, - [921] = 914, - [922] = 916, - [923] = 908, - [924] = 912, + [918] = 918, + [919] = 919, + [920] = 910, + [921] = 921, + [922] = 919, + [923] = 910, + [924] = 918, [925] = 925, - [926] = 926, - [927] = 920, - [928] = 926, - [929] = 929, + [926] = 909, + [927] = 909, + [928] = 928, + [929] = 913, [930] = 930, - [931] = 930, - [932] = 932, + [931] = 915, + [932] = 913, [933] = 933, [934] = 934, - [935] = 932, - [936] = 936, - [937] = 937, - [938] = 936, - [939] = 939, + [935] = 925, + [936] = 910, + [937] = 908, + [938] = 917, + [939] = 916, [940] = 940, - [941] = 932, - [942] = 936, + [941] = 941, + [942] = 942, [943] = 943, - [944] = 934, - [945] = 930, - [946] = 940, - [947] = 947, - [948] = 948, - [949] = 936, - [950] = 934, + [944] = 944, + [945] = 942, + [946] = 946, + [947] = 940, + [948] = 942, + [949] = 949, + [950] = 940, [951] = 951, - [952] = 934, - [953] = 940, - [954] = 954, + [952] = 952, + [953] = 944, + [954] = 944, [955] = 955, [956] = 956, [957] = 957, @@ -3910,174 +3948,174 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [962] = 962, [963] = 963, [964] = 964, - [965] = 965, + [965] = 915, [966] = 966, - [967] = 904, + [967] = 967, [968] = 968, [969] = 969, [970] = 970, [971] = 971, - [972] = 972, - [973] = 973, - [974] = 914, - [975] = 975, - [976] = 901, + [972] = 916, + [973] = 917, + [974] = 905, + [975] = 908, + [976] = 976, [977] = 977, [978] = 978, [979] = 979, - [980] = 926, - [981] = 981, + [980] = 980, + [981] = 967, [982] = 982, [983] = 983, [984] = 984, [985] = 985, [986] = 986, [987] = 987, - [988] = 988, + [988] = 925, [989] = 989, [990] = 990, - [991] = 965, - [992] = 909, + [991] = 991, + [992] = 992, [993] = 993, [994] = 994, [995] = 995, [996] = 996, - [997] = 912, + [997] = 997, [998] = 998, [999] = 999, - [1000] = 916, - [1001] = 920, - [1002] = 996, - [1003] = 983, - [1004] = 1004, + [1000] = 1000, + [1001] = 1001, + [1002] = 1001, + [1003] = 1003, + [1004] = 976, [1005] = 1005, - [1006] = 1006, - [1007] = 908, + [1006] = 918, + [1007] = 1007, [1008] = 1008, - [1009] = 900, + [1009] = 1009, [1010] = 1010, [1011] = 1011, - [1012] = 1012, - [1013] = 1013, - [1014] = 929, - [1015] = 900, - [1016] = 1016, + [1012] = 903, + [1013] = 919, + [1014] = 1014, + [1015] = 1015, + [1016] = 901, [1017] = 1017, [1018] = 1018, - [1019] = 1019, + [1019] = 941, [1020] = 1020, [1021] = 1021, [1022] = 1022, [1023] = 1023, [1024] = 1024, - [1025] = 926, + [1025] = 1024, [1026] = 1026, - [1027] = 912, - [1028] = 914, - [1029] = 920, - [1030] = 916, - [1031] = 1031, + [1027] = 915, + [1028] = 919, + [1029] = 917, + [1030] = 1030, + [1031] = 916, [1032] = 908, - [1033] = 1033, - [1034] = 1034, - [1035] = 909, - [1036] = 933, + [1033] = 925, + [1034] = 918, + [1035] = 928, + [1036] = 1036, [1037] = 1037, [1038] = 1038, - [1039] = 1039, - [1040] = 1021, + [1039] = 1023, + [1040] = 943, [1041] = 1041, - [1042] = 901, + [1042] = 952, [1043] = 1043, [1044] = 1044, [1045] = 1045, [1046] = 1046, - [1047] = 1021, - [1048] = 947, - [1049] = 1038, - [1050] = 1050, - [1051] = 904, - [1052] = 1038, - [1053] = 1053, - [1054] = 948, + [1047] = 1024, + [1048] = 1048, + [1049] = 1049, + [1050] = 1023, + [1051] = 1051, + [1052] = 1052, + [1053] = 905, + [1054] = 903, [1055] = 1055, [1056] = 1056, - [1057] = 906, + [1057] = 901, [1058] = 1058, [1059] = 1059, [1060] = 1060, [1061] = 1061, [1062] = 1062, - [1063] = 1063, + [1063] = 1059, [1064] = 1064, [1065] = 1065, [1066] = 1066, [1067] = 1067, - [1068] = 1058, - [1069] = 1069, + [1068] = 1068, + [1069] = 1051, [1070] = 1070, [1071] = 1071, [1072] = 1072, [1073] = 1073, [1074] = 1074, - [1075] = 1059, + [1075] = 1075, [1076] = 1076, [1077] = 1077, [1078] = 1078, - [1079] = 1079, - [1080] = 1079, - [1081] = 1063, - [1082] = 1022, + [1079] = 1074, + [1080] = 1062, + [1081] = 1081, + [1082] = 1061, [1083] = 1083, [1084] = 1084, - [1085] = 1070, + [1085] = 907, [1086] = 1086, - [1087] = 1087, - [1088] = 1061, + [1087] = 1067, + [1088] = 1088, [1089] = 1089, [1090] = 1090, [1091] = 1091, - [1092] = 964, + [1092] = 1058, [1093] = 1093, - [1094] = 939, + [1094] = 1094, [1095] = 1095, - [1096] = 1005, + [1096] = 992, [1097] = 1097, - [1098] = 1098, - [1099] = 1099, + [1098] = 949, + [1099] = 1048, [1100] = 1100, - [1101] = 917, - [1102] = 1039, - [1103] = 1103, + [1101] = 1101, + [1102] = 1102, + [1103] = 934, [1104] = 1104, [1105] = 1105, - [1106] = 1106, + [1106] = 993, [1107] = 1107, - [1108] = 1107, + [1108] = 1108, [1109] = 1109, [1110] = 1110, [1111] = 1111, - [1112] = 985, - [1113] = 1113, + [1112] = 1112, + [1113] = 1112, [1114] = 1114, [1115] = 1115, [1116] = 1116, [1117] = 1117, [1118] = 1118, - [1119] = 1119, - [1120] = 1097, + [1119] = 1100, + [1120] = 1120, [1121] = 1121, [1122] = 1122, - [1123] = 1104, + [1123] = 1123, [1124] = 1124, - [1125] = 1125, + [1125] = 1015, [1126] = 1126, [1127] = 1127, [1128] = 1128, [1129] = 1129, - [1130] = 1130, + [1130] = 1107, [1131] = 1131, - [1132] = 1128, + [1132] = 1132, [1133] = 1133, [1134] = 1134, [1135] = 1135, @@ -4085,216 +4123,216 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [1137] = 1137, [1138] = 1138, [1139] = 1139, - [1140] = 1140, + [1140] = 1138, [1141] = 1141, - [1142] = 1095, - [1143] = 1143, + [1142] = 1142, + [1143] = 1128, [1144] = 1144, [1145] = 1145, [1146] = 1146, - [1147] = 1093, - [1148] = 1148, - [1149] = 1149, + [1147] = 1147, + [1148] = 1136, + [1149] = 1138, [1150] = 1150, - [1151] = 1141, - [1152] = 1149, - [1153] = 1140, - [1154] = 1154, + [1151] = 1151, + [1152] = 1152, + [1153] = 1153, + [1154] = 1151, [1155] = 1155, - [1156] = 1156, - [1157] = 1134, - [1158] = 1135, - [1159] = 1136, + [1156] = 1138, + [1157] = 1142, + [1158] = 1094, + [1159] = 1139, [1160] = 1160, - [1161] = 1109, + [1161] = 1161, [1162] = 1162, [1163] = 1163, - [1164] = 1164, - [1165] = 1165, + [1164] = 1144, + [1165] = 1136, [1166] = 1166, [1167] = 1167, - [1168] = 913, - [1169] = 1149, + [1168] = 1155, + [1169] = 1169, [1170] = 1170, - [1171] = 1171, + [1171] = 1136, [1172] = 1172, [1173] = 1173, - [1174] = 1174, + [1174] = 1152, [1175] = 1175, - [1176] = 1131, + [1176] = 1169, [1177] = 1177, - [1178] = 1178, - [1179] = 1129, + [1178] = 1138, + [1179] = 1179, [1180] = 1180, - [1181] = 1173, - [1182] = 1118, - [1183] = 1183, - [1184] = 1180, + [1181] = 1181, + [1182] = 933, + [1183] = 1095, + [1184] = 1184, [1185] = 1185, - [1186] = 1149, - [1187] = 1023, - [1188] = 1188, - [1189] = 1189, + [1186] = 1186, + [1187] = 1187, + [1188] = 1136, + [1189] = 1136, [1190] = 1190, - [1191] = 1191, + [1191] = 1147, [1192] = 1192, [1193] = 1193, [1194] = 1194, [1195] = 1195, - [1196] = 1196, - [1197] = 1197, + [1196] = 1173, + [1197] = 1144, [1198] = 1198, - [1199] = 1199, - [1200] = 1200, - [1201] = 1201, - [1202] = 1202, + [1199] = 1144, + [1200] = 1093, + [1201] = 1187, + [1202] = 1136, [1203] = 1203, [1204] = 1204, - [1205] = 1164, - [1206] = 1163, - [1207] = 1207, + [1205] = 1205, + [1206] = 1150, + [1207] = 1138, [1208] = 1208, - [1209] = 1209, + [1209] = 1138, [1210] = 1210, [1211] = 1211, - [1212] = 1212, + [1212] = 1052, [1213] = 1213, - [1214] = 1209, + [1214] = 1214, [1215] = 1215, [1216] = 1216, - [1217] = 282, + [1217] = 1217, [1218] = 1218, [1219] = 1219, [1220] = 1220, [1221] = 1221, - [1222] = 1074, + [1222] = 1222, [1223] = 1223, - [1224] = 1210, - [1225] = 1225, + [1224] = 1224, + [1225] = 1072, [1226] = 1226, [1227] = 1227, - [1228] = 1228, - [1229] = 1229, - [1230] = 1230, - [1231] = 1194, + [1228] = 1224, + [1229] = 1216, + [1230] = 1214, + [1231] = 1218, [1232] = 1232, - [1233] = 308, + [1233] = 1233, [1234] = 1234, [1235] = 1235, [1236] = 1236, - [1237] = 1194, - [1238] = 1209, + [1237] = 1237, + [1238] = 1238, [1239] = 1239, - [1240] = 1189, - [1241] = 1194, - [1242] = 1242, - [1243] = 1242, - [1244] = 1209, - [1245] = 1183, - [1246] = 1194, - [1247] = 1234, - [1248] = 1209, - [1249] = 1204, - [1250] = 1250, - [1251] = 1219, - [1252] = 1252, - [1253] = 1060, - [1254] = 1194, - [1255] = 1239, - [1256] = 1256, + [1240] = 1240, + [1241] = 1241, + [1242] = 610, + [1243] = 1243, + [1244] = 1244, + [1245] = 611, + [1246] = 1246, + [1247] = 1247, + [1248] = 1248, + [1249] = 1249, + [1250] = 1248, + [1251] = 1251, + [1252] = 1244, + [1253] = 1253, + [1254] = 1241, + [1255] = 1255, + [1256] = 291, [1257] = 1257, - [1258] = 1220, + [1258] = 1258, [1259] = 1259, [1260] = 1260, - [1261] = 1209, - [1262] = 1262, - [1263] = 1263, - [1264] = 1264, - [1265] = 281, + [1261] = 1218, + [1262] = 1216, + [1263] = 1223, + [1264] = 1224, + [1265] = 1226, [1266] = 1266, - [1267] = 1267, + [1267] = 1234, [1268] = 1268, [1269] = 1269, [1270] = 1270, - [1271] = 1196, - [1272] = 1203, - [1273] = 1228, - [1274] = 1230, - [1275] = 1275, - [1276] = 1197, - [1277] = 1264, - [1278] = 1260, - [1279] = 1230, - [1280] = 1228, + [1271] = 1271, + [1272] = 1272, + [1273] = 1273, + [1274] = 1274, + [1275] = 1146, + [1276] = 1276, + [1277] = 1244, + [1278] = 1278, + [1279] = 1219, + [1280] = 1219, [1281] = 1281, - [1282] = 1203, - [1283] = 1196, - [1284] = 1284, - [1285] = 1264, - [1286] = 1221, - [1287] = 1287, - [1288] = 1288, - [1289] = 1289, - [1290] = 1290, - [1291] = 609, + [1282] = 1282, + [1283] = 1283, + [1284] = 1220, + [1285] = 1285, + [1286] = 1236, + [1287] = 1247, + [1288] = 1248, + [1289] = 1249, + [1290] = 1251, + [1291] = 1291, [1292] = 1292, - [1293] = 1293, - [1294] = 1220, - [1295] = 1275, + [1293] = 1175, + [1294] = 1226, + [1295] = 1295, [1296] = 1296, - [1297] = 1256, - [1298] = 1239, + [1297] = 1297, + [1298] = 1298, [1299] = 1299, - [1300] = 1234, + [1300] = 1300, [1301] = 1301, - [1302] = 1242, - [1303] = 1303, - [1304] = 287, - [1305] = 1305, - [1306] = 1199, - [1307] = 1069, - [1308] = 1308, - [1309] = 1194, + [1302] = 1302, + [1303] = 1180, + [1304] = 1060, + [1305] = 1221, + [1306] = 1306, + [1307] = 1307, + [1308] = 1282, + [1309] = 1270, [1310] = 1310, - [1311] = 1225, - [1312] = 1312, - [1313] = 1219, - [1314] = 1314, - [1315] = 1284, - [1316] = 1316, - [1317] = 1312, - [1318] = 610, - [1319] = 1209, + [1311] = 1220, + [1312] = 1236, + [1313] = 1313, + [1314] = 1247, + [1315] = 1249, + [1316] = 303, + [1317] = 1251, + [1318] = 1318, + [1319] = 1291, [1320] = 1320, - [1321] = 1143, - [1322] = 1322, + [1321] = 1321, + [1322] = 1227, [1323] = 1323, - [1324] = 288, + [1324] = 1324, [1325] = 1325, - [1326] = 1326, - [1327] = 1225, - [1328] = 1256, - [1329] = 1329, - [1330] = 1330, + [1326] = 1210, + [1327] = 1208, + [1328] = 1328, + [1329] = 292, + [1330] = 308, [1331] = 1331, - [1332] = 1067, + [1332] = 305, [1333] = 1333, - [1334] = 1229, + [1334] = 1334, [1335] = 1335, - [1336] = 1336, - [1337] = 1337, + [1336] = 1292, + [1337] = 1068, [1338] = 1338, - [1339] = 1177, + [1339] = 1339, [1340] = 1340, - [1341] = 1341, - [1342] = 1342, + [1341] = 1081, + [1342] = 1141, [1343] = 1343, [1344] = 1344, [1345] = 1345, [1346] = 1346, - [1347] = 1267, - [1348] = 1041, - [1349] = 1349, + [1347] = 1347, + [1348] = 1043, + [1349] = 1298, [1350] = 1350, [1351] = 1351, [1352] = 1352, @@ -4303,33 +4341,33 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [1355] = 1355, [1356] = 1356, [1357] = 1357, - [1358] = 1354, + [1358] = 1358, [1359] = 1359, [1360] = 1360, - [1361] = 1361, + [1361] = 1346, [1362] = 1362, [1363] = 1363, - [1364] = 1364, + [1364] = 1240, [1365] = 1365, - [1366] = 1360, + [1366] = 1366, [1367] = 1367, [1368] = 1368, [1369] = 1369, - [1370] = 1356, - [1371] = 1371, - [1372] = 1344, + [1370] = 1368, + [1371] = 1350, + [1372] = 1372, [1373] = 1373, [1374] = 1374, [1375] = 1375, - [1376] = 1375, - [1377] = 1363, - [1378] = 1371, + [1376] = 1376, + [1377] = 1377, + [1378] = 1378, [1379] = 1379, [1380] = 1380, [1381] = 1381, - [1382] = 1226, + [1382] = 1382, [1383] = 1383, - [1384] = 1384, + [1384] = 1356, [1385] = 1385, [1386] = 1386, [1387] = 1387, @@ -4342,20 +4380,20 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [1394] = 1394, [1395] = 1395, [1396] = 1396, - [1397] = 1198, + [1397] = 1373, [1398] = 1398, [1399] = 1399, [1400] = 1400, [1401] = 1401, - [1402] = 1402, - [1403] = 1403, + [1402] = 1392, + [1403] = 1389, [1404] = 1404, - [1405] = 1405, + [1405] = 1243, [1406] = 1406, [1407] = 1407, [1408] = 1408, [1409] = 1409, - [1410] = 1405, + [1410] = 1410, [1411] = 1411, [1412] = 1412, [1413] = 1413, @@ -4373,2728 +4411,298 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [1425] = 1425, [1426] = 1426, [1427] = 1427, - [1428] = 1428, - [1429] = 1407, - [1430] = 1430, + [1428] = 1412, + [1429] = 1429, + [1430] = 1425, [1431] = 1431, - [1432] = 1414, - [1433] = 1411, + [1432] = 1432, + [1433] = 1422, [1434] = 1434, [1435] = 1435, - [1436] = 1430, - [1437] = 1407, - [1438] = 1405, - [1439] = 1411, - [1440] = 1440, + [1436] = 1436, + [1437] = 1437, + [1438] = 1427, + [1439] = 1426, + [1440] = 1432, [1441] = 1441, - [1442] = 1417, + [1442] = 1442, [1443] = 1443, - [1444] = 1444, - [1445] = 1445, - [1446] = 1430, - [1447] = 1414, - [1448] = 1448, - [1449] = 1448, - [1450] = 1443, + [1444] = 1425, + [1445] = 1432, + [1446] = 1446, + [1447] = 1447, + [1448] = 1424, + [1449] = 1422, + [1450] = 1450, [1451] = 1451, [1452] = 1452, - [1453] = 1427, + [1453] = 1453, [1454] = 1454, [1455] = 1455, [1456] = 1456, [1457] = 1457, - [1458] = 1427, - [1459] = 1422, + [1458] = 1441, + [1459] = 1423, [1460] = 1460, - [1461] = 1460, + [1461] = 1461, [1462] = 1462, [1463] = 1463, - [1464] = 1417, + [1464] = 1464, [1465] = 1465, [1466] = 1466, [1467] = 1467, - [1468] = 1435, - [1469] = 1462, + [1468] = 1468, + [1469] = 1421, [1470] = 1470, - [1471] = 1471, + [1471] = 1437, [1472] = 1472, - [1473] = 1467, - [1474] = 1451, - [1475] = 1431, - [1476] = 1470, - [1477] = 1445, - [1478] = 1478, - [1479] = 1420, - [1480] = 1480, + [1473] = 1473, + [1474] = 1474, + [1475] = 1475, + [1476] = 1476, + [1477] = 1474, + [1478] = 1460, + [1479] = 1455, + [1480] = 1466, [1481] = 1481, - [1482] = 1428, + [1482] = 1482, [1483] = 1483, - [1484] = 1431, - [1485] = 1483, - [1486] = 1486, - [1487] = 1487, - [1488] = 1488, - [1489] = 1489, - [1490] = 1490, - [1491] = 1478, + [1484] = 1419, + [1485] = 1442, + [1486] = 1467, + [1487] = 1436, + [1488] = 1420, + [1489] = 1434, + [1490] = 1443, + [1491] = 1418, [1492] = 1492, - [1493] = 1452, - [1494] = 1430, + [1493] = 1417, + [1494] = 1494, [1495] = 1495, - [1496] = 1496, + [1496] = 1475, [1497] = 1497, - [1498] = 1498, - [1499] = 1463, - [1500] = 1448, - [1501] = 1481, + [1498] = 1470, + [1499] = 1499, + [1500] = 1472, + [1501] = 1501, [1502] = 1502, - [1503] = 1467, - [1504] = 1462, - [1505] = 1480, - [1506] = 1471, - [1507] = 1465, - [1508] = 1498, + [1503] = 1415, + [1504] = 1417, + [1505] = 1505, + [1506] = 1418, + [1507] = 1419, + [1508] = 1421, [1509] = 1509, - [1510] = 1510, + [1510] = 1462, [1511] = 1511, - [1512] = 1495, - [1513] = 1460, - [1514] = 1514, - [1515] = 1409, - [1516] = 1511, - [1517] = 1514, - [1518] = 1472, - [1519] = 1454, - [1520] = 1488, - [1521] = 1521, - [1522] = 1421, - [1523] = 1425, - [1524] = 1427, + [1512] = 1457, + [1513] = 1499, + [1514] = 1422, + [1515] = 1505, + [1516] = 1516, + [1517] = 1517, + [1518] = 1518, + [1519] = 1502, + [1520] = 1424, + [1521] = 1425, + [1522] = 1426, + [1523] = 1518, + [1524] = 1416, + [1525] = 1427, + [1526] = 1413, + [1527] = 1452, + [1528] = 1412, + [1529] = 1476, + [1530] = 1415, + [1531] = 1531, }; -static inline bool sym_identifier_character_set_1(int32_t c) { - return (c < 43514 - ? (c < 4193 - ? (c < 2707 - ? (c < 1994 - ? (c < 931 - ? (c < 748 - ? (c < 192 - ? (c < 170 - ? (c < 'a' - ? (c >= 'A' && c <= '_') - : c <= 'z') - : (c <= 170 || (c < 186 - ? c == 181 - : c <= 186))) - : (c <= 214 || (c < 710 - ? (c < 248 - ? (c >= 216 && c <= 246) - : c <= 705) - : (c <= 721 || (c >= 736 && c <= 740))))) - : (c <= 748 || (c < 895 - ? (c < 886 - ? (c < 880 - ? c == 750 - : c <= 884) - : (c <= 887 || (c >= 891 && c <= 893))) - : (c <= 895 || (c < 908 - ? (c < 904 - ? c == 902 - : c <= 906) - : (c <= 908 || (c >= 910 && c <= 929))))))) - : (c <= 1013 || (c < 1649 - ? (c < 1376 - ? (c < 1329 - ? (c < 1162 - ? (c >= 1015 && c <= 1153) - : c <= 1327) - : (c <= 1366 || c == 1369)) - : (c <= 1416 || (c < 1568 - ? (c < 1519 - ? (c >= 1488 && c <= 1514) - : c <= 1522) - : (c <= 1610 || (c >= 1646 && c <= 1647))))) - : (c <= 1747 || (c < 1791 - ? (c < 1774 - ? (c < 1765 - ? c == 1749 - : c <= 1766) - : (c <= 1775 || (c >= 1786 && c <= 1788))) - : (c <= 1791 || (c < 1869 - ? (c < 1810 - ? c == 1808 - : c <= 1839) - : (c <= 1957 || c == 1969)))))))) - : (c <= 2026 || (c < 2482 - ? (c < 2208 - ? (c < 2088 - ? (c < 2048 - ? (c < 2042 - ? (c >= 2036 && c <= 2037) - : c <= 2042) - : (c <= 2069 || (c < 2084 - ? c == 2074 - : c <= 2084))) - : (c <= 2088 || (c < 2160 - ? (c < 2144 - ? (c >= 2112 && c <= 2136) - : c <= 2154) - : (c <= 2183 || (c >= 2185 && c <= 2190))))) - : (c <= 2249 || (c < 2417 - ? (c < 2384 - ? (c < 2365 - ? (c >= 2308 && c <= 2361) - : c <= 2365) - : (c <= 2384 || (c >= 2392 && c <= 2401))) - : (c <= 2432 || (c < 2451 - ? (c < 2447 - ? (c >= 2437 && c <= 2444) - : c <= 2448) - : (c <= 2472 || (c >= 2474 && c <= 2480))))))) - : (c <= 2482 || (c < 2579 - ? (c < 2527 - ? (c < 2510 - ? (c < 2493 - ? (c >= 2486 && c <= 2489) - : c <= 2493) - : (c <= 2510 || (c >= 2524 && c <= 2525))) - : (c <= 2529 || (c < 2565 - ? (c < 2556 - ? (c >= 2544 && c <= 2545) - : c <= 2556) - : (c <= 2570 || (c >= 2575 && c <= 2576))))) - : (c <= 2600 || (c < 2649 - ? (c < 2613 - ? (c < 2610 - ? (c >= 2602 && c <= 2608) - : c <= 2611) - : (c <= 2614 || (c >= 2616 && c <= 2617))) - : (c <= 2652 || (c < 2693 - ? (c < 2674 - ? c == 2654 - : c <= 2676) - : (c <= 2701 || (c >= 2703 && c <= 2705))))))))))) - : (c <= 2728 || (c < 3242 - ? (c < 2962 - ? (c < 2858 - ? (c < 2784 - ? (c < 2741 - ? (c < 2738 - ? (c >= 2730 && c <= 2736) - : c <= 2739) - : (c <= 2745 || (c < 2768 - ? c == 2749 - : c <= 2768))) - : (c <= 2785 || (c < 2831 - ? (c < 2821 - ? c == 2809 - : c <= 2828) - : (c <= 2832 || (c >= 2835 && c <= 2856))))) - : (c <= 2864 || (c < 2911 - ? (c < 2877 - ? (c < 2869 - ? (c >= 2866 && c <= 2867) - : c <= 2873) - : (c <= 2877 || (c >= 2908 && c <= 2909))) - : (c <= 2913 || (c < 2949 - ? (c < 2947 - ? c == 2929 - : c <= 2947) - : (c <= 2954 || (c >= 2958 && c <= 2960))))))) - : (c <= 2965 || (c < 3090 - ? (c < 2984 - ? (c < 2974 - ? (c < 2972 - ? (c >= 2969 && c <= 2970) - : c <= 2972) - : (c <= 2975 || (c >= 2979 && c <= 2980))) - : (c <= 2986 || (c < 3077 - ? (c < 3024 - ? (c >= 2990 && c <= 3001) - : c <= 3024) - : (c <= 3084 || (c >= 3086 && c <= 3088))))) - : (c <= 3112 || (c < 3168 - ? (c < 3160 - ? (c < 3133 - ? (c >= 3114 && c <= 3129) - : c <= 3133) - : (c <= 3162 || c == 3165)) - : (c <= 3169 || (c < 3214 - ? (c < 3205 - ? c == 3200 - : c <= 3212) - : (c <= 3216 || (c >= 3218 && c <= 3240))))))))) - : (c <= 3251 || (c < 3648 - ? (c < 3412 - ? (c < 3332 - ? (c < 3293 - ? (c < 3261 - ? (c >= 3253 && c <= 3257) - : c <= 3261) - : (c <= 3294 || (c < 3313 - ? (c >= 3296 && c <= 3297) - : c <= 3314))) - : (c <= 3340 || (c < 3389 - ? (c < 3346 - ? (c >= 3342 && c <= 3344) - : c <= 3386) - : (c <= 3389 || c == 3406)))) - : (c <= 3414 || (c < 3507 - ? (c < 3461 - ? (c < 3450 - ? (c >= 3423 && c <= 3425) - : c <= 3455) - : (c <= 3478 || (c >= 3482 && c <= 3505))) - : (c <= 3515 || (c < 3585 - ? (c < 3520 - ? c == 3517 - : c <= 3526) - : (c <= 3632 || c == 3634)))))) - : (c <= 3654 || (c < 3782 - ? (c < 3749 - ? (c < 3718 - ? (c < 3716 - ? (c >= 3713 && c <= 3714) - : c <= 3716) - : (c <= 3722 || (c >= 3724 && c <= 3747))) - : (c <= 3749 || (c < 3773 - ? (c < 3762 - ? (c >= 3751 && c <= 3760) - : c <= 3762) - : (c <= 3773 || (c >= 3776 && c <= 3780))))) - : (c <= 3782 || (c < 3976 - ? (c < 3904 - ? (c < 3840 - ? (c >= 3804 && c <= 3807) - : c <= 3840) - : (c <= 3911 || (c >= 3913 && c <= 3948))) - : (c <= 3980 || (c < 4176 - ? (c < 4159 - ? (c >= 4096 && c <= 4138) - : c <= 4159) - : (c <= 4181 || (c >= 4186 && c <= 4189))))))))))))) - : (c <= 4193 || (c < 8134 - ? (c < 6176 - ? (c < 4808 - ? (c < 4688 - ? (c < 4295 - ? (c < 4213 - ? (c < 4206 - ? (c >= 4197 && c <= 4198) - : c <= 4208) - : (c <= 4225 || (c < 4256 - ? c == 4238 - : c <= 4293))) - : (c <= 4295 || (c < 4348 - ? (c < 4304 - ? c == 4301 - : c <= 4346) - : (c <= 4680 || (c >= 4682 && c <= 4685))))) - : (c <= 4694 || (c < 4752 - ? (c < 4704 - ? (c < 4698 - ? c == 4696 - : c <= 4701) - : (c <= 4744 || (c >= 4746 && c <= 4749))) - : (c <= 4784 || (c < 4800 - ? (c < 4792 - ? (c >= 4786 && c <= 4789) - : c <= 4798) - : (c <= 4800 || (c >= 4802 && c <= 4805))))))) - : (c <= 4822 || (c < 5792 - ? (c < 5024 - ? (c < 4888 - ? (c < 4882 - ? (c >= 4824 && c <= 4880) - : c <= 4885) - : (c <= 4954 || (c >= 4992 && c <= 5007))) - : (c <= 5109 || (c < 5743 - ? (c < 5121 - ? (c >= 5112 && c <= 5117) - : c <= 5740) - : (c <= 5759 || (c >= 5761 && c <= 5786))))) - : (c <= 5866 || (c < 5984 - ? (c < 5919 - ? (c < 5888 - ? (c >= 5870 && c <= 5880) - : c <= 5905) - : (c <= 5937 || (c >= 5952 && c <= 5969))) - : (c <= 5996 || (c < 6103 - ? (c < 6016 - ? (c >= 5998 && c <= 6000) - : c <= 6067) - : (c <= 6103 || c == 6108)))))))) - : (c <= 6264 || (c < 7312 - ? (c < 6823 - ? (c < 6512 - ? (c < 6320 - ? (c < 6314 - ? (c >= 6272 && c <= 6312) - : c <= 6314) - : (c <= 6389 || (c < 6480 - ? (c >= 6400 && c <= 6430) - : c <= 6509))) - : (c <= 6516 || (c < 6656 - ? (c < 6576 - ? (c >= 6528 && c <= 6571) - : c <= 6601) - : (c <= 6678 || (c >= 6688 && c <= 6740))))) - : (c <= 6823 || (c < 7098 - ? (c < 7043 - ? (c < 6981 - ? (c >= 6917 && c <= 6963) - : c <= 6988) - : (c <= 7072 || (c >= 7086 && c <= 7087))) - : (c <= 7141 || (c < 7258 - ? (c < 7245 - ? (c >= 7168 && c <= 7203) - : c <= 7247) - : (c <= 7293 || (c >= 7296 && c <= 7304))))))) - : (c <= 7354 || (c < 8008 - ? (c < 7418 - ? (c < 7406 - ? (c < 7401 - ? (c >= 7357 && c <= 7359) - : c <= 7404) - : (c <= 7411 || (c >= 7413 && c <= 7414))) - : (c <= 7418 || (c < 7960 - ? (c < 7680 - ? (c >= 7424 && c <= 7615) - : c <= 7957) - : (c <= 7965 || (c >= 7968 && c <= 8005))))) - : (c <= 8013 || (c < 8031 - ? (c < 8027 - ? (c < 8025 - ? (c >= 8016 && c <= 8023) - : c <= 8025) - : (c <= 8027 || c == 8029)) - : (c <= 8061 || (c < 8126 - ? (c < 8118 - ? (c >= 8064 && c <= 8116) - : c <= 8124) - : (c <= 8126 || (c >= 8130 && c <= 8132))))))))))) - : (c <= 8140 || (c < 12337 - ? (c < 8544 - ? (c < 8458 - ? (c < 8305 - ? (c < 8160 - ? (c < 8150 - ? (c >= 8144 && c <= 8147) - : c <= 8155) - : (c <= 8172 || (c < 8182 - ? (c >= 8178 && c <= 8180) - : c <= 8188))) - : (c <= 8305 || (c < 8450 - ? (c < 8336 - ? c == 8319 - : c <= 8348) - : (c <= 8450 || c == 8455)))) - : (c <= 8467 || (c < 8488 - ? (c < 8484 - ? (c < 8472 - ? c == 8469 - : c <= 8477) - : (c <= 8484 || c == 8486)) - : (c <= 8488 || (c < 8517 - ? (c < 8508 - ? (c >= 8490 && c <= 8505) - : c <= 8511) - : (c <= 8521 || c == 8526)))))) - : (c <= 8584 || (c < 11680 - ? (c < 11559 - ? (c < 11506 - ? (c < 11499 - ? (c >= 11264 && c <= 11492) - : c <= 11502) - : (c <= 11507 || (c >= 11520 && c <= 11557))) - : (c <= 11559 || (c < 11631 - ? (c < 11568 - ? c == 11565 - : c <= 11623) - : (c <= 11631 || (c >= 11648 && c <= 11670))))) - : (c <= 11686 || (c < 11720 - ? (c < 11704 - ? (c < 11696 - ? (c >= 11688 && c <= 11694) - : c <= 11702) - : (c <= 11710 || (c >= 11712 && c <= 11718))) - : (c <= 11726 || (c < 12293 - ? (c < 11736 - ? (c >= 11728 && c <= 11734) - : c <= 11742) - : (c <= 12295 || (c >= 12321 && c <= 12329))))))))) - : (c <= 12341 || (c < 42891 - ? (c < 19968 - ? (c < 12549 - ? (c < 12445 - ? (c < 12353 - ? (c >= 12344 && c <= 12348) - : c <= 12438) - : (c <= 12447 || (c < 12540 - ? (c >= 12449 && c <= 12538) - : c <= 12543))) - : (c <= 12591 || (c < 12784 - ? (c < 12704 - ? (c >= 12593 && c <= 12686) - : c <= 12735) - : (c <= 12799 || (c >= 13312 && c <= 19903))))) - : (c <= 42124 || (c < 42560 - ? (c < 42512 - ? (c < 42240 - ? (c >= 42192 && c <= 42237) - : c <= 42508) - : (c <= 42527 || (c >= 42538 && c <= 42539))) - : (c <= 42606 || (c < 42775 - ? (c < 42656 - ? (c >= 42623 && c <= 42653) - : c <= 42735) - : (c <= 42783 || (c >= 42786 && c <= 42888))))))) - : (c <= 42954 || (c < 43250 - ? (c < 43011 - ? (c < 42965 - ? (c < 42963 - ? (c >= 42960 && c <= 42961) - : c <= 42963) - : (c <= 42969 || (c >= 42994 && c <= 43009))) - : (c <= 43013 || (c < 43072 - ? (c < 43020 - ? (c >= 43015 && c <= 43018) - : c <= 43042) - : (c <= 43123 || (c >= 43138 && c <= 43187))))) - : (c <= 43255 || (c < 43360 - ? (c < 43274 - ? (c < 43261 - ? c == 43259 - : c <= 43262) - : (c <= 43301 || (c >= 43312 && c <= 43334))) - : (c <= 43388 || (c < 43488 - ? (c < 43471 - ? (c >= 43396 && c <= 43442) - : c <= 43471) - : (c <= 43492 || (c >= 43494 && c <= 43503))))))))))))))) - : (c <= 43518 || (c < 70727 - ? (c < 66956 - ? (c < 64914 - ? (c < 43868 - ? (c < 43714 - ? (c < 43646 - ? (c < 43588 - ? (c < 43584 - ? (c >= 43520 && c <= 43560) - : c <= 43586) - : (c <= 43595 || (c < 43642 - ? (c >= 43616 && c <= 43638) - : c <= 43642))) - : (c <= 43695 || (c < 43705 - ? (c < 43701 - ? c == 43697 - : c <= 43702) - : (c <= 43709 || c == 43712)))) - : (c <= 43714 || (c < 43785 - ? (c < 43762 - ? (c < 43744 - ? (c >= 43739 && c <= 43741) - : c <= 43754) - : (c <= 43764 || (c >= 43777 && c <= 43782))) - : (c <= 43790 || (c < 43816 - ? (c < 43808 - ? (c >= 43793 && c <= 43798) - : c <= 43814) - : (c <= 43822 || (c >= 43824 && c <= 43866))))))) - : (c <= 43881 || (c < 64287 - ? (c < 63744 - ? (c < 55216 - ? (c < 44032 - ? (c >= 43888 && c <= 44002) - : c <= 55203) - : (c <= 55238 || (c >= 55243 && c <= 55291))) - : (c <= 64109 || (c < 64275 - ? (c < 64256 - ? (c >= 64112 && c <= 64217) - : c <= 64262) - : (c <= 64279 || c == 64285)))) - : (c <= 64296 || (c < 64323 - ? (c < 64318 - ? (c < 64312 - ? (c >= 64298 && c <= 64310) - : c <= 64316) - : (c <= 64318 || (c >= 64320 && c <= 64321))) - : (c <= 64324 || (c < 64612 - ? (c < 64467 - ? (c >= 64326 && c <= 64433) - : c <= 64605) - : (c <= 64829 || (c >= 64848 && c <= 64911))))))))) - : (c <= 64967 || (c < 65599 - ? (c < 65382 - ? (c < 65147 - ? (c < 65139 - ? (c < 65137 - ? (c >= 65008 && c <= 65017) - : c <= 65137) - : (c <= 65139 || (c < 65145 - ? c == 65143 - : c <= 65145))) - : (c <= 65147 || (c < 65313 - ? (c < 65151 - ? c == 65149 - : c <= 65276) - : (c <= 65338 || (c >= 65345 && c <= 65370))))) - : (c <= 65437 || (c < 65498 - ? (c < 65482 - ? (c < 65474 - ? (c >= 65440 && c <= 65470) - : c <= 65479) - : (c <= 65487 || (c >= 65490 && c <= 65495))) - : (c <= 65500 || (c < 65576 - ? (c < 65549 - ? (c >= 65536 && c <= 65547) - : c <= 65574) - : (c <= 65594 || (c >= 65596 && c <= 65597))))))) - : (c <= 65613 || (c < 66464 - ? (c < 66208 - ? (c < 65856 - ? (c < 65664 - ? (c >= 65616 && c <= 65629) - : c <= 65786) - : (c <= 65908 || (c >= 66176 && c <= 66204))) - : (c <= 66256 || (c < 66384 - ? (c < 66349 - ? (c >= 66304 && c <= 66335) - : c <= 66378) - : (c <= 66421 || (c >= 66432 && c <= 66461))))) - : (c <= 66499 || (c < 66776 - ? (c < 66560 - ? (c < 66513 - ? (c >= 66504 && c <= 66511) - : c <= 66517) - : (c <= 66717 || (c >= 66736 && c <= 66771))) - : (c <= 66811 || (c < 66928 - ? (c < 66864 - ? (c >= 66816 && c <= 66855) - : c <= 66915) - : (c <= 66938 || (c >= 66940 && c <= 66954))))))))))) - : (c <= 66962 || (c < 68864 - ? (c < 67828 - ? (c < 67506 - ? (c < 67072 - ? (c < 66979 - ? (c < 66967 - ? (c >= 66964 && c <= 66965) - : c <= 66977) - : (c <= 66993 || (c < 67003 - ? (c >= 66995 && c <= 67001) - : c <= 67004))) - : (c <= 67382 || (c < 67456 - ? (c < 67424 - ? (c >= 67392 && c <= 67413) - : c <= 67431) - : (c <= 67461 || (c >= 67463 && c <= 67504))))) - : (c <= 67514 || (c < 67644 - ? (c < 67594 - ? (c < 67592 - ? (c >= 67584 && c <= 67589) - : c <= 67592) - : (c <= 67637 || (c >= 67639 && c <= 67640))) - : (c <= 67644 || (c < 67712 - ? (c < 67680 - ? (c >= 67647 && c <= 67669) - : c <= 67702) - : (c <= 67742 || (c >= 67808 && c <= 67826))))))) - : (c <= 67829 || (c < 68224 - ? (c < 68096 - ? (c < 67968 - ? (c < 67872 - ? (c >= 67840 && c <= 67861) - : c <= 67897) - : (c <= 68023 || (c >= 68030 && c <= 68031))) - : (c <= 68096 || (c < 68121 - ? (c < 68117 - ? (c >= 68112 && c <= 68115) - : c <= 68119) - : (c <= 68149 || (c >= 68192 && c <= 68220))))) - : (c <= 68252 || (c < 68448 - ? (c < 68352 - ? (c < 68297 - ? (c >= 68288 && c <= 68295) - : c <= 68324) - : (c <= 68405 || (c >= 68416 && c <= 68437))) - : (c <= 68466 || (c < 68736 - ? (c < 68608 - ? (c >= 68480 && c <= 68497) - : c <= 68680) - : (c <= 68786 || (c >= 68800 && c <= 68850))))))))) - : (c <= 68899 || (c < 70106 - ? (c < 69749 - ? (c < 69488 - ? (c < 69376 - ? (c < 69296 - ? (c >= 69248 && c <= 69289) - : c <= 69297) - : (c <= 69404 || (c < 69424 - ? c == 69415 - : c <= 69445))) - : (c <= 69505 || (c < 69635 - ? (c < 69600 - ? (c >= 69552 && c <= 69572) - : c <= 69622) - : (c <= 69687 || (c >= 69745 && c <= 69746))))) - : (c <= 69749 || (c < 69959 - ? (c < 69891 - ? (c < 69840 - ? (c >= 69763 && c <= 69807) - : c <= 69864) - : (c <= 69926 || c == 69956)) - : (c <= 69959 || (c < 70019 - ? (c < 70006 - ? (c >= 69968 && c <= 70002) - : c <= 70006) - : (c <= 70066 || (c >= 70081 && c <= 70084))))))) - : (c <= 70106 || (c < 70405 - ? (c < 70280 - ? (c < 70163 - ? (c < 70144 - ? c == 70108 - : c <= 70161) - : (c <= 70187 || (c >= 70272 && c <= 70278))) - : (c <= 70280 || (c < 70303 - ? (c < 70287 - ? (c >= 70282 && c <= 70285) - : c <= 70301) - : (c <= 70312 || (c >= 70320 && c <= 70366))))) - : (c <= 70412 || (c < 70453 - ? (c < 70442 - ? (c < 70419 - ? (c >= 70415 && c <= 70416) - : c <= 70440) - : (c <= 70448 || (c >= 70450 && c <= 70451))) - : (c <= 70457 || (c < 70493 - ? (c < 70480 - ? c == 70461 - : c <= 70480) - : (c <= 70497 || (c >= 70656 && c <= 70708))))))))))))) - : (c <= 70730 || (c < 119894 - ? (c < 73056 - ? (c < 72001 - ? (c < 71424 - ? (c < 71128 - ? (c < 70852 - ? (c < 70784 - ? (c >= 70751 && c <= 70753) - : c <= 70831) - : (c <= 70853 || (c < 71040 - ? c == 70855 - : c <= 71086))) - : (c <= 71131 || (c < 71296 - ? (c < 71236 - ? (c >= 71168 && c <= 71215) - : c <= 71236) - : (c <= 71338 || c == 71352)))) - : (c <= 71450 || (c < 71945 - ? (c < 71840 - ? (c < 71680 - ? (c >= 71488 && c <= 71494) - : c <= 71723) - : (c <= 71903 || (c >= 71935 && c <= 71942))) - : (c <= 71945 || (c < 71960 - ? (c < 71957 - ? (c >= 71948 && c <= 71955) - : c <= 71958) - : (c <= 71983 || c == 71999)))))) - : (c <= 72001 || (c < 72349 - ? (c < 72192 - ? (c < 72161 - ? (c < 72106 - ? (c >= 72096 && c <= 72103) - : c <= 72144) - : (c <= 72161 || c == 72163)) - : (c <= 72192 || (c < 72272 - ? (c < 72250 - ? (c >= 72203 && c <= 72242) - : c <= 72250) - : (c <= 72272 || (c >= 72284 && c <= 72329))))) - : (c <= 72349 || (c < 72818 - ? (c < 72714 - ? (c < 72704 - ? (c >= 72368 && c <= 72440) - : c <= 72712) - : (c <= 72750 || c == 72768)) - : (c <= 72847 || (c < 72971 - ? (c < 72968 - ? (c >= 72960 && c <= 72966) - : c <= 72969) - : (c <= 73008 || c == 73030)))))))) - : (c <= 73061 || (c < 93952 - ? (c < 82944 - ? (c < 73728 - ? (c < 73112 - ? (c < 73066 - ? (c >= 73063 && c <= 73064) - : c <= 73097) - : (c <= 73112 || (c < 73648 - ? (c >= 73440 && c <= 73458) - : c <= 73648))) - : (c <= 74649 || (c < 77712 - ? (c < 74880 - ? (c >= 74752 && c <= 74862) - : c <= 75075) - : (c <= 77808 || (c >= 77824 && c <= 78894))))) - : (c <= 83526 || (c < 92928 - ? (c < 92784 - ? (c < 92736 - ? (c >= 92160 && c <= 92728) - : c <= 92766) - : (c <= 92862 || (c >= 92880 && c <= 92909))) - : (c <= 92975 || (c < 93053 - ? (c < 93027 - ? (c >= 92992 && c <= 92995) - : c <= 93047) - : (c <= 93071 || (c >= 93760 && c <= 93823))))))) - : (c <= 94026 || (c < 110589 - ? (c < 94208 - ? (c < 94176 - ? (c < 94099 - ? c == 94032 - : c <= 94111) - : (c <= 94177 || c == 94179)) - : (c <= 100343 || (c < 110576 - ? (c < 101632 - ? (c >= 100352 && c <= 101589) - : c <= 101640) - : (c <= 110579 || (c >= 110581 && c <= 110587))))) - : (c <= 110590 || (c < 113664 - ? (c < 110948 - ? (c < 110928 - ? (c >= 110592 && c <= 110882) - : c <= 110930) - : (c <= 110951 || (c >= 110960 && c <= 111355))) - : (c <= 113770 || (c < 113808 - ? (c < 113792 - ? (c >= 113776 && c <= 113788) - : c <= 113800) - : (c <= 113817 || (c >= 119808 && c <= 119892))))))))))) - : (c <= 119964 || (c < 125259 - ? (c < 120572 - ? (c < 120086 - ? (c < 119995 - ? (c < 119973 - ? (c < 119970 - ? (c >= 119966 && c <= 119967) - : c <= 119970) - : (c <= 119974 || (c < 119982 - ? (c >= 119977 && c <= 119980) - : c <= 119993))) - : (c <= 119995 || (c < 120071 - ? (c < 120005 - ? (c >= 119997 && c <= 120003) - : c <= 120069) - : (c <= 120074 || (c >= 120077 && c <= 120084))))) - : (c <= 120092 || (c < 120138 - ? (c < 120128 - ? (c < 120123 - ? (c >= 120094 && c <= 120121) - : c <= 120126) - : (c <= 120132 || c == 120134)) - : (c <= 120144 || (c < 120514 - ? (c < 120488 - ? (c >= 120146 && c <= 120485) - : c <= 120512) - : (c <= 120538 || (c >= 120540 && c <= 120570))))))) - : (c <= 120596 || (c < 123191 - ? (c < 120714 - ? (c < 120656 - ? (c < 120630 - ? (c >= 120598 && c <= 120628) - : c <= 120654) - : (c <= 120686 || (c >= 120688 && c <= 120712))) - : (c <= 120744 || (c < 122624 - ? (c < 120772 - ? (c >= 120746 && c <= 120770) - : c <= 120779) - : (c <= 122654 || (c >= 123136 && c <= 123180))))) - : (c <= 123197 || (c < 124904 - ? (c < 123584 - ? (c < 123536 - ? c == 123214 - : c <= 123565) - : (c <= 123627 || (c >= 124896 && c <= 124902))) - : (c <= 124907 || (c < 124928 - ? (c < 124912 - ? (c >= 124909 && c <= 124910) - : c <= 124926) - : (c <= 125124 || (c >= 125184 && c <= 125251))))))))) - : (c <= 125259 || (c < 126559 - ? (c < 126535 - ? (c < 126505 - ? (c < 126497 - ? (c < 126469 - ? (c >= 126464 && c <= 126467) - : c <= 126495) - : (c <= 126498 || (c < 126503 - ? c == 126500 - : c <= 126503))) - : (c <= 126514 || (c < 126523 - ? (c < 126521 - ? (c >= 126516 && c <= 126519) - : c <= 126521) - : (c <= 126523 || c == 126530)))) - : (c <= 126535 || (c < 126548 - ? (c < 126541 - ? (c < 126539 - ? c == 126537 - : c <= 126539) - : (c <= 126543 || (c >= 126545 && c <= 126546))) - : (c <= 126548 || (c < 126555 - ? (c < 126553 - ? c == 126551 - : c <= 126553) - : (c <= 126555 || c == 126557)))))) - : (c <= 126559 || (c < 126625 - ? (c < 126580 - ? (c < 126567 - ? (c < 126564 - ? (c >= 126561 && c <= 126562) - : c <= 126564) - : (c <= 126570 || (c >= 126572 && c <= 126578))) - : (c <= 126583 || (c < 126592 - ? (c < 126590 - ? (c >= 126585 && c <= 126588) - : c <= 126590) - : (c <= 126601 || (c >= 126603 && c <= 126619))))) - : (c <= 126627 || (c < 177984 - ? (c < 131072 - ? (c < 126635 - ? (c >= 126629 && c <= 126633) - : c <= 126651) - : (c <= 173791 || (c >= 173824 && c <= 177976))) - : (c <= 178205 || (c < 194560 - ? (c < 183984 - ? (c >= 178208 && c <= 183969) - : c <= 191456) - : (c <= 195101 || (c >= 196608 && c <= 201546))))))))))))))))); -} - -static inline bool sym_identifier_character_set_2(int32_t c) { - return (c < 43514 - ? (c < 4193 - ? (c < 2707 - ? (c < 1994 - ? (c < 910 - ? (c < 736 - ? (c < 186 - ? (c < 'a' - ? (c < '_' - ? (c >= 'A' && c <= 'Z') - : c <= '_') - : (c <= 'z' || (c < 181 - ? c == 170 - : c <= 181))) - : (c <= 186 || (c < 248 - ? (c < 216 - ? (c >= 192 && c <= 214) - : c <= 246) - : (c <= 705 || (c >= 710 && c <= 721))))) - : (c <= 740 || (c < 891 - ? (c < 880 - ? (c < 750 - ? c == 748 - : c <= 750) - : (c <= 884 || (c >= 886 && c <= 887))) - : (c <= 893 || (c < 904 - ? (c < 902 - ? c == 895 - : c <= 902) - : (c <= 906 || c == 908)))))) - : (c <= 929 || (c < 1649 - ? (c < 1376 - ? (c < 1162 - ? (c < 1015 - ? (c >= 931 && c <= 1013) - : c <= 1153) - : (c <= 1327 || (c < 1369 - ? (c >= 1329 && c <= 1366) - : c <= 1369))) - : (c <= 1416 || (c < 1568 - ? (c < 1519 - ? (c >= 1488 && c <= 1514) - : c <= 1522) - : (c <= 1610 || (c >= 1646 && c <= 1647))))) - : (c <= 1747 || (c < 1791 - ? (c < 1774 - ? (c < 1765 - ? c == 1749 - : c <= 1766) - : (c <= 1775 || (c >= 1786 && c <= 1788))) - : (c <= 1791 || (c < 1869 - ? (c < 1810 - ? c == 1808 - : c <= 1839) - : (c <= 1957 || c == 1969)))))))) - : (c <= 2026 || (c < 2482 - ? (c < 2208 - ? (c < 2088 - ? (c < 2048 - ? (c < 2042 - ? (c >= 2036 && c <= 2037) - : c <= 2042) - : (c <= 2069 || (c < 2084 - ? c == 2074 - : c <= 2084))) - : (c <= 2088 || (c < 2160 - ? (c < 2144 - ? (c >= 2112 && c <= 2136) - : c <= 2154) - : (c <= 2183 || (c >= 2185 && c <= 2190))))) - : (c <= 2249 || (c < 2417 - ? (c < 2384 - ? (c < 2365 - ? (c >= 2308 && c <= 2361) - : c <= 2365) - : (c <= 2384 || (c >= 2392 && c <= 2401))) - : (c <= 2432 || (c < 2451 - ? (c < 2447 - ? (c >= 2437 && c <= 2444) - : c <= 2448) - : (c <= 2472 || (c >= 2474 && c <= 2480))))))) - : (c <= 2482 || (c < 2579 - ? (c < 2527 - ? (c < 2510 - ? (c < 2493 - ? (c >= 2486 && c <= 2489) - : c <= 2493) - : (c <= 2510 || (c >= 2524 && c <= 2525))) - : (c <= 2529 || (c < 2565 - ? (c < 2556 - ? (c >= 2544 && c <= 2545) - : c <= 2556) - : (c <= 2570 || (c >= 2575 && c <= 2576))))) - : (c <= 2600 || (c < 2649 - ? (c < 2613 - ? (c < 2610 - ? (c >= 2602 && c <= 2608) - : c <= 2611) - : (c <= 2614 || (c >= 2616 && c <= 2617))) - : (c <= 2652 || (c < 2693 - ? (c < 2674 - ? c == 2654 - : c <= 2676) - : (c <= 2701 || (c >= 2703 && c <= 2705))))))))))) - : (c <= 2728 || (c < 3242 - ? (c < 2962 - ? (c < 2858 - ? (c < 2784 - ? (c < 2741 - ? (c < 2738 - ? (c >= 2730 && c <= 2736) - : c <= 2739) - : (c <= 2745 || (c < 2768 - ? c == 2749 - : c <= 2768))) - : (c <= 2785 || (c < 2831 - ? (c < 2821 - ? c == 2809 - : c <= 2828) - : (c <= 2832 || (c >= 2835 && c <= 2856))))) - : (c <= 2864 || (c < 2911 - ? (c < 2877 - ? (c < 2869 - ? (c >= 2866 && c <= 2867) - : c <= 2873) - : (c <= 2877 || (c >= 2908 && c <= 2909))) - : (c <= 2913 || (c < 2949 - ? (c < 2947 - ? c == 2929 - : c <= 2947) - : (c <= 2954 || (c >= 2958 && c <= 2960))))))) - : (c <= 2965 || (c < 3090 - ? (c < 2984 - ? (c < 2974 - ? (c < 2972 - ? (c >= 2969 && c <= 2970) - : c <= 2972) - : (c <= 2975 || (c >= 2979 && c <= 2980))) - : (c <= 2986 || (c < 3077 - ? (c < 3024 - ? (c >= 2990 && c <= 3001) - : c <= 3024) - : (c <= 3084 || (c >= 3086 && c <= 3088))))) - : (c <= 3112 || (c < 3168 - ? (c < 3160 - ? (c < 3133 - ? (c >= 3114 && c <= 3129) - : c <= 3133) - : (c <= 3162 || c == 3165)) - : (c <= 3169 || (c < 3214 - ? (c < 3205 - ? c == 3200 - : c <= 3212) - : (c <= 3216 || (c >= 3218 && c <= 3240))))))))) - : (c <= 3251 || (c < 3648 - ? (c < 3412 - ? (c < 3332 - ? (c < 3293 - ? (c < 3261 - ? (c >= 3253 && c <= 3257) - : c <= 3261) - : (c <= 3294 || (c < 3313 - ? (c >= 3296 && c <= 3297) - : c <= 3314))) - : (c <= 3340 || (c < 3389 - ? (c < 3346 - ? (c >= 3342 && c <= 3344) - : c <= 3386) - : (c <= 3389 || c == 3406)))) - : (c <= 3414 || (c < 3507 - ? (c < 3461 - ? (c < 3450 - ? (c >= 3423 && c <= 3425) - : c <= 3455) - : (c <= 3478 || (c >= 3482 && c <= 3505))) - : (c <= 3515 || (c < 3585 - ? (c < 3520 - ? c == 3517 - : c <= 3526) - : (c <= 3632 || c == 3634)))))) - : (c <= 3654 || (c < 3782 - ? (c < 3749 - ? (c < 3718 - ? (c < 3716 - ? (c >= 3713 && c <= 3714) - : c <= 3716) - : (c <= 3722 || (c >= 3724 && c <= 3747))) - : (c <= 3749 || (c < 3773 - ? (c < 3762 - ? (c >= 3751 && c <= 3760) - : c <= 3762) - : (c <= 3773 || (c >= 3776 && c <= 3780))))) - : (c <= 3782 || (c < 3976 - ? (c < 3904 - ? (c < 3840 - ? (c >= 3804 && c <= 3807) - : c <= 3840) - : (c <= 3911 || (c >= 3913 && c <= 3948))) - : (c <= 3980 || (c < 4176 - ? (c < 4159 - ? (c >= 4096 && c <= 4138) - : c <= 4159) - : (c <= 4181 || (c >= 4186 && c <= 4189))))))))))))) - : (c <= 4193 || (c < 8134 - ? (c < 6176 - ? (c < 4808 - ? (c < 4688 - ? (c < 4295 - ? (c < 4213 - ? (c < 4206 - ? (c >= 4197 && c <= 4198) - : c <= 4208) - : (c <= 4225 || (c < 4256 - ? c == 4238 - : c <= 4293))) - : (c <= 4295 || (c < 4348 - ? (c < 4304 - ? c == 4301 - : c <= 4346) - : (c <= 4680 || (c >= 4682 && c <= 4685))))) - : (c <= 4694 || (c < 4752 - ? (c < 4704 - ? (c < 4698 - ? c == 4696 - : c <= 4701) - : (c <= 4744 || (c >= 4746 && c <= 4749))) - : (c <= 4784 || (c < 4800 - ? (c < 4792 - ? (c >= 4786 && c <= 4789) - : c <= 4798) - : (c <= 4800 || (c >= 4802 && c <= 4805))))))) - : (c <= 4822 || (c < 5792 - ? (c < 5024 - ? (c < 4888 - ? (c < 4882 - ? (c >= 4824 && c <= 4880) - : c <= 4885) - : (c <= 4954 || (c >= 4992 && c <= 5007))) - : (c <= 5109 || (c < 5743 - ? (c < 5121 - ? (c >= 5112 && c <= 5117) - : c <= 5740) - : (c <= 5759 || (c >= 5761 && c <= 5786))))) - : (c <= 5866 || (c < 5984 - ? (c < 5919 - ? (c < 5888 - ? (c >= 5870 && c <= 5880) - : c <= 5905) - : (c <= 5937 || (c >= 5952 && c <= 5969))) - : (c <= 5996 || (c < 6103 - ? (c < 6016 - ? (c >= 5998 && c <= 6000) - : c <= 6067) - : (c <= 6103 || c == 6108)))))))) - : (c <= 6264 || (c < 7312 - ? (c < 6823 - ? (c < 6512 - ? (c < 6320 - ? (c < 6314 - ? (c >= 6272 && c <= 6312) - : c <= 6314) - : (c <= 6389 || (c < 6480 - ? (c >= 6400 && c <= 6430) - : c <= 6509))) - : (c <= 6516 || (c < 6656 - ? (c < 6576 - ? (c >= 6528 && c <= 6571) - : c <= 6601) - : (c <= 6678 || (c >= 6688 && c <= 6740))))) - : (c <= 6823 || (c < 7098 - ? (c < 7043 - ? (c < 6981 - ? (c >= 6917 && c <= 6963) - : c <= 6988) - : (c <= 7072 || (c >= 7086 && c <= 7087))) - : (c <= 7141 || (c < 7258 - ? (c < 7245 - ? (c >= 7168 && c <= 7203) - : c <= 7247) - : (c <= 7293 || (c >= 7296 && c <= 7304))))))) - : (c <= 7354 || (c < 8008 - ? (c < 7418 - ? (c < 7406 - ? (c < 7401 - ? (c >= 7357 && c <= 7359) - : c <= 7404) - : (c <= 7411 || (c >= 7413 && c <= 7414))) - : (c <= 7418 || (c < 7960 - ? (c < 7680 - ? (c >= 7424 && c <= 7615) - : c <= 7957) - : (c <= 7965 || (c >= 7968 && c <= 8005))))) - : (c <= 8013 || (c < 8031 - ? (c < 8027 - ? (c < 8025 - ? (c >= 8016 && c <= 8023) - : c <= 8025) - : (c <= 8027 || c == 8029)) - : (c <= 8061 || (c < 8126 - ? (c < 8118 - ? (c >= 8064 && c <= 8116) - : c <= 8124) - : (c <= 8126 || (c >= 8130 && c <= 8132))))))))))) - : (c <= 8140 || (c < 12337 - ? (c < 8544 - ? (c < 8458 - ? (c < 8305 - ? (c < 8160 - ? (c < 8150 - ? (c >= 8144 && c <= 8147) - : c <= 8155) - : (c <= 8172 || (c < 8182 - ? (c >= 8178 && c <= 8180) - : c <= 8188))) - : (c <= 8305 || (c < 8450 - ? (c < 8336 - ? c == 8319 - : c <= 8348) - : (c <= 8450 || c == 8455)))) - : (c <= 8467 || (c < 8488 - ? (c < 8484 - ? (c < 8472 - ? c == 8469 - : c <= 8477) - : (c <= 8484 || c == 8486)) - : (c <= 8488 || (c < 8517 - ? (c < 8508 - ? (c >= 8490 && c <= 8505) - : c <= 8511) - : (c <= 8521 || c == 8526)))))) - : (c <= 8584 || (c < 11680 - ? (c < 11559 - ? (c < 11506 - ? (c < 11499 - ? (c >= 11264 && c <= 11492) - : c <= 11502) - : (c <= 11507 || (c >= 11520 && c <= 11557))) - : (c <= 11559 || (c < 11631 - ? (c < 11568 - ? c == 11565 - : c <= 11623) - : (c <= 11631 || (c >= 11648 && c <= 11670))))) - : (c <= 11686 || (c < 11720 - ? (c < 11704 - ? (c < 11696 - ? (c >= 11688 && c <= 11694) - : c <= 11702) - : (c <= 11710 || (c >= 11712 && c <= 11718))) - : (c <= 11726 || (c < 12293 - ? (c < 11736 - ? (c >= 11728 && c <= 11734) - : c <= 11742) - : (c <= 12295 || (c >= 12321 && c <= 12329))))))))) - : (c <= 12341 || (c < 42891 - ? (c < 19968 - ? (c < 12549 - ? (c < 12445 - ? (c < 12353 - ? (c >= 12344 && c <= 12348) - : c <= 12438) - : (c <= 12447 || (c < 12540 - ? (c >= 12449 && c <= 12538) - : c <= 12543))) - : (c <= 12591 || (c < 12784 - ? (c < 12704 - ? (c >= 12593 && c <= 12686) - : c <= 12735) - : (c <= 12799 || (c >= 13312 && c <= 19903))))) - : (c <= 42124 || (c < 42560 - ? (c < 42512 - ? (c < 42240 - ? (c >= 42192 && c <= 42237) - : c <= 42508) - : (c <= 42527 || (c >= 42538 && c <= 42539))) - : (c <= 42606 || (c < 42775 - ? (c < 42656 - ? (c >= 42623 && c <= 42653) - : c <= 42735) - : (c <= 42783 || (c >= 42786 && c <= 42888))))))) - : (c <= 42954 || (c < 43250 - ? (c < 43011 - ? (c < 42965 - ? (c < 42963 - ? (c >= 42960 && c <= 42961) - : c <= 42963) - : (c <= 42969 || (c >= 42994 && c <= 43009))) - : (c <= 43013 || (c < 43072 - ? (c < 43020 - ? (c >= 43015 && c <= 43018) - : c <= 43042) - : (c <= 43123 || (c >= 43138 && c <= 43187))))) - : (c <= 43255 || (c < 43360 - ? (c < 43274 - ? (c < 43261 - ? c == 43259 - : c <= 43262) - : (c <= 43301 || (c >= 43312 && c <= 43334))) - : (c <= 43388 || (c < 43488 - ? (c < 43471 - ? (c >= 43396 && c <= 43442) - : c <= 43471) - : (c <= 43492 || (c >= 43494 && c <= 43503))))))))))))))) - : (c <= 43518 || (c < 70727 - ? (c < 66956 - ? (c < 64914 - ? (c < 43868 - ? (c < 43714 - ? (c < 43646 - ? (c < 43588 - ? (c < 43584 - ? (c >= 43520 && c <= 43560) - : c <= 43586) - : (c <= 43595 || (c < 43642 - ? (c >= 43616 && c <= 43638) - : c <= 43642))) - : (c <= 43695 || (c < 43705 - ? (c < 43701 - ? c == 43697 - : c <= 43702) - : (c <= 43709 || c == 43712)))) - : (c <= 43714 || (c < 43785 - ? (c < 43762 - ? (c < 43744 - ? (c >= 43739 && c <= 43741) - : c <= 43754) - : (c <= 43764 || (c >= 43777 && c <= 43782))) - : (c <= 43790 || (c < 43816 - ? (c < 43808 - ? (c >= 43793 && c <= 43798) - : c <= 43814) - : (c <= 43822 || (c >= 43824 && c <= 43866))))))) - : (c <= 43881 || (c < 64287 - ? (c < 63744 - ? (c < 55216 - ? (c < 44032 - ? (c >= 43888 && c <= 44002) - : c <= 55203) - : (c <= 55238 || (c >= 55243 && c <= 55291))) - : (c <= 64109 || (c < 64275 - ? (c < 64256 - ? (c >= 64112 && c <= 64217) - : c <= 64262) - : (c <= 64279 || c == 64285)))) - : (c <= 64296 || (c < 64323 - ? (c < 64318 - ? (c < 64312 - ? (c >= 64298 && c <= 64310) - : c <= 64316) - : (c <= 64318 || (c >= 64320 && c <= 64321))) - : (c <= 64324 || (c < 64612 - ? (c < 64467 - ? (c >= 64326 && c <= 64433) - : c <= 64605) - : (c <= 64829 || (c >= 64848 && c <= 64911))))))))) - : (c <= 64967 || (c < 65599 - ? (c < 65382 - ? (c < 65147 - ? (c < 65139 - ? (c < 65137 - ? (c >= 65008 && c <= 65017) - : c <= 65137) - : (c <= 65139 || (c < 65145 - ? c == 65143 - : c <= 65145))) - : (c <= 65147 || (c < 65313 - ? (c < 65151 - ? c == 65149 - : c <= 65276) - : (c <= 65338 || (c >= 65345 && c <= 65370))))) - : (c <= 65437 || (c < 65498 - ? (c < 65482 - ? (c < 65474 - ? (c >= 65440 && c <= 65470) - : c <= 65479) - : (c <= 65487 || (c >= 65490 && c <= 65495))) - : (c <= 65500 || (c < 65576 - ? (c < 65549 - ? (c >= 65536 && c <= 65547) - : c <= 65574) - : (c <= 65594 || (c >= 65596 && c <= 65597))))))) - : (c <= 65613 || (c < 66464 - ? (c < 66208 - ? (c < 65856 - ? (c < 65664 - ? (c >= 65616 && c <= 65629) - : c <= 65786) - : (c <= 65908 || (c >= 66176 && c <= 66204))) - : (c <= 66256 || (c < 66384 - ? (c < 66349 - ? (c >= 66304 && c <= 66335) - : c <= 66378) - : (c <= 66421 || (c >= 66432 && c <= 66461))))) - : (c <= 66499 || (c < 66776 - ? (c < 66560 - ? (c < 66513 - ? (c >= 66504 && c <= 66511) - : c <= 66517) - : (c <= 66717 || (c >= 66736 && c <= 66771))) - : (c <= 66811 || (c < 66928 - ? (c < 66864 - ? (c >= 66816 && c <= 66855) - : c <= 66915) - : (c <= 66938 || (c >= 66940 && c <= 66954))))))))))) - : (c <= 66962 || (c < 68864 - ? (c < 67828 - ? (c < 67506 - ? (c < 67072 - ? (c < 66979 - ? (c < 66967 - ? (c >= 66964 && c <= 66965) - : c <= 66977) - : (c <= 66993 || (c < 67003 - ? (c >= 66995 && c <= 67001) - : c <= 67004))) - : (c <= 67382 || (c < 67456 - ? (c < 67424 - ? (c >= 67392 && c <= 67413) - : c <= 67431) - : (c <= 67461 || (c >= 67463 && c <= 67504))))) - : (c <= 67514 || (c < 67644 - ? (c < 67594 - ? (c < 67592 - ? (c >= 67584 && c <= 67589) - : c <= 67592) - : (c <= 67637 || (c >= 67639 && c <= 67640))) - : (c <= 67644 || (c < 67712 - ? (c < 67680 - ? (c >= 67647 && c <= 67669) - : c <= 67702) - : (c <= 67742 || (c >= 67808 && c <= 67826))))))) - : (c <= 67829 || (c < 68224 - ? (c < 68096 - ? (c < 67968 - ? (c < 67872 - ? (c >= 67840 && c <= 67861) - : c <= 67897) - : (c <= 68023 || (c >= 68030 && c <= 68031))) - : (c <= 68096 || (c < 68121 - ? (c < 68117 - ? (c >= 68112 && c <= 68115) - : c <= 68119) - : (c <= 68149 || (c >= 68192 && c <= 68220))))) - : (c <= 68252 || (c < 68448 - ? (c < 68352 - ? (c < 68297 - ? (c >= 68288 && c <= 68295) - : c <= 68324) - : (c <= 68405 || (c >= 68416 && c <= 68437))) - : (c <= 68466 || (c < 68736 - ? (c < 68608 - ? (c >= 68480 && c <= 68497) - : c <= 68680) - : (c <= 68786 || (c >= 68800 && c <= 68850))))))))) - : (c <= 68899 || (c < 70106 - ? (c < 69749 - ? (c < 69488 - ? (c < 69376 - ? (c < 69296 - ? (c >= 69248 && c <= 69289) - : c <= 69297) - : (c <= 69404 || (c < 69424 - ? c == 69415 - : c <= 69445))) - : (c <= 69505 || (c < 69635 - ? (c < 69600 - ? (c >= 69552 && c <= 69572) - : c <= 69622) - : (c <= 69687 || (c >= 69745 && c <= 69746))))) - : (c <= 69749 || (c < 69959 - ? (c < 69891 - ? (c < 69840 - ? (c >= 69763 && c <= 69807) - : c <= 69864) - : (c <= 69926 || c == 69956)) - : (c <= 69959 || (c < 70019 - ? (c < 70006 - ? (c >= 69968 && c <= 70002) - : c <= 70006) - : (c <= 70066 || (c >= 70081 && c <= 70084))))))) - : (c <= 70106 || (c < 70405 - ? (c < 70280 - ? (c < 70163 - ? (c < 70144 - ? c == 70108 - : c <= 70161) - : (c <= 70187 || (c >= 70272 && c <= 70278))) - : (c <= 70280 || (c < 70303 - ? (c < 70287 - ? (c >= 70282 && c <= 70285) - : c <= 70301) - : (c <= 70312 || (c >= 70320 && c <= 70366))))) - : (c <= 70412 || (c < 70453 - ? (c < 70442 - ? (c < 70419 - ? (c >= 70415 && c <= 70416) - : c <= 70440) - : (c <= 70448 || (c >= 70450 && c <= 70451))) - : (c <= 70457 || (c < 70493 - ? (c < 70480 - ? c == 70461 - : c <= 70480) - : (c <= 70497 || (c >= 70656 && c <= 70708))))))))))))) - : (c <= 70730 || (c < 119894 - ? (c < 73056 - ? (c < 72001 - ? (c < 71424 - ? (c < 71128 - ? (c < 70852 - ? (c < 70784 - ? (c >= 70751 && c <= 70753) - : c <= 70831) - : (c <= 70853 || (c < 71040 - ? c == 70855 - : c <= 71086))) - : (c <= 71131 || (c < 71296 - ? (c < 71236 - ? (c >= 71168 && c <= 71215) - : c <= 71236) - : (c <= 71338 || c == 71352)))) - : (c <= 71450 || (c < 71945 - ? (c < 71840 - ? (c < 71680 - ? (c >= 71488 && c <= 71494) - : c <= 71723) - : (c <= 71903 || (c >= 71935 && c <= 71942))) - : (c <= 71945 || (c < 71960 - ? (c < 71957 - ? (c >= 71948 && c <= 71955) - : c <= 71958) - : (c <= 71983 || c == 71999)))))) - : (c <= 72001 || (c < 72349 - ? (c < 72192 - ? (c < 72161 - ? (c < 72106 - ? (c >= 72096 && c <= 72103) - : c <= 72144) - : (c <= 72161 || c == 72163)) - : (c <= 72192 || (c < 72272 - ? (c < 72250 - ? (c >= 72203 && c <= 72242) - : c <= 72250) - : (c <= 72272 || (c >= 72284 && c <= 72329))))) - : (c <= 72349 || (c < 72818 - ? (c < 72714 - ? (c < 72704 - ? (c >= 72368 && c <= 72440) - : c <= 72712) - : (c <= 72750 || c == 72768)) - : (c <= 72847 || (c < 72971 - ? (c < 72968 - ? (c >= 72960 && c <= 72966) - : c <= 72969) - : (c <= 73008 || c == 73030)))))))) - : (c <= 73061 || (c < 93952 - ? (c < 82944 - ? (c < 73728 - ? (c < 73112 - ? (c < 73066 - ? (c >= 73063 && c <= 73064) - : c <= 73097) - : (c <= 73112 || (c < 73648 - ? (c >= 73440 && c <= 73458) - : c <= 73648))) - : (c <= 74649 || (c < 77712 - ? (c < 74880 - ? (c >= 74752 && c <= 74862) - : c <= 75075) - : (c <= 77808 || (c >= 77824 && c <= 78894))))) - : (c <= 83526 || (c < 92928 - ? (c < 92784 - ? (c < 92736 - ? (c >= 92160 && c <= 92728) - : c <= 92766) - : (c <= 92862 || (c >= 92880 && c <= 92909))) - : (c <= 92975 || (c < 93053 - ? (c < 93027 - ? (c >= 92992 && c <= 92995) - : c <= 93047) - : (c <= 93071 || (c >= 93760 && c <= 93823))))))) - : (c <= 94026 || (c < 110589 - ? (c < 94208 - ? (c < 94176 - ? (c < 94099 - ? c == 94032 - : c <= 94111) - : (c <= 94177 || c == 94179)) - : (c <= 100343 || (c < 110576 - ? (c < 101632 - ? (c >= 100352 && c <= 101589) - : c <= 101640) - : (c <= 110579 || (c >= 110581 && c <= 110587))))) - : (c <= 110590 || (c < 113664 - ? (c < 110948 - ? (c < 110928 - ? (c >= 110592 && c <= 110882) - : c <= 110930) - : (c <= 110951 || (c >= 110960 && c <= 111355))) - : (c <= 113770 || (c < 113808 - ? (c < 113792 - ? (c >= 113776 && c <= 113788) - : c <= 113800) - : (c <= 113817 || (c >= 119808 && c <= 119892))))))))))) - : (c <= 119964 || (c < 125259 - ? (c < 120572 - ? (c < 120086 - ? (c < 119995 - ? (c < 119973 - ? (c < 119970 - ? (c >= 119966 && c <= 119967) - : c <= 119970) - : (c <= 119974 || (c < 119982 - ? (c >= 119977 && c <= 119980) - : c <= 119993))) - : (c <= 119995 || (c < 120071 - ? (c < 120005 - ? (c >= 119997 && c <= 120003) - : c <= 120069) - : (c <= 120074 || (c >= 120077 && c <= 120084))))) - : (c <= 120092 || (c < 120138 - ? (c < 120128 - ? (c < 120123 - ? (c >= 120094 && c <= 120121) - : c <= 120126) - : (c <= 120132 || c == 120134)) - : (c <= 120144 || (c < 120514 - ? (c < 120488 - ? (c >= 120146 && c <= 120485) - : c <= 120512) - : (c <= 120538 || (c >= 120540 && c <= 120570))))))) - : (c <= 120596 || (c < 123191 - ? (c < 120714 - ? (c < 120656 - ? (c < 120630 - ? (c >= 120598 && c <= 120628) - : c <= 120654) - : (c <= 120686 || (c >= 120688 && c <= 120712))) - : (c <= 120744 || (c < 122624 - ? (c < 120772 - ? (c >= 120746 && c <= 120770) - : c <= 120779) - : (c <= 122654 || (c >= 123136 && c <= 123180))))) - : (c <= 123197 || (c < 124904 - ? (c < 123584 - ? (c < 123536 - ? c == 123214 - : c <= 123565) - : (c <= 123627 || (c >= 124896 && c <= 124902))) - : (c <= 124907 || (c < 124928 - ? (c < 124912 - ? (c >= 124909 && c <= 124910) - : c <= 124926) - : (c <= 125124 || (c >= 125184 && c <= 125251))))))))) - : (c <= 125259 || (c < 126559 - ? (c < 126535 - ? (c < 126505 - ? (c < 126497 - ? (c < 126469 - ? (c >= 126464 && c <= 126467) - : c <= 126495) - : (c <= 126498 || (c < 126503 - ? c == 126500 - : c <= 126503))) - : (c <= 126514 || (c < 126523 - ? (c < 126521 - ? (c >= 126516 && c <= 126519) - : c <= 126521) - : (c <= 126523 || c == 126530)))) - : (c <= 126535 || (c < 126548 - ? (c < 126541 - ? (c < 126539 - ? c == 126537 - : c <= 126539) - : (c <= 126543 || (c >= 126545 && c <= 126546))) - : (c <= 126548 || (c < 126555 - ? (c < 126553 - ? c == 126551 - : c <= 126553) - : (c <= 126555 || c == 126557)))))) - : (c <= 126559 || (c < 126625 - ? (c < 126580 - ? (c < 126567 - ? (c < 126564 - ? (c >= 126561 && c <= 126562) - : c <= 126564) - : (c <= 126570 || (c >= 126572 && c <= 126578))) - : (c <= 126583 || (c < 126592 - ? (c < 126590 - ? (c >= 126585 && c <= 126588) - : c <= 126590) - : (c <= 126601 || (c >= 126603 && c <= 126619))))) - : (c <= 126627 || (c < 177984 - ? (c < 131072 - ? (c < 126635 - ? (c >= 126629 && c <= 126633) - : c <= 126651) - : (c <= 173791 || (c >= 173824 && c <= 177976))) - : (c <= 178205 || (c < 194560 - ? (c < 183984 - ? (c >= 178208 && c <= 183969) - : c <= 191456) - : (c <= 195101 || (c >= 196608 && c <= 201546))))))))))))))))); -} +static TSCharacterRange sym_identifier_character_set_1[] = { + {'A', 'Z'}, {'_', '_'}, {'a', 'z'}, {0xaa, 0xaa}, {0xb5, 0xb5}, {0xba, 0xba}, {0xc0, 0xd6}, {0xd8, 0xf6}, + {0xf8, 0x2c1}, {0x2c6, 0x2d1}, {0x2e0, 0x2e4}, {0x2ec, 0x2ec}, {0x2ee, 0x2ee}, {0x370, 0x374}, {0x376, 0x377}, {0x37b, 0x37d}, + {0x37f, 0x37f}, {0x386, 0x386}, {0x388, 0x38a}, {0x38c, 0x38c}, {0x38e, 0x3a1}, {0x3a3, 0x3f5}, {0x3f7, 0x481}, {0x48a, 0x52f}, + {0x531, 0x556}, {0x559, 0x559}, {0x560, 0x588}, {0x5d0, 0x5ea}, {0x5ef, 0x5f2}, {0x620, 0x64a}, {0x66e, 0x66f}, {0x671, 0x6d3}, + {0x6d5, 0x6d5}, {0x6e5, 0x6e6}, {0x6ee, 0x6ef}, {0x6fa, 0x6fc}, {0x6ff, 0x6ff}, {0x710, 0x710}, {0x712, 0x72f}, {0x74d, 0x7a5}, + {0x7b1, 0x7b1}, {0x7ca, 0x7ea}, {0x7f4, 0x7f5}, {0x7fa, 0x7fa}, {0x800, 0x815}, {0x81a, 0x81a}, {0x824, 0x824}, {0x828, 0x828}, + {0x840, 0x858}, {0x860, 0x86a}, {0x870, 0x887}, {0x889, 0x88e}, {0x8a0, 0x8c9}, {0x904, 0x939}, {0x93d, 0x93d}, {0x950, 0x950}, + {0x958, 0x961}, {0x971, 0x980}, {0x985, 0x98c}, {0x98f, 0x990}, {0x993, 0x9a8}, {0x9aa, 0x9b0}, {0x9b2, 0x9b2}, {0x9b6, 0x9b9}, + {0x9bd, 0x9bd}, {0x9ce, 0x9ce}, {0x9dc, 0x9dd}, {0x9df, 0x9e1}, {0x9f0, 0x9f1}, {0x9fc, 0x9fc}, {0xa05, 0xa0a}, {0xa0f, 0xa10}, + {0xa13, 0xa28}, {0xa2a, 0xa30}, {0xa32, 0xa33}, {0xa35, 0xa36}, {0xa38, 0xa39}, {0xa59, 0xa5c}, {0xa5e, 0xa5e}, {0xa72, 0xa74}, + {0xa85, 0xa8d}, {0xa8f, 0xa91}, {0xa93, 0xaa8}, {0xaaa, 0xab0}, {0xab2, 0xab3}, {0xab5, 0xab9}, {0xabd, 0xabd}, {0xad0, 0xad0}, + {0xae0, 0xae1}, {0xaf9, 0xaf9}, {0xb05, 0xb0c}, {0xb0f, 0xb10}, {0xb13, 0xb28}, {0xb2a, 0xb30}, {0xb32, 0xb33}, {0xb35, 0xb39}, + {0xb3d, 0xb3d}, {0xb5c, 0xb5d}, {0xb5f, 0xb61}, {0xb71, 0xb71}, {0xb83, 0xb83}, {0xb85, 0xb8a}, {0xb8e, 0xb90}, {0xb92, 0xb95}, + {0xb99, 0xb9a}, {0xb9c, 0xb9c}, {0xb9e, 0xb9f}, {0xba3, 0xba4}, {0xba8, 0xbaa}, {0xbae, 0xbb9}, {0xbd0, 0xbd0}, {0xc05, 0xc0c}, + {0xc0e, 0xc10}, {0xc12, 0xc28}, {0xc2a, 0xc39}, {0xc3d, 0xc3d}, {0xc58, 0xc5a}, {0xc5d, 0xc5d}, {0xc60, 0xc61}, {0xc80, 0xc80}, + {0xc85, 0xc8c}, {0xc8e, 0xc90}, {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, {0xcbd, 0xcbd}, {0xcdd, 0xcde}, {0xce0, 0xce1}, + {0xcf1, 0xcf2}, {0xd04, 0xd0c}, {0xd0e, 0xd10}, {0xd12, 0xd3a}, {0xd3d, 0xd3d}, {0xd4e, 0xd4e}, {0xd54, 0xd56}, {0xd5f, 0xd61}, + {0xd7a, 0xd7f}, {0xd85, 0xd96}, {0xd9a, 0xdb1}, {0xdb3, 0xdbb}, {0xdbd, 0xdbd}, {0xdc0, 0xdc6}, {0xe01, 0xe30}, {0xe32, 0xe32}, + {0xe40, 0xe46}, {0xe81, 0xe82}, {0xe84, 0xe84}, {0xe86, 0xe8a}, {0xe8c, 0xea3}, {0xea5, 0xea5}, {0xea7, 0xeb0}, {0xeb2, 0xeb2}, + {0xebd, 0xebd}, {0xec0, 0xec4}, {0xec6, 0xec6}, {0xedc, 0xedf}, {0xf00, 0xf00}, {0xf40, 0xf47}, {0xf49, 0xf6c}, {0xf88, 0xf8c}, + {0x1000, 0x102a}, {0x103f, 0x103f}, {0x1050, 0x1055}, {0x105a, 0x105d}, {0x1061, 0x1061}, {0x1065, 0x1066}, {0x106e, 0x1070}, {0x1075, 0x1081}, + {0x108e, 0x108e}, {0x10a0, 0x10c5}, {0x10c7, 0x10c7}, {0x10cd, 0x10cd}, {0x10d0, 0x10fa}, {0x10fc, 0x1248}, {0x124a, 0x124d}, {0x1250, 0x1256}, + {0x1258, 0x1258}, {0x125a, 0x125d}, {0x1260, 0x1288}, {0x128a, 0x128d}, {0x1290, 0x12b0}, {0x12b2, 0x12b5}, {0x12b8, 0x12be}, {0x12c0, 0x12c0}, + {0x12c2, 0x12c5}, {0x12c8, 0x12d6}, {0x12d8, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x135a}, {0x1380, 0x138f}, {0x13a0, 0x13f5}, {0x13f8, 0x13fd}, + {0x1401, 0x166c}, {0x166f, 0x167f}, {0x1681, 0x169a}, {0x16a0, 0x16ea}, {0x16ee, 0x16f8}, {0x1700, 0x1711}, {0x171f, 0x1731}, {0x1740, 0x1751}, + {0x1760, 0x176c}, {0x176e, 0x1770}, {0x1780, 0x17b3}, {0x17d7, 0x17d7}, {0x17dc, 0x17dc}, {0x1820, 0x1878}, {0x1880, 0x18a8}, {0x18aa, 0x18aa}, + {0x18b0, 0x18f5}, {0x1900, 0x191e}, {0x1950, 0x196d}, {0x1970, 0x1974}, {0x1980, 0x19ab}, {0x19b0, 0x19c9}, {0x1a00, 0x1a16}, {0x1a20, 0x1a54}, + {0x1aa7, 0x1aa7}, {0x1b05, 0x1b33}, {0x1b45, 0x1b4c}, {0x1b83, 0x1ba0}, {0x1bae, 0x1baf}, {0x1bba, 0x1be5}, {0x1c00, 0x1c23}, {0x1c4d, 0x1c4f}, + {0x1c5a, 0x1c7d}, {0x1c80, 0x1c88}, {0x1c90, 0x1cba}, {0x1cbd, 0x1cbf}, {0x1ce9, 0x1cec}, {0x1cee, 0x1cf3}, {0x1cf5, 0x1cf6}, {0x1cfa, 0x1cfa}, + {0x1d00, 0x1dbf}, {0x1e00, 0x1f15}, {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, {0x1f48, 0x1f4d}, {0x1f50, 0x1f57}, {0x1f59, 0x1f59}, {0x1f5b, 0x1f5b}, + {0x1f5d, 0x1f5d}, {0x1f5f, 0x1f7d}, {0x1f80, 0x1fb4}, {0x1fb6, 0x1fbc}, {0x1fbe, 0x1fbe}, {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fcc}, {0x1fd0, 0x1fd3}, + {0x1fd6, 0x1fdb}, {0x1fe0, 0x1fec}, {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffc}, {0x2071, 0x2071}, {0x207f, 0x207f}, {0x2090, 0x209c}, {0x2102, 0x2102}, + {0x2107, 0x2107}, {0x210a, 0x2113}, {0x2115, 0x2115}, {0x2118, 0x211d}, {0x2124, 0x2124}, {0x2126, 0x2126}, {0x2128, 0x2128}, {0x212a, 0x2139}, + {0x213c, 0x213f}, {0x2145, 0x2149}, {0x214e, 0x214e}, {0x2160, 0x2188}, {0x2c00, 0x2ce4}, {0x2ceb, 0x2cee}, {0x2cf2, 0x2cf3}, {0x2d00, 0x2d25}, + {0x2d27, 0x2d27}, {0x2d2d, 0x2d2d}, {0x2d30, 0x2d67}, {0x2d6f, 0x2d6f}, {0x2d80, 0x2d96}, {0x2da0, 0x2da6}, {0x2da8, 0x2dae}, {0x2db0, 0x2db6}, + {0x2db8, 0x2dbe}, {0x2dc0, 0x2dc6}, {0x2dc8, 0x2dce}, {0x2dd0, 0x2dd6}, {0x2dd8, 0x2dde}, {0x3005, 0x3007}, {0x3021, 0x3029}, {0x3031, 0x3035}, + {0x3038, 0x303c}, {0x3041, 0x3096}, {0x309d, 0x309f}, {0x30a1, 0x30fa}, {0x30fc, 0x30ff}, {0x3105, 0x312f}, {0x3131, 0x318e}, {0x31a0, 0x31bf}, + {0x31f0, 0x31ff}, {0x3400, 0x4dbf}, {0x4e00, 0xa48c}, {0xa4d0, 0xa4fd}, {0xa500, 0xa60c}, {0xa610, 0xa61f}, {0xa62a, 0xa62b}, {0xa640, 0xa66e}, + {0xa67f, 0xa69d}, {0xa6a0, 0xa6ef}, {0xa717, 0xa71f}, {0xa722, 0xa788}, {0xa78b, 0xa7ca}, {0xa7d0, 0xa7d1}, {0xa7d3, 0xa7d3}, {0xa7d5, 0xa7d9}, + {0xa7f2, 0xa801}, {0xa803, 0xa805}, {0xa807, 0xa80a}, {0xa80c, 0xa822}, {0xa840, 0xa873}, {0xa882, 0xa8b3}, {0xa8f2, 0xa8f7}, {0xa8fb, 0xa8fb}, + {0xa8fd, 0xa8fe}, {0xa90a, 0xa925}, {0xa930, 0xa946}, {0xa960, 0xa97c}, {0xa984, 0xa9b2}, {0xa9cf, 0xa9cf}, {0xa9e0, 0xa9e4}, {0xa9e6, 0xa9ef}, + {0xa9fa, 0xa9fe}, {0xaa00, 0xaa28}, {0xaa40, 0xaa42}, {0xaa44, 0xaa4b}, {0xaa60, 0xaa76}, {0xaa7a, 0xaa7a}, {0xaa7e, 0xaaaf}, {0xaab1, 0xaab1}, + {0xaab5, 0xaab6}, {0xaab9, 0xaabd}, {0xaac0, 0xaac0}, {0xaac2, 0xaac2}, {0xaadb, 0xaadd}, {0xaae0, 0xaaea}, {0xaaf2, 0xaaf4}, {0xab01, 0xab06}, + {0xab09, 0xab0e}, {0xab11, 0xab16}, {0xab20, 0xab26}, {0xab28, 0xab2e}, {0xab30, 0xab5a}, {0xab5c, 0xab69}, {0xab70, 0xabe2}, {0xac00, 0xd7a3}, + {0xd7b0, 0xd7c6}, {0xd7cb, 0xd7fb}, {0xf900, 0xfa6d}, {0xfa70, 0xfad9}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, {0xfb1d, 0xfb1d}, {0xfb1f, 0xfb28}, + {0xfb2a, 0xfb36}, {0xfb38, 0xfb3c}, {0xfb3e, 0xfb3e}, {0xfb40, 0xfb41}, {0xfb43, 0xfb44}, {0xfb46, 0xfbb1}, {0xfbd3, 0xfc5d}, {0xfc64, 0xfd3d}, + {0xfd50, 0xfd8f}, {0xfd92, 0xfdc7}, {0xfdf0, 0xfdf9}, {0xfe71, 0xfe71}, {0xfe73, 0xfe73}, {0xfe77, 0xfe77}, {0xfe79, 0xfe79}, {0xfe7b, 0xfe7b}, + {0xfe7d, 0xfe7d}, {0xfe7f, 0xfefc}, {0xff21, 0xff3a}, {0xff41, 0xff5a}, {0xff66, 0xff9d}, {0xffa0, 0xffbe}, {0xffc2, 0xffc7}, {0xffca, 0xffcf}, + {0xffd2, 0xffd7}, {0xffda, 0xffdc}, {0x10000, 0x1000b}, {0x1000d, 0x10026}, {0x10028, 0x1003a}, {0x1003c, 0x1003d}, {0x1003f, 0x1004d}, {0x10050, 0x1005d}, + {0x10080, 0x100fa}, {0x10140, 0x10174}, {0x10280, 0x1029c}, {0x102a0, 0x102d0}, {0x10300, 0x1031f}, {0x1032d, 0x1034a}, {0x10350, 0x10375}, {0x10380, 0x1039d}, + {0x103a0, 0x103c3}, {0x103c8, 0x103cf}, {0x103d1, 0x103d5}, {0x10400, 0x1049d}, {0x104b0, 0x104d3}, {0x104d8, 0x104fb}, {0x10500, 0x10527}, {0x10530, 0x10563}, + {0x10570, 0x1057a}, {0x1057c, 0x1058a}, {0x1058c, 0x10592}, {0x10594, 0x10595}, {0x10597, 0x105a1}, {0x105a3, 0x105b1}, {0x105b3, 0x105b9}, {0x105bb, 0x105bc}, + {0x10600, 0x10736}, {0x10740, 0x10755}, {0x10760, 0x10767}, {0x10780, 0x10785}, {0x10787, 0x107b0}, {0x107b2, 0x107ba}, {0x10800, 0x10805}, {0x10808, 0x10808}, + {0x1080a, 0x10835}, {0x10837, 0x10838}, {0x1083c, 0x1083c}, {0x1083f, 0x10855}, {0x10860, 0x10876}, {0x10880, 0x1089e}, {0x108e0, 0x108f2}, {0x108f4, 0x108f5}, + {0x10900, 0x10915}, {0x10920, 0x10939}, {0x10980, 0x109b7}, {0x109be, 0x109bf}, {0x10a00, 0x10a00}, {0x10a10, 0x10a13}, {0x10a15, 0x10a17}, {0x10a19, 0x10a35}, + {0x10a60, 0x10a7c}, {0x10a80, 0x10a9c}, {0x10ac0, 0x10ac7}, {0x10ac9, 0x10ae4}, {0x10b00, 0x10b35}, {0x10b40, 0x10b55}, {0x10b60, 0x10b72}, {0x10b80, 0x10b91}, + {0x10c00, 0x10c48}, {0x10c80, 0x10cb2}, {0x10cc0, 0x10cf2}, {0x10d00, 0x10d23}, {0x10e80, 0x10ea9}, {0x10eb0, 0x10eb1}, {0x10f00, 0x10f1c}, {0x10f27, 0x10f27}, + {0x10f30, 0x10f45}, {0x10f70, 0x10f81}, {0x10fb0, 0x10fc4}, {0x10fe0, 0x10ff6}, {0x11003, 0x11037}, {0x11071, 0x11072}, {0x11075, 0x11075}, {0x11083, 0x110af}, + {0x110d0, 0x110e8}, {0x11103, 0x11126}, {0x11144, 0x11144}, {0x11147, 0x11147}, {0x11150, 0x11172}, {0x11176, 0x11176}, {0x11183, 0x111b2}, {0x111c1, 0x111c4}, + {0x111da, 0x111da}, {0x111dc, 0x111dc}, {0x11200, 0x11211}, {0x11213, 0x1122b}, {0x1123f, 0x11240}, {0x11280, 0x11286}, {0x11288, 0x11288}, {0x1128a, 0x1128d}, + {0x1128f, 0x1129d}, {0x1129f, 0x112a8}, {0x112b0, 0x112de}, {0x11305, 0x1130c}, {0x1130f, 0x11310}, {0x11313, 0x11328}, {0x1132a, 0x11330}, {0x11332, 0x11333}, + {0x11335, 0x11339}, {0x1133d, 0x1133d}, {0x11350, 0x11350}, {0x1135d, 0x11361}, {0x11400, 0x11434}, {0x11447, 0x1144a}, {0x1145f, 0x11461}, {0x11480, 0x114af}, + {0x114c4, 0x114c5}, {0x114c7, 0x114c7}, {0x11580, 0x115ae}, {0x115d8, 0x115db}, {0x11600, 0x1162f}, {0x11644, 0x11644}, {0x11680, 0x116aa}, {0x116b8, 0x116b8}, + {0x11700, 0x1171a}, {0x11740, 0x11746}, {0x11800, 0x1182b}, {0x118a0, 0x118df}, {0x118ff, 0x11906}, {0x11909, 0x11909}, {0x1190c, 0x11913}, {0x11915, 0x11916}, + {0x11918, 0x1192f}, {0x1193f, 0x1193f}, {0x11941, 0x11941}, {0x119a0, 0x119a7}, {0x119aa, 0x119d0}, {0x119e1, 0x119e1}, {0x119e3, 0x119e3}, {0x11a00, 0x11a00}, + {0x11a0b, 0x11a32}, {0x11a3a, 0x11a3a}, {0x11a50, 0x11a50}, {0x11a5c, 0x11a89}, {0x11a9d, 0x11a9d}, {0x11ab0, 0x11af8}, {0x11c00, 0x11c08}, {0x11c0a, 0x11c2e}, + {0x11c40, 0x11c40}, {0x11c72, 0x11c8f}, {0x11d00, 0x11d06}, {0x11d08, 0x11d09}, {0x11d0b, 0x11d30}, {0x11d46, 0x11d46}, {0x11d60, 0x11d65}, {0x11d67, 0x11d68}, + {0x11d6a, 0x11d89}, {0x11d98, 0x11d98}, {0x11ee0, 0x11ef2}, {0x11f02, 0x11f02}, {0x11f04, 0x11f10}, {0x11f12, 0x11f33}, {0x11fb0, 0x11fb0}, {0x12000, 0x12399}, + {0x12400, 0x1246e}, {0x12480, 0x12543}, {0x12f90, 0x12ff0}, {0x13000, 0x1342f}, {0x13441, 0x13446}, {0x14400, 0x14646}, {0x16800, 0x16a38}, {0x16a40, 0x16a5e}, + {0x16a70, 0x16abe}, {0x16ad0, 0x16aed}, {0x16b00, 0x16b2f}, {0x16b40, 0x16b43}, {0x16b63, 0x16b77}, {0x16b7d, 0x16b8f}, {0x16e40, 0x16e7f}, {0x16f00, 0x16f4a}, + {0x16f50, 0x16f50}, {0x16f93, 0x16f9f}, {0x16fe0, 0x16fe1}, {0x16fe3, 0x16fe3}, {0x17000, 0x187f7}, {0x18800, 0x18cd5}, {0x18d00, 0x18d08}, {0x1aff0, 0x1aff3}, + {0x1aff5, 0x1affb}, {0x1affd, 0x1affe}, {0x1b000, 0x1b122}, {0x1b132, 0x1b132}, {0x1b150, 0x1b152}, {0x1b155, 0x1b155}, {0x1b164, 0x1b167}, {0x1b170, 0x1b2fb}, + {0x1bc00, 0x1bc6a}, {0x1bc70, 0x1bc7c}, {0x1bc80, 0x1bc88}, {0x1bc90, 0x1bc99}, {0x1d400, 0x1d454}, {0x1d456, 0x1d49c}, {0x1d49e, 0x1d49f}, {0x1d4a2, 0x1d4a2}, + {0x1d4a5, 0x1d4a6}, {0x1d4a9, 0x1d4ac}, {0x1d4ae, 0x1d4b9}, {0x1d4bb, 0x1d4bb}, {0x1d4bd, 0x1d4c3}, {0x1d4c5, 0x1d505}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514}, + {0x1d516, 0x1d51c}, {0x1d51e, 0x1d539}, {0x1d53b, 0x1d53e}, {0x1d540, 0x1d544}, {0x1d546, 0x1d546}, {0x1d54a, 0x1d550}, {0x1d552, 0x1d6a5}, {0x1d6a8, 0x1d6c0}, + {0x1d6c2, 0x1d6da}, {0x1d6dc, 0x1d6fa}, {0x1d6fc, 0x1d714}, {0x1d716, 0x1d734}, {0x1d736, 0x1d74e}, {0x1d750, 0x1d76e}, {0x1d770, 0x1d788}, {0x1d78a, 0x1d7a8}, + {0x1d7aa, 0x1d7c2}, {0x1d7c4, 0x1d7cb}, {0x1df00, 0x1df1e}, {0x1df25, 0x1df2a}, {0x1e030, 0x1e06d}, {0x1e100, 0x1e12c}, {0x1e137, 0x1e13d}, {0x1e14e, 0x1e14e}, + {0x1e290, 0x1e2ad}, {0x1e2c0, 0x1e2eb}, {0x1e4d0, 0x1e4eb}, {0x1e7e0, 0x1e7e6}, {0x1e7e8, 0x1e7eb}, {0x1e7ed, 0x1e7ee}, {0x1e7f0, 0x1e7fe}, {0x1e800, 0x1e8c4}, + {0x1e900, 0x1e943}, {0x1e94b, 0x1e94b}, {0x1ee00, 0x1ee03}, {0x1ee05, 0x1ee1f}, {0x1ee21, 0x1ee22}, {0x1ee24, 0x1ee24}, {0x1ee27, 0x1ee27}, {0x1ee29, 0x1ee32}, + {0x1ee34, 0x1ee37}, {0x1ee39, 0x1ee39}, {0x1ee3b, 0x1ee3b}, {0x1ee42, 0x1ee42}, {0x1ee47, 0x1ee47}, {0x1ee49, 0x1ee49}, {0x1ee4b, 0x1ee4b}, {0x1ee4d, 0x1ee4f}, + {0x1ee51, 0x1ee52}, {0x1ee54, 0x1ee54}, {0x1ee57, 0x1ee57}, {0x1ee59, 0x1ee59}, {0x1ee5b, 0x1ee5b}, {0x1ee5d, 0x1ee5d}, {0x1ee5f, 0x1ee5f}, {0x1ee61, 0x1ee62}, + {0x1ee64, 0x1ee64}, {0x1ee67, 0x1ee6a}, {0x1ee6c, 0x1ee72}, {0x1ee74, 0x1ee77}, {0x1ee79, 0x1ee7c}, {0x1ee7e, 0x1ee7e}, {0x1ee80, 0x1ee89}, {0x1ee8b, 0x1ee9b}, + {0x1eea1, 0x1eea3}, {0x1eea5, 0x1eea9}, {0x1eeab, 0x1eebb}, {0x20000, 0x2a6df}, {0x2a700, 0x2b739}, {0x2b740, 0x2b81d}, {0x2b820, 0x2cea1}, {0x2ceb0, 0x2ebe0}, + {0x2ebf0, 0x2ee5d}, {0x2f800, 0x2fa1d}, {0x30000, 0x3134a}, {0x31350, 0x323af}, +}; -static inline bool sym_identifier_character_set_3(int32_t c) { - return (c < 43616 - ? (c < 3782 - ? (c < 2748 - ? (c < 2045 - ? (c < 1015 - ? (c < 710 - ? (c < 181 - ? (c < '_' - ? (c < 'A' - ? (c >= '0' && c <= '9') - : c <= 'Z') - : (c <= '_' || (c < 170 - ? (c >= 'a' && c <= 'z') - : c <= 170))) - : (c <= 181 || (c < 192 - ? (c < 186 - ? c == 183 - : c <= 186) - : (c <= 214 || (c < 248 - ? (c >= 216 && c <= 246) - : c <= 705))))) - : (c <= 721 || (c < 891 - ? (c < 750 - ? (c < 748 - ? (c >= 736 && c <= 740) - : c <= 748) - : (c <= 750 || (c < 886 - ? (c >= 768 && c <= 884) - : c <= 887))) - : (c <= 893 || (c < 908 - ? (c < 902 - ? c == 895 - : c <= 906) - : (c <= 908 || (c < 931 - ? (c >= 910 && c <= 929) - : c <= 1013))))))) - : (c <= 1153 || (c < 1519 - ? (c < 1425 - ? (c < 1329 - ? (c < 1162 - ? (c >= 1155 && c <= 1159) - : c <= 1327) - : (c <= 1366 || (c < 1376 - ? c == 1369 - : c <= 1416))) - : (c <= 1469 || (c < 1476 - ? (c < 1473 - ? c == 1471 - : c <= 1474) - : (c <= 1477 || (c < 1488 - ? c == 1479 - : c <= 1514))))) - : (c <= 1522 || (c < 1770 - ? (c < 1646 - ? (c < 1568 - ? (c >= 1552 && c <= 1562) - : c <= 1641) - : (c <= 1747 || (c < 1759 - ? (c >= 1749 && c <= 1756) - : c <= 1768))) - : (c <= 1788 || (c < 1869 - ? (c < 1808 - ? c == 1791 - : c <= 1866) - : (c <= 1969 || (c < 2042 - ? (c >= 1984 && c <= 2037) - : c <= 2042))))))))) - : (c <= 2045 || (c < 2558 - ? (c < 2451 - ? (c < 2200 - ? (c < 2144 - ? (c < 2112 - ? (c >= 2048 && c <= 2093) - : c <= 2139) - : (c <= 2154 || (c < 2185 - ? (c >= 2160 && c <= 2183) - : c <= 2190))) - : (c <= 2273 || (c < 2417 - ? (c < 2406 - ? (c >= 2275 && c <= 2403) - : c <= 2415) - : (c <= 2435 || (c < 2447 - ? (c >= 2437 && c <= 2444) - : c <= 2448))))) - : (c <= 2472 || (c < 2507 - ? (c < 2486 - ? (c < 2482 - ? (c >= 2474 && c <= 2480) - : c <= 2482) - : (c <= 2489 || (c < 2503 - ? (c >= 2492 && c <= 2500) - : c <= 2504))) - : (c <= 2510 || (c < 2527 - ? (c < 2524 - ? c == 2519 - : c <= 2525) - : (c <= 2531 || (c < 2556 - ? (c >= 2534 && c <= 2545) - : c <= 2556))))))) - : (c <= 2558 || (c < 2635 - ? (c < 2610 - ? (c < 2575 - ? (c < 2565 - ? (c >= 2561 && c <= 2563) - : c <= 2570) - : (c <= 2576 || (c < 2602 - ? (c >= 2579 && c <= 2600) - : c <= 2608))) - : (c <= 2611 || (c < 2620 - ? (c < 2616 - ? (c >= 2613 && c <= 2614) - : c <= 2617) - : (c <= 2620 || (c < 2631 - ? (c >= 2622 && c <= 2626) - : c <= 2632))))) - : (c <= 2637 || (c < 2693 - ? (c < 2654 - ? (c < 2649 - ? c == 2641 - : c <= 2652) - : (c <= 2654 || (c < 2689 - ? (c >= 2662 && c <= 2677) - : c <= 2691))) - : (c <= 2701 || (c < 2730 - ? (c < 2707 - ? (c >= 2703 && c <= 2705) - : c <= 2728) - : (c <= 2736 || (c < 2741 - ? (c >= 2738 && c <= 2739) - : c <= 2745))))))))))) - : (c <= 2757 || (c < 3168 - ? (c < 2958 - ? (c < 2866 - ? (c < 2809 - ? (c < 2768 - ? (c < 2763 - ? (c >= 2759 && c <= 2761) - : c <= 2765) - : (c <= 2768 || (c < 2790 - ? (c >= 2784 && c <= 2787) - : c <= 2799))) - : (c <= 2815 || (c < 2831 - ? (c < 2821 - ? (c >= 2817 && c <= 2819) - : c <= 2828) - : (c <= 2832 || (c < 2858 - ? (c >= 2835 && c <= 2856) - : c <= 2864))))) - : (c <= 2867 || (c < 2908 - ? (c < 2887 - ? (c < 2876 - ? (c >= 2869 && c <= 2873) - : c <= 2884) - : (c <= 2888 || (c < 2901 - ? (c >= 2891 && c <= 2893) - : c <= 2903))) - : (c <= 2909 || (c < 2929 - ? (c < 2918 - ? (c >= 2911 && c <= 2915) - : c <= 2927) - : (c <= 2929 || (c < 2949 - ? (c >= 2946 && c <= 2947) - : c <= 2954))))))) - : (c <= 2960 || (c < 3031 - ? (c < 2984 - ? (c < 2972 - ? (c < 2969 - ? (c >= 2962 && c <= 2965) - : c <= 2970) - : (c <= 2972 || (c < 2979 - ? (c >= 2974 && c <= 2975) - : c <= 2980))) - : (c <= 2986 || (c < 3014 - ? (c < 3006 - ? (c >= 2990 && c <= 3001) - : c <= 3010) - : (c <= 3016 || (c < 3024 - ? (c >= 3018 && c <= 3021) - : c <= 3024))))) - : (c <= 3031 || (c < 3132 - ? (c < 3086 - ? (c < 3072 - ? (c >= 3046 && c <= 3055) - : c <= 3084) - : (c <= 3088 || (c < 3114 - ? (c >= 3090 && c <= 3112) - : c <= 3129))) - : (c <= 3140 || (c < 3157 - ? (c < 3146 - ? (c >= 3142 && c <= 3144) - : c <= 3149) - : (c <= 3158 || (c < 3165 - ? (c >= 3160 && c <= 3162) - : c <= 3165))))))))) - : (c <= 3171 || (c < 3450 - ? (c < 3293 - ? (c < 3242 - ? (c < 3205 - ? (c < 3200 - ? (c >= 3174 && c <= 3183) - : c <= 3203) - : (c <= 3212 || (c < 3218 - ? (c >= 3214 && c <= 3216) - : c <= 3240))) - : (c <= 3251 || (c < 3270 - ? (c < 3260 - ? (c >= 3253 && c <= 3257) - : c <= 3268) - : (c <= 3272 || (c < 3285 - ? (c >= 3274 && c <= 3277) - : c <= 3286))))) - : (c <= 3294 || (c < 3346 - ? (c < 3313 - ? (c < 3302 - ? (c >= 3296 && c <= 3299) - : c <= 3311) - : (c <= 3314 || (c < 3342 - ? (c >= 3328 && c <= 3340) - : c <= 3344))) - : (c <= 3396 || (c < 3412 - ? (c < 3402 - ? (c >= 3398 && c <= 3400) - : c <= 3406) - : (c <= 3415 || (c < 3430 - ? (c >= 3423 && c <= 3427) - : c <= 3439))))))) - : (c <= 3455 || (c < 3570 - ? (c < 3520 - ? (c < 3482 - ? (c < 3461 - ? (c >= 3457 && c <= 3459) - : c <= 3478) - : (c <= 3505 || (c < 3517 - ? (c >= 3507 && c <= 3515) - : c <= 3517))) - : (c <= 3526 || (c < 3542 - ? (c < 3535 - ? c == 3530 - : c <= 3540) - : (c <= 3542 || (c < 3558 - ? (c >= 3544 && c <= 3551) - : c <= 3567))))) - : (c <= 3571 || (c < 3718 - ? (c < 3664 - ? (c < 3648 - ? (c >= 3585 && c <= 3642) - : c <= 3662) - : (c <= 3673 || (c < 3716 - ? (c >= 3713 && c <= 3714) - : c <= 3716))) - : (c <= 3722 || (c < 3751 - ? (c < 3749 - ? (c >= 3724 && c <= 3747) - : c <= 3749) - : (c <= 3773 || (c >= 3776 && c <= 3780))))))))))))) - : (c <= 3782 || (c < 8025 - ? (c < 5888 - ? (c < 4688 - ? (c < 3953 - ? (c < 3872 - ? (c < 3804 - ? (c < 3792 - ? (c >= 3784 && c <= 3789) - : c <= 3801) - : (c <= 3807 || (c < 3864 - ? c == 3840 - : c <= 3865))) - : (c <= 3881 || (c < 3897 - ? (c < 3895 - ? c == 3893 - : c <= 3895) - : (c <= 3897 || (c < 3913 - ? (c >= 3902 && c <= 3911) - : c <= 3948))))) - : (c <= 3972 || (c < 4256 - ? (c < 4038 - ? (c < 3993 - ? (c >= 3974 && c <= 3991) - : c <= 4028) - : (c <= 4038 || (c < 4176 - ? (c >= 4096 && c <= 4169) - : c <= 4253))) - : (c <= 4293 || (c < 4304 - ? (c < 4301 - ? c == 4295 - : c <= 4301) - : (c <= 4346 || (c < 4682 - ? (c >= 4348 && c <= 4680) - : c <= 4685))))))) - : (c <= 4694 || (c < 4882 - ? (c < 4786 - ? (c < 4704 - ? (c < 4698 - ? c == 4696 - : c <= 4701) - : (c <= 4744 || (c < 4752 - ? (c >= 4746 && c <= 4749) - : c <= 4784))) - : (c <= 4789 || (c < 4802 - ? (c < 4800 - ? (c >= 4792 && c <= 4798) - : c <= 4800) - : (c <= 4805 || (c < 4824 - ? (c >= 4808 && c <= 4822) - : c <= 4880))))) - : (c <= 4885 || (c < 5112 - ? (c < 4969 - ? (c < 4957 - ? (c >= 4888 && c <= 4954) - : c <= 4959) - : (c <= 4977 || (c < 5024 - ? (c >= 4992 && c <= 5007) - : c <= 5109))) - : (c <= 5117 || (c < 5761 - ? (c < 5743 - ? (c >= 5121 && c <= 5740) - : c <= 5759) - : (c <= 5786 || (c < 5870 - ? (c >= 5792 && c <= 5866) - : c <= 5880))))))))) - : (c <= 5909 || (c < 6688 - ? (c < 6176 - ? (c < 6016 - ? (c < 5984 - ? (c < 5952 - ? (c >= 5919 && c <= 5940) - : c <= 5971) - : (c <= 5996 || (c < 6002 - ? (c >= 5998 && c <= 6000) - : c <= 6003))) - : (c <= 6099 || (c < 6112 - ? (c < 6108 - ? c == 6103 - : c <= 6109) - : (c <= 6121 || (c < 6159 - ? (c >= 6155 && c <= 6157) - : c <= 6169))))) - : (c <= 6264 || (c < 6470 - ? (c < 6400 - ? (c < 6320 - ? (c >= 6272 && c <= 6314) - : c <= 6389) - : (c <= 6430 || (c < 6448 - ? (c >= 6432 && c <= 6443) - : c <= 6459))) - : (c <= 6509 || (c < 6576 - ? (c < 6528 - ? (c >= 6512 && c <= 6516) - : c <= 6571) - : (c <= 6601 || (c < 6656 - ? (c >= 6608 && c <= 6618) - : c <= 6683))))))) - : (c <= 6750 || (c < 7232 - ? (c < 6847 - ? (c < 6800 - ? (c < 6783 - ? (c >= 6752 && c <= 6780) - : c <= 6793) - : (c <= 6809 || (c < 6832 - ? c == 6823 - : c <= 6845))) - : (c <= 6862 || (c < 7019 - ? (c < 6992 - ? (c >= 6912 && c <= 6988) - : c <= 7001) - : (c <= 7027 || (c < 7168 - ? (c >= 7040 && c <= 7155) - : c <= 7223))))) - : (c <= 7241 || (c < 7380 - ? (c < 7312 - ? (c < 7296 - ? (c >= 7245 && c <= 7293) - : c <= 7304) - : (c <= 7354 || (c < 7376 - ? (c >= 7357 && c <= 7359) - : c <= 7378))) - : (c <= 7418 || (c < 7968 - ? (c < 7960 - ? (c >= 7424 && c <= 7957) - : c <= 7965) - : (c <= 8005 || (c < 8016 - ? (c >= 8008 && c <= 8013) - : c <= 8023))))))))))) - : (c <= 8025 || (c < 11720 - ? (c < 8458 - ? (c < 8178 - ? (c < 8126 - ? (c < 8031 - ? (c < 8029 - ? c == 8027 - : c <= 8029) - : (c <= 8061 || (c < 8118 - ? (c >= 8064 && c <= 8116) - : c <= 8124))) - : (c <= 8126 || (c < 8144 - ? (c < 8134 - ? (c >= 8130 && c <= 8132) - : c <= 8140) - : (c <= 8147 || (c < 8160 - ? (c >= 8150 && c <= 8155) - : c <= 8172))))) - : (c <= 8180 || (c < 8336 - ? (c < 8276 - ? (c < 8255 - ? (c >= 8182 && c <= 8188) - : c <= 8256) - : (c <= 8276 || (c < 8319 - ? c == 8305 - : c <= 8319))) - : (c <= 8348 || (c < 8421 - ? (c < 8417 - ? (c >= 8400 && c <= 8412) - : c <= 8417) - : (c <= 8432 || (c < 8455 - ? c == 8450 - : c <= 8455))))))) - : (c <= 8467 || (c < 11499 - ? (c < 8490 - ? (c < 8484 - ? (c < 8472 - ? c == 8469 - : c <= 8477) - : (c <= 8484 || (c < 8488 - ? c == 8486 - : c <= 8488))) - : (c <= 8505 || (c < 8526 - ? (c < 8517 - ? (c >= 8508 && c <= 8511) - : c <= 8521) - : (c <= 8526 || (c < 11264 - ? (c >= 8544 && c <= 8584) - : c <= 11492))))) - : (c <= 11507 || (c < 11647 - ? (c < 11565 - ? (c < 11559 - ? (c >= 11520 && c <= 11557) - : c <= 11559) - : (c <= 11565 || (c < 11631 - ? (c >= 11568 && c <= 11623) - : c <= 11631))) - : (c <= 11670 || (c < 11696 - ? (c < 11688 - ? (c >= 11680 && c <= 11686) - : c <= 11694) - : (c <= 11702 || (c < 11712 - ? (c >= 11704 && c <= 11710) - : c <= 11718))))))))) - : (c <= 11726 || (c < 42623 - ? (c < 12540 - ? (c < 12337 - ? (c < 11744 - ? (c < 11736 - ? (c >= 11728 && c <= 11734) - : c <= 11742) - : (c <= 11775 || (c < 12321 - ? (c >= 12293 && c <= 12295) - : c <= 12335))) - : (c <= 12341 || (c < 12441 - ? (c < 12353 - ? (c >= 12344 && c <= 12348) - : c <= 12438) - : (c <= 12442 || (c < 12449 - ? (c >= 12445 && c <= 12447) - : c <= 12538))))) - : (c <= 12543 || (c < 19968 - ? (c < 12704 - ? (c < 12593 - ? (c >= 12549 && c <= 12591) - : c <= 12686) - : (c <= 12735 || (c < 13312 - ? (c >= 12784 && c <= 12799) - : c <= 19903))) - : (c <= 42124 || (c < 42512 - ? (c < 42240 - ? (c >= 42192 && c <= 42237) - : c <= 42508) - : (c <= 42539 || (c < 42612 - ? (c >= 42560 && c <= 42607) - : c <= 42621))))))) - : (c <= 42737 || (c < 43232 - ? (c < 42965 - ? (c < 42891 - ? (c < 42786 - ? (c >= 42775 && c <= 42783) - : c <= 42888) - : (c <= 42954 || (c < 42963 - ? (c >= 42960 && c <= 42961) - : c <= 42963))) - : (c <= 42969 || (c < 43072 - ? (c < 43052 - ? (c >= 42994 && c <= 43047) - : c <= 43052) - : (c <= 43123 || (c < 43216 - ? (c >= 43136 && c <= 43205) - : c <= 43225))))) - : (c <= 43255 || (c < 43471 - ? (c < 43312 - ? (c < 43261 - ? c == 43259 - : c <= 43309) - : (c <= 43347 || (c < 43392 - ? (c >= 43360 && c <= 43388) - : c <= 43456))) - : (c <= 43481 || (c < 43584 - ? (c < 43520 - ? (c >= 43488 && c <= 43518) - : c <= 43574) - : (c <= 43597 || (c >= 43600 && c <= 43609))))))))))))))) - : (c <= 43638 || (c < 71453 - ? (c < 67639 - ? (c < 65345 - ? (c < 64312 - ? (c < 43888 - ? (c < 43785 - ? (c < 43744 - ? (c < 43739 - ? (c >= 43642 && c <= 43714) - : c <= 43741) - : (c <= 43759 || (c < 43777 - ? (c >= 43762 && c <= 43766) - : c <= 43782))) - : (c <= 43790 || (c < 43816 - ? (c < 43808 - ? (c >= 43793 && c <= 43798) - : c <= 43814) - : (c <= 43822 || (c < 43868 - ? (c >= 43824 && c <= 43866) - : c <= 43881))))) - : (c <= 44010 || (c < 63744 - ? (c < 44032 - ? (c < 44016 - ? (c >= 44012 && c <= 44013) - : c <= 44025) - : (c <= 55203 || (c < 55243 - ? (c >= 55216 && c <= 55238) - : c <= 55291))) - : (c <= 64109 || (c < 64275 - ? (c < 64256 - ? (c >= 64112 && c <= 64217) - : c <= 64262) - : (c <= 64279 || (c < 64298 - ? (c >= 64285 && c <= 64296) - : c <= 64310))))))) - : (c <= 64316 || (c < 65075 - ? (c < 64612 - ? (c < 64323 - ? (c < 64320 - ? c == 64318 - : c <= 64321) - : (c <= 64324 || (c < 64467 - ? (c >= 64326 && c <= 64433) - : c <= 64605))) - : (c <= 64829 || (c < 65008 - ? (c < 64914 - ? (c >= 64848 && c <= 64911) - : c <= 64967) - : (c <= 65017 || (c < 65056 - ? (c >= 65024 && c <= 65039) - : c <= 65071))))) - : (c <= 65076 || (c < 65147 - ? (c < 65139 - ? (c < 65137 - ? (c >= 65101 && c <= 65103) - : c <= 65137) - : (c <= 65139 || (c < 65145 - ? c == 65143 - : c <= 65145))) - : (c <= 65147 || (c < 65296 - ? (c < 65151 - ? c == 65149 - : c <= 65276) - : (c <= 65305 || (c < 65343 - ? (c >= 65313 && c <= 65338) - : c <= 65343))))))))) - : (c <= 65370 || (c < 66513 - ? (c < 65664 - ? (c < 65536 - ? (c < 65482 - ? (c < 65474 - ? (c >= 65382 && c <= 65470) - : c <= 65479) - : (c <= 65487 || (c < 65498 - ? (c >= 65490 && c <= 65495) - : c <= 65500))) - : (c <= 65547 || (c < 65596 - ? (c < 65576 - ? (c >= 65549 && c <= 65574) - : c <= 65594) - : (c <= 65597 || (c < 65616 - ? (c >= 65599 && c <= 65613) - : c <= 65629))))) - : (c <= 65786 || (c < 66304 - ? (c < 66176 - ? (c < 66045 - ? (c >= 65856 && c <= 65908) - : c <= 66045) - : (c <= 66204 || (c < 66272 - ? (c >= 66208 && c <= 66256) - : c <= 66272))) - : (c <= 66335 || (c < 66432 - ? (c < 66384 - ? (c >= 66349 && c <= 66378) - : c <= 66426) - : (c <= 66461 || (c < 66504 - ? (c >= 66464 && c <= 66499) - : c <= 66511))))))) - : (c <= 66517 || (c < 66979 - ? (c < 66864 - ? (c < 66736 - ? (c < 66720 - ? (c >= 66560 && c <= 66717) - : c <= 66729) - : (c <= 66771 || (c < 66816 - ? (c >= 66776 && c <= 66811) - : c <= 66855))) - : (c <= 66915 || (c < 66956 - ? (c < 66940 - ? (c >= 66928 && c <= 66938) - : c <= 66954) - : (c <= 66962 || (c < 66967 - ? (c >= 66964 && c <= 66965) - : c <= 66977))))) - : (c <= 66993 || (c < 67456 - ? (c < 67072 - ? (c < 67003 - ? (c >= 66995 && c <= 67001) - : c <= 67004) - : (c <= 67382 || (c < 67424 - ? (c >= 67392 && c <= 67413) - : c <= 67431))) - : (c <= 67461 || (c < 67584 - ? (c < 67506 - ? (c >= 67463 && c <= 67504) - : c <= 67514) - : (c <= 67589 || (c < 67594 - ? c == 67592 - : c <= 67637))))))))))) - : (c <= 67640 || (c < 69956 - ? (c < 68448 - ? (c < 68101 - ? (c < 67828 - ? (c < 67680 - ? (c < 67647 - ? c == 67644 - : c <= 67669) - : (c <= 67702 || (c < 67808 - ? (c >= 67712 && c <= 67742) - : c <= 67826))) - : (c <= 67829 || (c < 67968 - ? (c < 67872 - ? (c >= 67840 && c <= 67861) - : c <= 67897) - : (c <= 68023 || (c < 68096 - ? (c >= 68030 && c <= 68031) - : c <= 68099))))) - : (c <= 68102 || (c < 68192 - ? (c < 68121 - ? (c < 68117 - ? (c >= 68108 && c <= 68115) - : c <= 68119) - : (c <= 68149 || (c < 68159 - ? (c >= 68152 && c <= 68154) - : c <= 68159))) - : (c <= 68220 || (c < 68297 - ? (c < 68288 - ? (c >= 68224 && c <= 68252) - : c <= 68295) - : (c <= 68326 || (c < 68416 - ? (c >= 68352 && c <= 68405) - : c <= 68437))))))) - : (c <= 68466 || (c < 69424 - ? (c < 68912 - ? (c < 68736 - ? (c < 68608 - ? (c >= 68480 && c <= 68497) - : c <= 68680) - : (c <= 68786 || (c < 68864 - ? (c >= 68800 && c <= 68850) - : c <= 68903))) - : (c <= 68921 || (c < 69296 - ? (c < 69291 - ? (c >= 69248 && c <= 69289) - : c <= 69292) - : (c <= 69297 || (c < 69415 - ? (c >= 69376 && c <= 69404) - : c <= 69415))))) - : (c <= 69456 || (c < 69759 - ? (c < 69600 - ? (c < 69552 - ? (c >= 69488 && c <= 69509) - : c <= 69572) - : (c <= 69622 || (c < 69734 - ? (c >= 69632 && c <= 69702) - : c <= 69749))) - : (c <= 69818 || (c < 69872 - ? (c < 69840 - ? c == 69826 - : c <= 69864) - : (c <= 69881 || (c < 69942 - ? (c >= 69888 && c <= 69940) - : c <= 69951))))))))) - : (c <= 69959 || (c < 70459 - ? (c < 70282 - ? (c < 70108 - ? (c < 70016 - ? (c < 70006 - ? (c >= 69968 && c <= 70003) - : c <= 70006) - : (c <= 70084 || (c < 70094 - ? (c >= 70089 && c <= 70092) - : c <= 70106))) - : (c <= 70108 || (c < 70206 - ? (c < 70163 - ? (c >= 70144 && c <= 70161) - : c <= 70199) - : (c <= 70206 || (c < 70280 - ? (c >= 70272 && c <= 70278) - : c <= 70280))))) - : (c <= 70285 || (c < 70405 - ? (c < 70320 - ? (c < 70303 - ? (c >= 70287 && c <= 70301) - : c <= 70312) - : (c <= 70378 || (c < 70400 - ? (c >= 70384 && c <= 70393) - : c <= 70403))) - : (c <= 70412 || (c < 70442 - ? (c < 70419 - ? (c >= 70415 && c <= 70416) - : c <= 70440) - : (c <= 70448 || (c < 70453 - ? (c >= 70450 && c <= 70451) - : c <= 70457))))))) - : (c <= 70468 || (c < 70855 - ? (c < 70502 - ? (c < 70480 - ? (c < 70475 - ? (c >= 70471 && c <= 70472) - : c <= 70477) - : (c <= 70480 || (c < 70493 - ? c == 70487 - : c <= 70499))) - : (c <= 70508 || (c < 70736 - ? (c < 70656 - ? (c >= 70512 && c <= 70516) - : c <= 70730) - : (c <= 70745 || (c < 70784 - ? (c >= 70750 && c <= 70753) - : c <= 70853))))) - : (c <= 70855 || (c < 71236 - ? (c < 71096 - ? (c < 71040 - ? (c >= 70864 && c <= 70873) - : c <= 71093) - : (c <= 71104 || (c < 71168 - ? (c >= 71128 && c <= 71133) - : c <= 71232))) - : (c <= 71236 || (c < 71360 - ? (c < 71296 - ? (c >= 71248 && c <= 71257) - : c <= 71352) - : (c <= 71369 || (c >= 71424 && c <= 71450))))))))))))) - : (c <= 71467 || (c < 119973 - ? (c < 77824 - ? (c < 72760 - ? (c < 72016 - ? (c < 71945 - ? (c < 71680 - ? (c < 71488 - ? (c >= 71472 && c <= 71481) - : c <= 71494) - : (c <= 71738 || (c < 71935 - ? (c >= 71840 && c <= 71913) - : c <= 71942))) - : (c <= 71945 || (c < 71960 - ? (c < 71957 - ? (c >= 71948 && c <= 71955) - : c <= 71958) - : (c <= 71989 || (c < 71995 - ? (c >= 71991 && c <= 71992) - : c <= 72003))))) - : (c <= 72025 || (c < 72263 - ? (c < 72154 - ? (c < 72106 - ? (c >= 72096 && c <= 72103) - : c <= 72151) - : (c <= 72161 || (c < 72192 - ? (c >= 72163 && c <= 72164) - : c <= 72254))) - : (c <= 72263 || (c < 72368 - ? (c < 72349 - ? (c >= 72272 && c <= 72345) - : c <= 72349) - : (c <= 72440 || (c < 72714 - ? (c >= 72704 && c <= 72712) - : c <= 72758))))))) - : (c <= 72768 || (c < 73056 - ? (c < 72968 - ? (c < 72850 - ? (c < 72818 - ? (c >= 72784 && c <= 72793) - : c <= 72847) - : (c <= 72871 || (c < 72960 - ? (c >= 72873 && c <= 72886) - : c <= 72966))) - : (c <= 72969 || (c < 73020 - ? (c < 73018 - ? (c >= 72971 && c <= 73014) - : c <= 73018) - : (c <= 73021 || (c < 73040 - ? (c >= 73023 && c <= 73031) - : c <= 73049))))) - : (c <= 73061 || (c < 73440 - ? (c < 73104 - ? (c < 73066 - ? (c >= 73063 && c <= 73064) - : c <= 73102) - : (c <= 73105 || (c < 73120 - ? (c >= 73107 && c <= 73112) - : c <= 73129))) - : (c <= 73462 || (c < 74752 - ? (c < 73728 - ? c == 73648 - : c <= 74649) - : (c <= 74862 || (c < 77712 - ? (c >= 74880 && c <= 75075) - : c <= 77808))))))))) - : (c <= 78894 || (c < 110576 - ? (c < 93027 - ? (c < 92864 - ? (c < 92736 - ? (c < 92160 - ? (c >= 82944 && c <= 83526) - : c <= 92728) - : (c <= 92766 || (c < 92784 - ? (c >= 92768 && c <= 92777) - : c <= 92862))) - : (c <= 92873 || (c < 92928 - ? (c < 92912 - ? (c >= 92880 && c <= 92909) - : c <= 92916) - : (c <= 92982 || (c < 93008 - ? (c >= 92992 && c <= 92995) - : c <= 93017))))) - : (c <= 93047 || (c < 94176 - ? (c < 93952 - ? (c < 93760 - ? (c >= 93053 && c <= 93071) - : c <= 93823) - : (c <= 94026 || (c < 94095 - ? (c >= 94031 && c <= 94087) - : c <= 94111))) - : (c <= 94177 || (c < 94208 - ? (c < 94192 - ? (c >= 94179 && c <= 94180) - : c <= 94193) - : (c <= 100343 || (c < 101632 - ? (c >= 100352 && c <= 101589) - : c <= 101640))))))) - : (c <= 110579 || (c < 118528 - ? (c < 110960 - ? (c < 110592 - ? (c < 110589 - ? (c >= 110581 && c <= 110587) - : c <= 110590) - : (c <= 110882 || (c < 110948 - ? (c >= 110928 && c <= 110930) - : c <= 110951))) - : (c <= 111355 || (c < 113792 - ? (c < 113776 - ? (c >= 113664 && c <= 113770) - : c <= 113788) - : (c <= 113800 || (c < 113821 - ? (c >= 113808 && c <= 113817) - : c <= 113822))))) - : (c <= 118573 || (c < 119210 - ? (c < 119149 - ? (c < 119141 - ? (c >= 118576 && c <= 118598) - : c <= 119145) - : (c <= 119154 || (c < 119173 - ? (c >= 119163 && c <= 119170) - : c <= 119179))) - : (c <= 119213 || (c < 119894 - ? (c < 119808 - ? (c >= 119362 && c <= 119364) - : c <= 119892) - : (c <= 119964 || (c < 119970 - ? (c >= 119966 && c <= 119967) - : c <= 119970))))))))))) - : (c <= 119974 || (c < 124912 - ? (c < 120746 - ? (c < 120134 - ? (c < 120071 - ? (c < 119995 - ? (c < 119982 - ? (c >= 119977 && c <= 119980) - : c <= 119993) - : (c <= 119995 || (c < 120005 - ? (c >= 119997 && c <= 120003) - : c <= 120069))) - : (c <= 120074 || (c < 120094 - ? (c < 120086 - ? (c >= 120077 && c <= 120084) - : c <= 120092) - : (c <= 120121 || (c < 120128 - ? (c >= 120123 && c <= 120126) - : c <= 120132))))) - : (c <= 120134 || (c < 120572 - ? (c < 120488 - ? (c < 120146 - ? (c >= 120138 && c <= 120144) - : c <= 120485) - : (c <= 120512 || (c < 120540 - ? (c >= 120514 && c <= 120538) - : c <= 120570))) - : (c <= 120596 || (c < 120656 - ? (c < 120630 - ? (c >= 120598 && c <= 120628) - : c <= 120654) - : (c <= 120686 || (c < 120714 - ? (c >= 120688 && c <= 120712) - : c <= 120744))))))) - : (c <= 120770 || (c < 122907 - ? (c < 121476 - ? (c < 121344 - ? (c < 120782 - ? (c >= 120772 && c <= 120779) - : c <= 120831) - : (c <= 121398 || (c < 121461 - ? (c >= 121403 && c <= 121452) - : c <= 121461))) - : (c <= 121476 || (c < 122624 - ? (c < 121505 - ? (c >= 121499 && c <= 121503) - : c <= 121519) - : (c <= 122654 || (c < 122888 - ? (c >= 122880 && c <= 122886) - : c <= 122904))))) - : (c <= 122913 || (c < 123214 - ? (c < 123136 - ? (c < 122918 - ? (c >= 122915 && c <= 122916) - : c <= 122922) - : (c <= 123180 || (c < 123200 - ? (c >= 123184 && c <= 123197) - : c <= 123209))) - : (c <= 123214 || (c < 124896 - ? (c < 123584 - ? (c >= 123536 && c <= 123566) - : c <= 123641) - : (c <= 124902 || (c < 124909 - ? (c >= 124904 && c <= 124907) - : c <= 124910))))))))) - : (c <= 124926 || (c < 126557 - ? (c < 126521 - ? (c < 126469 - ? (c < 125184 - ? (c < 125136 - ? (c >= 124928 && c <= 125124) - : c <= 125142) - : (c <= 125259 || (c < 126464 - ? (c >= 125264 && c <= 125273) - : c <= 126467))) - : (c <= 126495 || (c < 126503 - ? (c < 126500 - ? (c >= 126497 && c <= 126498) - : c <= 126500) - : (c <= 126503 || (c < 126516 - ? (c >= 126505 && c <= 126514) - : c <= 126519))))) - : (c <= 126521 || (c < 126541 - ? (c < 126535 - ? (c < 126530 - ? c == 126523 - : c <= 126530) - : (c <= 126535 || (c < 126539 - ? c == 126537 - : c <= 126539))) - : (c <= 126543 || (c < 126551 - ? (c < 126548 - ? (c >= 126545 && c <= 126546) - : c <= 126548) - : (c <= 126551 || (c < 126555 - ? c == 126553 - : c <= 126555))))))) - : (c <= 126557 || (c < 126629 - ? (c < 126580 - ? (c < 126564 - ? (c < 126561 - ? c == 126559 - : c <= 126562) - : (c <= 126564 || (c < 126572 - ? (c >= 126567 && c <= 126570) - : c <= 126578))) - : (c <= 126583 || (c < 126592 - ? (c < 126590 - ? (c >= 126585 && c <= 126588) - : c <= 126590) - : (c <= 126601 || (c < 126625 - ? (c >= 126603 && c <= 126619) - : c <= 126627))))) - : (c <= 126633 || (c < 178208 - ? (c < 131072 - ? (c < 130032 - ? (c >= 126635 && c <= 126651) - : c <= 130041) - : (c <= 173791 || (c < 177984 - ? (c >= 173824 && c <= 177976) - : c <= 178205))) - : (c <= 183969 || (c < 196608 - ? (c < 194560 - ? (c >= 183984 && c <= 191456) - : c <= 195101) - : (c <= 201546 || (c >= 917760 && c <= 917999))))))))))))))))); -} +static TSCharacterRange sym_identifier_character_set_2[] = { + {'0', '9'}, {'A', 'Z'}, {'_', '_'}, {'a', 'z'}, {0xaa, 0xaa}, {0xb5, 0xb5}, {0xb7, 0xb7}, {0xba, 0xba}, + {0xc0, 0xd6}, {0xd8, 0xf6}, {0xf8, 0x2c1}, {0x2c6, 0x2d1}, {0x2e0, 0x2e4}, {0x2ec, 0x2ec}, {0x2ee, 0x2ee}, {0x300, 0x374}, + {0x376, 0x377}, {0x37b, 0x37d}, {0x37f, 0x37f}, {0x386, 0x38a}, {0x38c, 0x38c}, {0x38e, 0x3a1}, {0x3a3, 0x3f5}, {0x3f7, 0x481}, + {0x483, 0x487}, {0x48a, 0x52f}, {0x531, 0x556}, {0x559, 0x559}, {0x560, 0x588}, {0x591, 0x5bd}, {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, + {0x5c4, 0x5c5}, {0x5c7, 0x5c7}, {0x5d0, 0x5ea}, {0x5ef, 0x5f2}, {0x610, 0x61a}, {0x620, 0x669}, {0x66e, 0x6d3}, {0x6d5, 0x6dc}, + {0x6df, 0x6e8}, {0x6ea, 0x6fc}, {0x6ff, 0x6ff}, {0x710, 0x74a}, {0x74d, 0x7b1}, {0x7c0, 0x7f5}, {0x7fa, 0x7fa}, {0x7fd, 0x7fd}, + {0x800, 0x82d}, {0x840, 0x85b}, {0x860, 0x86a}, {0x870, 0x887}, {0x889, 0x88e}, {0x898, 0x8e1}, {0x8e3, 0x963}, {0x966, 0x96f}, + {0x971, 0x983}, {0x985, 0x98c}, {0x98f, 0x990}, {0x993, 0x9a8}, {0x9aa, 0x9b0}, {0x9b2, 0x9b2}, {0x9b6, 0x9b9}, {0x9bc, 0x9c4}, + {0x9c7, 0x9c8}, {0x9cb, 0x9ce}, {0x9d7, 0x9d7}, {0x9dc, 0x9dd}, {0x9df, 0x9e3}, {0x9e6, 0x9f1}, {0x9fc, 0x9fc}, {0x9fe, 0x9fe}, + {0xa01, 0xa03}, {0xa05, 0xa0a}, {0xa0f, 0xa10}, {0xa13, 0xa28}, {0xa2a, 0xa30}, {0xa32, 0xa33}, {0xa35, 0xa36}, {0xa38, 0xa39}, + {0xa3c, 0xa3c}, {0xa3e, 0xa42}, {0xa47, 0xa48}, {0xa4b, 0xa4d}, {0xa51, 0xa51}, {0xa59, 0xa5c}, {0xa5e, 0xa5e}, {0xa66, 0xa75}, + {0xa81, 0xa83}, {0xa85, 0xa8d}, {0xa8f, 0xa91}, {0xa93, 0xaa8}, {0xaaa, 0xab0}, {0xab2, 0xab3}, {0xab5, 0xab9}, {0xabc, 0xac5}, + {0xac7, 0xac9}, {0xacb, 0xacd}, {0xad0, 0xad0}, {0xae0, 0xae3}, {0xae6, 0xaef}, {0xaf9, 0xaff}, {0xb01, 0xb03}, {0xb05, 0xb0c}, + {0xb0f, 0xb10}, {0xb13, 0xb28}, {0xb2a, 0xb30}, {0xb32, 0xb33}, {0xb35, 0xb39}, {0xb3c, 0xb44}, {0xb47, 0xb48}, {0xb4b, 0xb4d}, + {0xb55, 0xb57}, {0xb5c, 0xb5d}, {0xb5f, 0xb63}, {0xb66, 0xb6f}, {0xb71, 0xb71}, {0xb82, 0xb83}, {0xb85, 0xb8a}, {0xb8e, 0xb90}, + {0xb92, 0xb95}, {0xb99, 0xb9a}, {0xb9c, 0xb9c}, {0xb9e, 0xb9f}, {0xba3, 0xba4}, {0xba8, 0xbaa}, {0xbae, 0xbb9}, {0xbbe, 0xbc2}, + {0xbc6, 0xbc8}, {0xbca, 0xbcd}, {0xbd0, 0xbd0}, {0xbd7, 0xbd7}, {0xbe6, 0xbef}, {0xc00, 0xc0c}, {0xc0e, 0xc10}, {0xc12, 0xc28}, + {0xc2a, 0xc39}, {0xc3c, 0xc44}, {0xc46, 0xc48}, {0xc4a, 0xc4d}, {0xc55, 0xc56}, {0xc58, 0xc5a}, {0xc5d, 0xc5d}, {0xc60, 0xc63}, + {0xc66, 0xc6f}, {0xc80, 0xc83}, {0xc85, 0xc8c}, {0xc8e, 0xc90}, {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, {0xcbc, 0xcc4}, + {0xcc6, 0xcc8}, {0xcca, 0xccd}, {0xcd5, 0xcd6}, {0xcdd, 0xcde}, {0xce0, 0xce3}, {0xce6, 0xcef}, {0xcf1, 0xcf3}, {0xd00, 0xd0c}, + {0xd0e, 0xd10}, {0xd12, 0xd44}, {0xd46, 0xd48}, {0xd4a, 0xd4e}, {0xd54, 0xd57}, {0xd5f, 0xd63}, {0xd66, 0xd6f}, {0xd7a, 0xd7f}, + {0xd81, 0xd83}, {0xd85, 0xd96}, {0xd9a, 0xdb1}, {0xdb3, 0xdbb}, {0xdbd, 0xdbd}, {0xdc0, 0xdc6}, {0xdca, 0xdca}, {0xdcf, 0xdd4}, + {0xdd6, 0xdd6}, {0xdd8, 0xddf}, {0xde6, 0xdef}, {0xdf2, 0xdf3}, {0xe01, 0xe3a}, {0xe40, 0xe4e}, {0xe50, 0xe59}, {0xe81, 0xe82}, + {0xe84, 0xe84}, {0xe86, 0xe8a}, {0xe8c, 0xea3}, {0xea5, 0xea5}, {0xea7, 0xebd}, {0xec0, 0xec4}, {0xec6, 0xec6}, {0xec8, 0xece}, + {0xed0, 0xed9}, {0xedc, 0xedf}, {0xf00, 0xf00}, {0xf18, 0xf19}, {0xf20, 0xf29}, {0xf35, 0xf35}, {0xf37, 0xf37}, {0xf39, 0xf39}, + {0xf3e, 0xf47}, {0xf49, 0xf6c}, {0xf71, 0xf84}, {0xf86, 0xf97}, {0xf99, 0xfbc}, {0xfc6, 0xfc6}, {0x1000, 0x1049}, {0x1050, 0x109d}, + {0x10a0, 0x10c5}, {0x10c7, 0x10c7}, {0x10cd, 0x10cd}, {0x10d0, 0x10fa}, {0x10fc, 0x1248}, {0x124a, 0x124d}, {0x1250, 0x1256}, {0x1258, 0x1258}, + {0x125a, 0x125d}, {0x1260, 0x1288}, {0x128a, 0x128d}, {0x1290, 0x12b0}, {0x12b2, 0x12b5}, {0x12b8, 0x12be}, {0x12c0, 0x12c0}, {0x12c2, 0x12c5}, + {0x12c8, 0x12d6}, {0x12d8, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x135a}, {0x135d, 0x135f}, {0x1369, 0x1371}, {0x1380, 0x138f}, {0x13a0, 0x13f5}, + {0x13f8, 0x13fd}, {0x1401, 0x166c}, {0x166f, 0x167f}, {0x1681, 0x169a}, {0x16a0, 0x16ea}, {0x16ee, 0x16f8}, {0x1700, 0x1715}, {0x171f, 0x1734}, + {0x1740, 0x1753}, {0x1760, 0x176c}, {0x176e, 0x1770}, {0x1772, 0x1773}, {0x1780, 0x17d3}, {0x17d7, 0x17d7}, {0x17dc, 0x17dd}, {0x17e0, 0x17e9}, + {0x180b, 0x180d}, {0x180f, 0x1819}, {0x1820, 0x1878}, {0x1880, 0x18aa}, {0x18b0, 0x18f5}, {0x1900, 0x191e}, {0x1920, 0x192b}, {0x1930, 0x193b}, + {0x1946, 0x196d}, {0x1970, 0x1974}, {0x1980, 0x19ab}, {0x19b0, 0x19c9}, {0x19d0, 0x19da}, {0x1a00, 0x1a1b}, {0x1a20, 0x1a5e}, {0x1a60, 0x1a7c}, + {0x1a7f, 0x1a89}, {0x1a90, 0x1a99}, {0x1aa7, 0x1aa7}, {0x1ab0, 0x1abd}, {0x1abf, 0x1ace}, {0x1b00, 0x1b4c}, {0x1b50, 0x1b59}, {0x1b6b, 0x1b73}, + {0x1b80, 0x1bf3}, {0x1c00, 0x1c37}, {0x1c40, 0x1c49}, {0x1c4d, 0x1c7d}, {0x1c80, 0x1c88}, {0x1c90, 0x1cba}, {0x1cbd, 0x1cbf}, {0x1cd0, 0x1cd2}, + {0x1cd4, 0x1cfa}, {0x1d00, 0x1f15}, {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, {0x1f48, 0x1f4d}, {0x1f50, 0x1f57}, {0x1f59, 0x1f59}, {0x1f5b, 0x1f5b}, + {0x1f5d, 0x1f5d}, {0x1f5f, 0x1f7d}, {0x1f80, 0x1fb4}, {0x1fb6, 0x1fbc}, {0x1fbe, 0x1fbe}, {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fcc}, {0x1fd0, 0x1fd3}, + {0x1fd6, 0x1fdb}, {0x1fe0, 0x1fec}, {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffc}, {0x200c, 0x200d}, {0x203f, 0x2040}, {0x2054, 0x2054}, {0x2071, 0x2071}, + {0x207f, 0x207f}, {0x2090, 0x209c}, {0x20d0, 0x20dc}, {0x20e1, 0x20e1}, {0x20e5, 0x20f0}, {0x2102, 0x2102}, {0x2107, 0x2107}, {0x210a, 0x2113}, + {0x2115, 0x2115}, {0x2118, 0x211d}, {0x2124, 0x2124}, {0x2126, 0x2126}, {0x2128, 0x2128}, {0x212a, 0x2139}, {0x213c, 0x213f}, {0x2145, 0x2149}, + {0x214e, 0x214e}, {0x2160, 0x2188}, {0x2c00, 0x2ce4}, {0x2ceb, 0x2cf3}, {0x2d00, 0x2d25}, {0x2d27, 0x2d27}, {0x2d2d, 0x2d2d}, {0x2d30, 0x2d67}, + {0x2d6f, 0x2d6f}, {0x2d7f, 0x2d96}, {0x2da0, 0x2da6}, {0x2da8, 0x2dae}, {0x2db0, 0x2db6}, {0x2db8, 0x2dbe}, {0x2dc0, 0x2dc6}, {0x2dc8, 0x2dce}, + {0x2dd0, 0x2dd6}, {0x2dd8, 0x2dde}, {0x2de0, 0x2dff}, {0x3005, 0x3007}, {0x3021, 0x302f}, {0x3031, 0x3035}, {0x3038, 0x303c}, {0x3041, 0x3096}, + {0x3099, 0x309a}, {0x309d, 0x309f}, {0x30a1, 0x30ff}, {0x3105, 0x312f}, {0x3131, 0x318e}, {0x31a0, 0x31bf}, {0x31f0, 0x31ff}, {0x3400, 0x4dbf}, + {0x4e00, 0xa48c}, {0xa4d0, 0xa4fd}, {0xa500, 0xa60c}, {0xa610, 0xa62b}, {0xa640, 0xa66f}, {0xa674, 0xa67d}, {0xa67f, 0xa6f1}, {0xa717, 0xa71f}, + {0xa722, 0xa788}, {0xa78b, 0xa7ca}, {0xa7d0, 0xa7d1}, {0xa7d3, 0xa7d3}, {0xa7d5, 0xa7d9}, {0xa7f2, 0xa827}, {0xa82c, 0xa82c}, {0xa840, 0xa873}, + {0xa880, 0xa8c5}, {0xa8d0, 0xa8d9}, {0xa8e0, 0xa8f7}, {0xa8fb, 0xa8fb}, {0xa8fd, 0xa92d}, {0xa930, 0xa953}, {0xa960, 0xa97c}, {0xa980, 0xa9c0}, + {0xa9cf, 0xa9d9}, {0xa9e0, 0xa9fe}, {0xaa00, 0xaa36}, {0xaa40, 0xaa4d}, {0xaa50, 0xaa59}, {0xaa60, 0xaa76}, {0xaa7a, 0xaac2}, {0xaadb, 0xaadd}, + {0xaae0, 0xaaef}, {0xaaf2, 0xaaf6}, {0xab01, 0xab06}, {0xab09, 0xab0e}, {0xab11, 0xab16}, {0xab20, 0xab26}, {0xab28, 0xab2e}, {0xab30, 0xab5a}, + {0xab5c, 0xab69}, {0xab70, 0xabea}, {0xabec, 0xabed}, {0xabf0, 0xabf9}, {0xac00, 0xd7a3}, {0xd7b0, 0xd7c6}, {0xd7cb, 0xd7fb}, {0xf900, 0xfa6d}, + {0xfa70, 0xfad9}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, {0xfb1d, 0xfb28}, {0xfb2a, 0xfb36}, {0xfb38, 0xfb3c}, {0xfb3e, 0xfb3e}, {0xfb40, 0xfb41}, + {0xfb43, 0xfb44}, {0xfb46, 0xfbb1}, {0xfbd3, 0xfc5d}, {0xfc64, 0xfd3d}, {0xfd50, 0xfd8f}, {0xfd92, 0xfdc7}, {0xfdf0, 0xfdf9}, {0xfe00, 0xfe0f}, + {0xfe20, 0xfe2f}, {0xfe33, 0xfe34}, {0xfe4d, 0xfe4f}, {0xfe71, 0xfe71}, {0xfe73, 0xfe73}, {0xfe77, 0xfe77}, {0xfe79, 0xfe79}, {0xfe7b, 0xfe7b}, + {0xfe7d, 0xfe7d}, {0xfe7f, 0xfefc}, {0xff10, 0xff19}, {0xff21, 0xff3a}, {0xff3f, 0xff3f}, {0xff41, 0xff5a}, {0xff65, 0xffbe}, {0xffc2, 0xffc7}, + {0xffca, 0xffcf}, {0xffd2, 0xffd7}, {0xffda, 0xffdc}, {0x10000, 0x1000b}, {0x1000d, 0x10026}, {0x10028, 0x1003a}, {0x1003c, 0x1003d}, {0x1003f, 0x1004d}, + {0x10050, 0x1005d}, {0x10080, 0x100fa}, {0x10140, 0x10174}, {0x101fd, 0x101fd}, {0x10280, 0x1029c}, {0x102a0, 0x102d0}, {0x102e0, 0x102e0}, {0x10300, 0x1031f}, + {0x1032d, 0x1034a}, {0x10350, 0x1037a}, {0x10380, 0x1039d}, {0x103a0, 0x103c3}, {0x103c8, 0x103cf}, {0x103d1, 0x103d5}, {0x10400, 0x1049d}, {0x104a0, 0x104a9}, + {0x104b0, 0x104d3}, {0x104d8, 0x104fb}, {0x10500, 0x10527}, {0x10530, 0x10563}, {0x10570, 0x1057a}, {0x1057c, 0x1058a}, {0x1058c, 0x10592}, {0x10594, 0x10595}, + {0x10597, 0x105a1}, {0x105a3, 0x105b1}, {0x105b3, 0x105b9}, {0x105bb, 0x105bc}, {0x10600, 0x10736}, {0x10740, 0x10755}, {0x10760, 0x10767}, {0x10780, 0x10785}, + {0x10787, 0x107b0}, {0x107b2, 0x107ba}, {0x10800, 0x10805}, {0x10808, 0x10808}, {0x1080a, 0x10835}, {0x10837, 0x10838}, {0x1083c, 0x1083c}, {0x1083f, 0x10855}, + {0x10860, 0x10876}, {0x10880, 0x1089e}, {0x108e0, 0x108f2}, {0x108f4, 0x108f5}, {0x10900, 0x10915}, {0x10920, 0x10939}, {0x10980, 0x109b7}, {0x109be, 0x109bf}, + {0x10a00, 0x10a03}, {0x10a05, 0x10a06}, {0x10a0c, 0x10a13}, {0x10a15, 0x10a17}, {0x10a19, 0x10a35}, {0x10a38, 0x10a3a}, {0x10a3f, 0x10a3f}, {0x10a60, 0x10a7c}, + {0x10a80, 0x10a9c}, {0x10ac0, 0x10ac7}, {0x10ac9, 0x10ae6}, {0x10b00, 0x10b35}, {0x10b40, 0x10b55}, {0x10b60, 0x10b72}, {0x10b80, 0x10b91}, {0x10c00, 0x10c48}, + {0x10c80, 0x10cb2}, {0x10cc0, 0x10cf2}, {0x10d00, 0x10d27}, {0x10d30, 0x10d39}, {0x10e80, 0x10ea9}, {0x10eab, 0x10eac}, {0x10eb0, 0x10eb1}, {0x10efd, 0x10f1c}, + {0x10f27, 0x10f27}, {0x10f30, 0x10f50}, {0x10f70, 0x10f85}, {0x10fb0, 0x10fc4}, {0x10fe0, 0x10ff6}, {0x11000, 0x11046}, {0x11066, 0x11075}, {0x1107f, 0x110ba}, + {0x110c2, 0x110c2}, {0x110d0, 0x110e8}, {0x110f0, 0x110f9}, {0x11100, 0x11134}, {0x11136, 0x1113f}, {0x11144, 0x11147}, {0x11150, 0x11173}, {0x11176, 0x11176}, + {0x11180, 0x111c4}, {0x111c9, 0x111cc}, {0x111ce, 0x111da}, {0x111dc, 0x111dc}, {0x11200, 0x11211}, {0x11213, 0x11237}, {0x1123e, 0x11241}, {0x11280, 0x11286}, + {0x11288, 0x11288}, {0x1128a, 0x1128d}, {0x1128f, 0x1129d}, {0x1129f, 0x112a8}, {0x112b0, 0x112ea}, {0x112f0, 0x112f9}, {0x11300, 0x11303}, {0x11305, 0x1130c}, + {0x1130f, 0x11310}, {0x11313, 0x11328}, {0x1132a, 0x11330}, {0x11332, 0x11333}, {0x11335, 0x11339}, {0x1133b, 0x11344}, {0x11347, 0x11348}, {0x1134b, 0x1134d}, + {0x11350, 0x11350}, {0x11357, 0x11357}, {0x1135d, 0x11363}, {0x11366, 0x1136c}, {0x11370, 0x11374}, {0x11400, 0x1144a}, {0x11450, 0x11459}, {0x1145e, 0x11461}, + {0x11480, 0x114c5}, {0x114c7, 0x114c7}, {0x114d0, 0x114d9}, {0x11580, 0x115b5}, {0x115b8, 0x115c0}, {0x115d8, 0x115dd}, {0x11600, 0x11640}, {0x11644, 0x11644}, + {0x11650, 0x11659}, {0x11680, 0x116b8}, {0x116c0, 0x116c9}, {0x11700, 0x1171a}, {0x1171d, 0x1172b}, {0x11730, 0x11739}, {0x11740, 0x11746}, {0x11800, 0x1183a}, + {0x118a0, 0x118e9}, {0x118ff, 0x11906}, {0x11909, 0x11909}, {0x1190c, 0x11913}, {0x11915, 0x11916}, {0x11918, 0x11935}, {0x11937, 0x11938}, {0x1193b, 0x11943}, + {0x11950, 0x11959}, {0x119a0, 0x119a7}, {0x119aa, 0x119d7}, {0x119da, 0x119e1}, {0x119e3, 0x119e4}, {0x11a00, 0x11a3e}, {0x11a47, 0x11a47}, {0x11a50, 0x11a99}, + {0x11a9d, 0x11a9d}, {0x11ab0, 0x11af8}, {0x11c00, 0x11c08}, {0x11c0a, 0x11c36}, {0x11c38, 0x11c40}, {0x11c50, 0x11c59}, {0x11c72, 0x11c8f}, {0x11c92, 0x11ca7}, + {0x11ca9, 0x11cb6}, {0x11d00, 0x11d06}, {0x11d08, 0x11d09}, {0x11d0b, 0x11d36}, {0x11d3a, 0x11d3a}, {0x11d3c, 0x11d3d}, {0x11d3f, 0x11d47}, {0x11d50, 0x11d59}, + {0x11d60, 0x11d65}, {0x11d67, 0x11d68}, {0x11d6a, 0x11d8e}, {0x11d90, 0x11d91}, {0x11d93, 0x11d98}, {0x11da0, 0x11da9}, {0x11ee0, 0x11ef6}, {0x11f00, 0x11f10}, + {0x11f12, 0x11f3a}, {0x11f3e, 0x11f42}, {0x11f50, 0x11f59}, {0x11fb0, 0x11fb0}, {0x12000, 0x12399}, {0x12400, 0x1246e}, {0x12480, 0x12543}, {0x12f90, 0x12ff0}, + {0x13000, 0x1342f}, {0x13440, 0x13455}, {0x14400, 0x14646}, {0x16800, 0x16a38}, {0x16a40, 0x16a5e}, {0x16a60, 0x16a69}, {0x16a70, 0x16abe}, {0x16ac0, 0x16ac9}, + {0x16ad0, 0x16aed}, {0x16af0, 0x16af4}, {0x16b00, 0x16b36}, {0x16b40, 0x16b43}, {0x16b50, 0x16b59}, {0x16b63, 0x16b77}, {0x16b7d, 0x16b8f}, {0x16e40, 0x16e7f}, + {0x16f00, 0x16f4a}, {0x16f4f, 0x16f87}, {0x16f8f, 0x16f9f}, {0x16fe0, 0x16fe1}, {0x16fe3, 0x16fe4}, {0x16ff0, 0x16ff1}, {0x17000, 0x187f7}, {0x18800, 0x18cd5}, + {0x18d00, 0x18d08}, {0x1aff0, 0x1aff3}, {0x1aff5, 0x1affb}, {0x1affd, 0x1affe}, {0x1b000, 0x1b122}, {0x1b132, 0x1b132}, {0x1b150, 0x1b152}, {0x1b155, 0x1b155}, + {0x1b164, 0x1b167}, {0x1b170, 0x1b2fb}, {0x1bc00, 0x1bc6a}, {0x1bc70, 0x1bc7c}, {0x1bc80, 0x1bc88}, {0x1bc90, 0x1bc99}, {0x1bc9d, 0x1bc9e}, {0x1cf00, 0x1cf2d}, + {0x1cf30, 0x1cf46}, {0x1d165, 0x1d169}, {0x1d16d, 0x1d172}, {0x1d17b, 0x1d182}, {0x1d185, 0x1d18b}, {0x1d1aa, 0x1d1ad}, {0x1d242, 0x1d244}, {0x1d400, 0x1d454}, + {0x1d456, 0x1d49c}, {0x1d49e, 0x1d49f}, {0x1d4a2, 0x1d4a2}, {0x1d4a5, 0x1d4a6}, {0x1d4a9, 0x1d4ac}, {0x1d4ae, 0x1d4b9}, {0x1d4bb, 0x1d4bb}, {0x1d4bd, 0x1d4c3}, + {0x1d4c5, 0x1d505}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514}, {0x1d516, 0x1d51c}, {0x1d51e, 0x1d539}, {0x1d53b, 0x1d53e}, {0x1d540, 0x1d544}, {0x1d546, 0x1d546}, + {0x1d54a, 0x1d550}, {0x1d552, 0x1d6a5}, {0x1d6a8, 0x1d6c0}, {0x1d6c2, 0x1d6da}, {0x1d6dc, 0x1d6fa}, {0x1d6fc, 0x1d714}, {0x1d716, 0x1d734}, {0x1d736, 0x1d74e}, + {0x1d750, 0x1d76e}, {0x1d770, 0x1d788}, {0x1d78a, 0x1d7a8}, {0x1d7aa, 0x1d7c2}, {0x1d7c4, 0x1d7cb}, {0x1d7ce, 0x1d7ff}, {0x1da00, 0x1da36}, {0x1da3b, 0x1da6c}, + {0x1da75, 0x1da75}, {0x1da84, 0x1da84}, {0x1da9b, 0x1da9f}, {0x1daa1, 0x1daaf}, {0x1df00, 0x1df1e}, {0x1df25, 0x1df2a}, {0x1e000, 0x1e006}, {0x1e008, 0x1e018}, + {0x1e01b, 0x1e021}, {0x1e023, 0x1e024}, {0x1e026, 0x1e02a}, {0x1e030, 0x1e06d}, {0x1e08f, 0x1e08f}, {0x1e100, 0x1e12c}, {0x1e130, 0x1e13d}, {0x1e140, 0x1e149}, + {0x1e14e, 0x1e14e}, {0x1e290, 0x1e2ae}, {0x1e2c0, 0x1e2f9}, {0x1e4d0, 0x1e4f9}, {0x1e7e0, 0x1e7e6}, {0x1e7e8, 0x1e7eb}, {0x1e7ed, 0x1e7ee}, {0x1e7f0, 0x1e7fe}, + {0x1e800, 0x1e8c4}, {0x1e8d0, 0x1e8d6}, {0x1e900, 0x1e94b}, {0x1e950, 0x1e959}, {0x1ee00, 0x1ee03}, {0x1ee05, 0x1ee1f}, {0x1ee21, 0x1ee22}, {0x1ee24, 0x1ee24}, + {0x1ee27, 0x1ee27}, {0x1ee29, 0x1ee32}, {0x1ee34, 0x1ee37}, {0x1ee39, 0x1ee39}, {0x1ee3b, 0x1ee3b}, {0x1ee42, 0x1ee42}, {0x1ee47, 0x1ee47}, {0x1ee49, 0x1ee49}, + {0x1ee4b, 0x1ee4b}, {0x1ee4d, 0x1ee4f}, {0x1ee51, 0x1ee52}, {0x1ee54, 0x1ee54}, {0x1ee57, 0x1ee57}, {0x1ee59, 0x1ee59}, {0x1ee5b, 0x1ee5b}, {0x1ee5d, 0x1ee5d}, + {0x1ee5f, 0x1ee5f}, {0x1ee61, 0x1ee62}, {0x1ee64, 0x1ee64}, {0x1ee67, 0x1ee6a}, {0x1ee6c, 0x1ee72}, {0x1ee74, 0x1ee77}, {0x1ee79, 0x1ee7c}, {0x1ee7e, 0x1ee7e}, + {0x1ee80, 0x1ee89}, {0x1ee8b, 0x1ee9b}, {0x1eea1, 0x1eea3}, {0x1eea5, 0x1eea9}, {0x1eeab, 0x1eebb}, {0x1fbf0, 0x1fbf9}, {0x20000, 0x2a6df}, {0x2a700, 0x2b739}, + {0x2b740, 0x2b81d}, {0x2b820, 0x2cea1}, {0x2ceb0, 0x2ebe0}, {0x2ebf0, 0x2ee5d}, {0x2f800, 0x2fa1d}, {0x30000, 0x3134a}, {0x31350, 0x323af}, {0xe0100, 0xe01ef}, +}; static bool ts_lex(TSLexer *lexer, TSStateId state) { START_LEXER(); @@ -7102,27 +4710,29 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { switch (state) { case 0: if (eof) ADVANCE(65); - if (lookahead == '!') ADVANCE(22); - if (lookahead == '#') ADVANCE(165); - if (lookahead == '%') ADVANCE(98); - if (lookahead == '&') ADVANCE(100); - if (lookahead == '(') ADVANCE(68); - if (lookahead == ')') ADVANCE(69); - if (lookahead == '*') ADVANCE(71); - if (lookahead == '+') ADVANCE(85); - if (lookahead == ',') ADVANCE(70); - if (lookahead == '-') ADVANCE(83); - if (lookahead == '.') ADVANCE(67); - if (lookahead == '/') ADVANCE(96); - if (lookahead == '0') ADVANCE(138); - if (lookahead == ':') ADVANCE(76); - if (lookahead == ';') ADVANCE(166); - if (lookahead == '<') ADVANCE(104); - if (lookahead == '=') ADVANCE(92); - if (lookahead == '>') ADVANCE(110); - if (lookahead == '@') ADVANCE(95); - if (lookahead == '[') ADVANCE(86); - if (lookahead == '\\') SKIP(54) + ADVANCE_MAP( + '!', 22, + '#', 165, + '%', 98, + '&', 100, + '(', 68, + ')', 69, + '*', 71, + '+', 85, + ',', 70, + '-', 83, + '.', 67, + '/', 96, + '0', 137, + ':', 76, + ';', 166, + '<', 104, + '=', 92, + '>', 110, + '@', 95, + '[', 86, + ); + if (lookahead == '\\') SKIP(54); if (lookahead == ']') ADVANCE(87); if (lookahead == '^') ADVANCE(101); if (lookahead == 'e') ADVANCE(161); @@ -7130,232 +4740,213 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == '|') ADVANCE(80); if (lookahead == '}') ADVANCE(89); if (lookahead == '~') ADVANCE(103); - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\f' || - lookahead == '\r' || + if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ' || - lookahead == 8203 || - lookahead == 8288 || - lookahead == 65279) SKIP(61) - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(137); - if (sym_identifier_character_set_1(lookahead)) ADVANCE(164); + lookahead == 0x200b || + lookahead == 0x2060 || + lookahead == 0xfeff) SKIP(61); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(138); + if (set_contains(sym_identifier_character_set_1, 668, lookahead)) ADVANCE(164); END_STATE(); case 1: - if (lookahead == '\n') SKIP(16) + if (lookahead == '\n') SKIP(16); END_STATE(); case 2: - if (lookahead == '\n') SKIP(16) - if (lookahead == '\r') SKIP(1) + if (lookahead == '\n') SKIP(16); + if (lookahead == '\r') SKIP(1); END_STATE(); case 3: - if (lookahead == '\n') SKIP(15) + if (lookahead == '\n') SKIP(15); END_STATE(); case 4: - if (lookahead == '\n') SKIP(15) - if (lookahead == '\r') SKIP(3) + if (lookahead == '\n') SKIP(15); + if (lookahead == '\r') SKIP(3); END_STATE(); case 5: - if (lookahead == '\n') SKIP(19) + if (lookahead == '\n') SKIP(19); END_STATE(); case 6: - if (lookahead == '\n') SKIP(19) - if (lookahead == '\r') SKIP(5) + if (lookahead == '\n') SKIP(19); + if (lookahead == '\r') SKIP(5); END_STATE(); case 7: if (lookahead == '\n') ADVANCE(130); END_STATE(); case 8: - if (lookahead == '\n') SKIP(9) + if (lookahead == '\n') SKIP(9); if (lookahead == '#') ADVANCE(134); if (lookahead == '\\') ADVANCE(132); if (lookahead == '{') ADVANCE(127); if (lookahead == '}') ADVANCE(89); - if (lookahead == '\t' || - lookahead == '\f' || - lookahead == '\r' || + if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ' || - lookahead == 8203 || - lookahead == 8288 || - lookahead == 65279) ADVANCE(133); + lookahead == 0x200b || + lookahead == 0x2060 || + lookahead == 0xfeff) ADVANCE(133); if (lookahead != 0) ADVANCE(134); END_STATE(); case 9: - if (lookahead == '\n') SKIP(9) + if (lookahead == '\n') SKIP(9); if (lookahead == '#') ADVANCE(134); if (lookahead == '\\') ADVANCE(132); if (lookahead == '}') ADVANCE(89); - if (lookahead == '\t' || - lookahead == '\f' || - lookahead == '\r' || + if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ' || - lookahead == 8203 || - lookahead == 8288 || - lookahead == 65279) ADVANCE(133); + lookahead == 0x200b || + lookahead == 0x2060 || + lookahead == 0xfeff) ADVANCE(133); if (lookahead != 0 && lookahead != '{') ADVANCE(134); END_STATE(); case 10: - if (lookahead == '\n') SKIP(17) + if (lookahead == '\n') SKIP(17); END_STATE(); case 11: - if (lookahead == '\n') SKIP(17) - if (lookahead == '\r') SKIP(10) + if (lookahead == '\n') SKIP(17); + if (lookahead == '\r') SKIP(10); END_STATE(); case 12: - if (lookahead == '\n') SKIP(14) + if (lookahead == '\n') SKIP(14); END_STATE(); case 13: - if (lookahead == '\n') SKIP(14) - if (lookahead == '\r') SKIP(12) + if (lookahead == '\n') SKIP(14); + if (lookahead == '\r') SKIP(12); END_STATE(); case 14: - if (lookahead == '!') ADVANCE(22); - if (lookahead == '#') ADVANCE(165); - if (lookahead == '%') ADVANCE(98); - if (lookahead == '&') ADVANCE(100); - if (lookahead == '(') ADVANCE(68); - if (lookahead == ')') ADVANCE(69); - if (lookahead == '*') ADVANCE(71); - if (lookahead == '+') ADVANCE(85); - if (lookahead == ',') ADVANCE(70); - if (lookahead == '-') ADVANCE(82); - if (lookahead == '.') ADVANCE(66); - if (lookahead == '/') ADVANCE(96); - if (lookahead == ':') ADVANCE(76); - if (lookahead == ';') ADVANCE(166); - if (lookahead == '<') ADVANCE(104); - if (lookahead == '=') ADVANCE(92); - if (lookahead == '>') ADVANCE(110); - if (lookahead == '@') ADVANCE(95); - if (lookahead == '[') ADVANCE(86); - if (lookahead == '\\') SKIP(13) + ADVANCE_MAP( + '!', 22, + '#', 165, + '%', 98, + '&', 100, + '(', 68, + ')', 69, + '*', 71, + '+', 85, + ',', 70, + '-', 82, + '.', 66, + '/', 96, + ':', 76, + ';', 166, + '<', 104, + '=', 92, + '>', 110, + '@', 95, + '[', 86, + ); + if (lookahead == '\\') SKIP(13); if (lookahead == ']') ADVANCE(87); if (lookahead == '^') ADVANCE(101); if (lookahead == '|') ADVANCE(80); if (lookahead == '}') ADVANCE(89); - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\f' || - lookahead == '\r' || + if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ' || - lookahead == 8203 || - lookahead == 8288 || - lookahead == 65279) SKIP(14) - if (sym_identifier_character_set_1(lookahead)) ADVANCE(164); + lookahead == 0x200b || + lookahead == 0x2060 || + lookahead == 0xfeff) SKIP(14); + if (set_contains(sym_identifier_character_set_1, 668, lookahead)) ADVANCE(164); END_STATE(); case 15: - if (lookahead == '!') ADVANCE(22); - if (lookahead == '#') ADVANCE(165); - if (lookahead == '%') ADVANCE(98); - if (lookahead == '&') ADVANCE(100); - if (lookahead == '(') ADVANCE(68); - if (lookahead == ')') ADVANCE(69); - if (lookahead == '*') ADVANCE(71); - if (lookahead == '+') ADVANCE(85); - if (lookahead == ',') ADVANCE(70); - if (lookahead == '-') ADVANCE(82); - if (lookahead == '.') ADVANCE(66); - if (lookahead == '/') ADVANCE(96); - if (lookahead == ':') ADVANCE(75); - if (lookahead == ';') ADVANCE(166); - if (lookahead == '<') ADVANCE(104); - if (lookahead == '=') ADVANCE(92); - if (lookahead == '>') ADVANCE(110); - if (lookahead == '@') ADVANCE(95); - if (lookahead == '[') ADVANCE(86); - if (lookahead == '\\') SKIP(4) + ADVANCE_MAP( + '!', 22, + '#', 165, + '%', 98, + '&', 100, + '(', 68, + ')', 69, + '*', 71, + '+', 85, + ',', 70, + '-', 82, + '.', 66, + '/', 96, + ':', 75, + ';', 166, + '<', 104, + '=', 92, + '>', 110, + '@', 95, + '[', 86, + ); + if (lookahead == '\\') SKIP(4); if (lookahead == ']') ADVANCE(87); if (lookahead == '^') ADVANCE(101); if (lookahead == '|') ADVANCE(80); if (lookahead == '}') ADVANCE(89); - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\f' || - lookahead == '\r' || + if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ' || - lookahead == 8203 || - lookahead == 8288 || - lookahead == 65279) SKIP(15) - if (sym_identifier_character_set_1(lookahead)) ADVANCE(164); + lookahead == 0x200b || + lookahead == 0x2060 || + lookahead == 0xfeff) SKIP(15); + if (set_contains(sym_identifier_character_set_1, 668, lookahead)) ADVANCE(164); END_STATE(); case 16: - if (lookahead == '!') ADVANCE(22); - if (lookahead == '#') ADVANCE(165); - if (lookahead == '%') ADVANCE(23); - if (lookahead == '&') ADVANCE(24); - if (lookahead == '(') ADVANCE(68); - if (lookahead == ')') ADVANCE(69); - if (lookahead == '*') ADVANCE(71); - if (lookahead == '+') ADVANCE(85); - if (lookahead == ',') ADVANCE(70); - if (lookahead == '-') ADVANCE(82); - if (lookahead == '.') ADVANCE(20); - if (lookahead == '/') ADVANCE(97); - if (lookahead == '0') ADVANCE(138); - if (lookahead == ':') ADVANCE(75); - if (lookahead == '<') ADVANCE(105); - if (lookahead == '=') ADVANCE(92); - if (lookahead == '>') ADVANCE(111); - if (lookahead == '@') ADVANCE(25); - if (lookahead == '[') ADVANCE(86); - if (lookahead == '\\') SKIP(2) + ADVANCE_MAP( + '!', 22, + '#', 165, + '%', 23, + '&', 24, + '(', 68, + ')', 69, + '*', 71, + '+', 85, + ',', 70, + '-', 82, + '.', 20, + '/', 97, + '0', 137, + ':', 75, + '<', 105, + '=', 92, + '>', 111, + '@', 25, + '[', 86, + ); + if (lookahead == '\\') SKIP(2); if (lookahead == ']') ADVANCE(87); if (lookahead == '^') ADVANCE(26); if (lookahead == '{') ADVANCE(88); if (lookahead == '|') ADVANCE(80); if (lookahead == '}') ADVANCE(89); if (lookahead == '~') ADVANCE(103); - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\f' || - lookahead == '\r' || + if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ' || - lookahead == 8203 || - lookahead == 8288 || - lookahead == 65279) SKIP(16) - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(137); - if (sym_identifier_character_set_1(lookahead)) ADVANCE(164); + lookahead == 0x200b || + lookahead == 0x2060 || + lookahead == 0xfeff) SKIP(16); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(138); + if (set_contains(sym_identifier_character_set_1, 668, lookahead)) ADVANCE(164); END_STATE(); case 17: if (lookahead == '#') ADVANCE(165); if (lookahead == '-') ADVANCE(30); if (lookahead == ':') ADVANCE(75); - if (lookahead == '\\') SKIP(11) - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\f' || - lookahead == '\r' || + if (lookahead == '\\') SKIP(11); + if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ' || - lookahead == 8203 || - lookahead == 8288 || - lookahead == 65279) SKIP(17) + lookahead == 0x200b || + lookahead == 0x2060 || + lookahead == 0xfeff) SKIP(17); END_STATE(); case 18: if (lookahead == '#') ADVANCE(165); if (lookahead == '\\') ADVANCE(131); if (lookahead == '{') ADVANCE(128); if (lookahead == '}') ADVANCE(36); - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\f' || - lookahead == '\r' || + if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ' || - lookahead == 8203 || - lookahead == 8288 || - lookahead == 65279) SKIP(19) + lookahead == 0x200b || + lookahead == 0x2060 || + lookahead == 0xfeff) SKIP(19); END_STATE(); case 19: if (lookahead == '#') ADVANCE(165); - if (lookahead == '\\') SKIP(6) - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\f' || - lookahead == '\r' || + if (lookahead == '\\') SKIP(6); + if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ' || - lookahead == 8203 || - lookahead == 8288 || - lookahead == 65279) SKIP(19) + lookahead == 0x200b || + lookahead == 0x2060 || + lookahead == 0xfeff) SKIP(19); END_STATE(); case 20: if (lookahead == '.') ADVANCE(21); @@ -7489,63 +5080,65 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 53: if (eof) ADVANCE(65); - if (lookahead == '\n') SKIP(61) + if (lookahead == '\n') SKIP(61); END_STATE(); case 54: if (eof) ADVANCE(65); - if (lookahead == '\n') SKIP(61) - if (lookahead == '\r') SKIP(53) + if (lookahead == '\n') SKIP(61); + if (lookahead == '\r') SKIP(53); END_STATE(); case 55: if (eof) ADVANCE(65); - if (lookahead == '\n') SKIP(62) + if (lookahead == '\n') SKIP(62); END_STATE(); case 56: if (eof) ADVANCE(65); - if (lookahead == '\n') SKIP(62) - if (lookahead == '\r') SKIP(55) + if (lookahead == '\n') SKIP(62); + if (lookahead == '\r') SKIP(55); END_STATE(); case 57: if (eof) ADVANCE(65); - if (lookahead == '\n') SKIP(63) + if (lookahead == '\n') SKIP(63); END_STATE(); case 58: if (eof) ADVANCE(65); - if (lookahead == '\n') SKIP(63) - if (lookahead == '\r') SKIP(57) + if (lookahead == '\n') SKIP(63); + if (lookahead == '\r') SKIP(57); END_STATE(); case 59: if (eof) ADVANCE(65); - if (lookahead == '\n') SKIP(64) + if (lookahead == '\n') SKIP(64); END_STATE(); case 60: if (eof) ADVANCE(65); - if (lookahead == '\n') SKIP(64) - if (lookahead == '\r') SKIP(59) + if (lookahead == '\n') SKIP(64); + if (lookahead == '\r') SKIP(59); END_STATE(); case 61: if (eof) ADVANCE(65); - if (lookahead == '!') ADVANCE(22); - if (lookahead == '#') ADVANCE(165); - if (lookahead == '%') ADVANCE(98); - if (lookahead == '&') ADVANCE(100); - if (lookahead == '(') ADVANCE(68); - if (lookahead == ')') ADVANCE(69); - if (lookahead == '*') ADVANCE(71); - if (lookahead == '+') ADVANCE(85); - if (lookahead == ',') ADVANCE(70); - if (lookahead == '-') ADVANCE(83); - if (lookahead == '.') ADVANCE(67); - if (lookahead == '/') ADVANCE(96); - if (lookahead == '0') ADVANCE(138); - if (lookahead == ':') ADVANCE(76); - if (lookahead == ';') ADVANCE(166); - if (lookahead == '<') ADVANCE(104); - if (lookahead == '=') ADVANCE(92); - if (lookahead == '>') ADVANCE(110); - if (lookahead == '@') ADVANCE(95); - if (lookahead == '[') ADVANCE(86); - if (lookahead == '\\') SKIP(54) + ADVANCE_MAP( + '!', 22, + '#', 165, + '%', 98, + '&', 100, + '(', 68, + ')', 69, + '*', 71, + '+', 85, + ',', 70, + '-', 83, + '.', 67, + '/', 96, + '0', 137, + ':', 76, + ';', 166, + '<', 104, + '=', 92, + '>', 110, + '@', 95, + '[', 86, + ); + if (lookahead == '\\') SKIP(54); if (lookahead == ']') ADVANCE(87); if (lookahead == '^') ADVANCE(101); if (lookahead == 'e') ADVANCE(161); @@ -7553,108 +5146,102 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == '|') ADVANCE(80); if (lookahead == '}') ADVANCE(89); if (lookahead == '~') ADVANCE(103); - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\f' || - lookahead == '\r' || + if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ' || - lookahead == 8203 || - lookahead == 8288 || - lookahead == 65279) SKIP(61) - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(137); - if (sym_identifier_character_set_1(lookahead)) ADVANCE(164); + lookahead == 0x200b || + lookahead == 0x2060 || + lookahead == 0xfeff) SKIP(61); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(138); + if (set_contains(sym_identifier_character_set_1, 668, lookahead)) ADVANCE(164); END_STATE(); case 62: if (eof) ADVANCE(65); - if (lookahead == '!') ADVANCE(22); - if (lookahead == '#') ADVANCE(165); - if (lookahead == '%') ADVANCE(98); - if (lookahead == '&') ADVANCE(100); - if (lookahead == '(') ADVANCE(68); - if (lookahead == ')') ADVANCE(69); - if (lookahead == '*') ADVANCE(71); - if (lookahead == '+') ADVANCE(85); - if (lookahead == ',') ADVANCE(70); - if (lookahead == '-') ADVANCE(82); - if (lookahead == '.') ADVANCE(67); - if (lookahead == '/') ADVANCE(96); - if (lookahead == '0') ADVANCE(138); - if (lookahead == ':') ADVANCE(76); - if (lookahead == ';') ADVANCE(166); - if (lookahead == '<') ADVANCE(104); - if (lookahead == '=') ADVANCE(92); - if (lookahead == '>') ADVANCE(110); - if (lookahead == '@') ADVANCE(95); - if (lookahead == '[') ADVANCE(86); - if (lookahead == '\\') SKIP(56) + ADVANCE_MAP( + '!', 22, + '#', 165, + '%', 98, + '&', 100, + '(', 68, + ')', 69, + '*', 71, + '+', 85, + ',', 70, + '-', 82, + '.', 67, + '/', 96, + '0', 137, + ':', 76, + ';', 166, + '<', 104, + '=', 92, + '>', 110, + '@', 95, + '[', 86, + ); + if (lookahead == '\\') SKIP(56); if (lookahead == ']') ADVANCE(87); if (lookahead == '^') ADVANCE(101); if (lookahead == '{') ADVANCE(88); if (lookahead == '|') ADVANCE(80); if (lookahead == '}') ADVANCE(89); if (lookahead == '~') ADVANCE(103); - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\f' || - lookahead == '\r' || + if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ' || - lookahead == 8203 || - lookahead == 8288 || - lookahead == 65279) SKIP(62) - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(137); - if (sym_identifier_character_set_1(lookahead)) ADVANCE(164); + lookahead == 0x200b || + lookahead == 0x2060 || + lookahead == 0xfeff) SKIP(62); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(138); + if (set_contains(sym_identifier_character_set_1, 668, lookahead)) ADVANCE(164); END_STATE(); case 63: if (eof) ADVANCE(65); - if (lookahead == '#') ADVANCE(165); - if (lookahead == '(') ADVANCE(68); - if (lookahead == '*') ADVANCE(72); - if (lookahead == '+') ADVANCE(84); - if (lookahead == '-') ADVANCE(81); - if (lookahead == '.') ADVANCE(20); - if (lookahead == '0') ADVANCE(138); - if (lookahead == '@') ADVANCE(94); - if (lookahead == '[') ADVANCE(86); - if (lookahead == '\\') SKIP(58) + ADVANCE_MAP( + '#', 165, + '(', 68, + '*', 72, + '+', 84, + '-', 81, + '.', 20, + '0', 137, + '@', 94, + '[', 86, + ); + if (lookahead == '\\') SKIP(58); if (lookahead == 'e') ADVANCE(162); if (lookahead == '{') ADVANCE(88); if (lookahead == '~') ADVANCE(103); - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\f' || - lookahead == '\r' || + if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ' || - lookahead == 8203 || - lookahead == 8288 || - lookahead == 65279) SKIP(63) - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(137); - if (sym_identifier_character_set_2(lookahead)) ADVANCE(164); + lookahead == 0x200b || + lookahead == 0x2060 || + lookahead == 0xfeff) SKIP(63); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(138); + if (set_contains(sym_identifier_character_set_1, 668, lookahead)) ADVANCE(164); END_STATE(); case 64: if (eof) ADVANCE(65); - if (lookahead == '#') ADVANCE(165); - if (lookahead == '(') ADVANCE(68); - if (lookahead == '*') ADVANCE(72); - if (lookahead == '+') ADVANCE(84); - if (lookahead == '-') ADVANCE(81); - if (lookahead == '.') ADVANCE(20); - if (lookahead == '0') ADVANCE(138); - if (lookahead == '@') ADVANCE(94); - if (lookahead == '[') ADVANCE(86); - if (lookahead == '\\') SKIP(60) + ADVANCE_MAP( + '#', 165, + '(', 68, + '*', 72, + '+', 84, + '-', 81, + '.', 20, + '0', 137, + '@', 94, + '[', 86, + ); + if (lookahead == '\\') SKIP(60); if (lookahead == 'e') ADVANCE(163); if (lookahead == '{') ADVANCE(88); if (lookahead == '~') ADVANCE(103); - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\f' || - lookahead == '\r' || + if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ' || - lookahead == 8203 || - lookahead == 8288 || - lookahead == 65279) SKIP(64) - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(137); - if (sym_identifier_character_set_2(lookahead)) ADVANCE(164); + lookahead == 0x200b || + lookahead == 0x2060 || + lookahead == 0xfeff) SKIP(64); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(138); + if (set_contains(sym_identifier_character_set_1, 668, lookahead)) ADVANCE(164); END_STATE(); case 65: ACCEPT_TOKEN(ts_builtin_sym_end); @@ -7702,11 +5289,11 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { case 77: ACCEPT_TOKEN(anon_sym_except); if (lookahead == '*') ADVANCE(79); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + if (set_contains(sym_identifier_character_set_2, 776, lookahead)) ADVANCE(164); END_STATE(); case 78: ACCEPT_TOKEN(anon_sym_except); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + if (set_contains(sym_identifier_character_set_2, 776, lookahead)) ADVANCE(164); END_STATE(); case 79: ACCEPT_TOKEN(anon_sym_except_STAR); @@ -7893,22 +5480,25 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ACCEPT_TOKEN(sym_escape_sequence); END_STATE(); case 131: - ACCEPT_TOKEN(sym__not_escape_sequence); - if (lookahead == '\n') ADVANCE(130); - if (lookahead == '\r') ADVANCE(7); - if (lookahead == 'N') ADVANCE(34); - if (lookahead == 'U') ADVANCE(51); - if (lookahead == 'u') ADVANCE(47); - if (lookahead == 'x') ADVANCE(45); - if (lookahead == '"' || - lookahead == '\'' || - lookahead == '\\' || - lookahead == 'a' || - lookahead == 'b' || - lookahead == 'f' || - lookahead == 'n' || - lookahead == 'r' || - ('t' <= lookahead && lookahead <= 'v')) ADVANCE(130); + ACCEPT_TOKEN(anon_sym_BSLASH); + ADVANCE_MAP( + '\n', 130, + '\r', 7, + 'N', 34, + 'U', 51, + 'u', 47, + 'x', 45, + '"', 130, + '\'', 130, + '\\', 130, + 'a', 130, + 'b', 130, + 'f', 130, + 'n', 130, + 'r', 130, + 't', 130, + 'v', 130, + ); if (('0' <= lookahead && lookahead <= '9')) ADVANCE(42); END_STATE(); case 132: @@ -7924,14 +5514,13 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == '#') ADVANCE(134); if (lookahead == '\\') ADVANCE(132); if (lookahead == '\t' || - lookahead == '\f' || - lookahead == '\r' || + (0x0b <= lookahead && lookahead <= '\r') || lookahead == ' ' || - lookahead == 8203 || - lookahead == 8288 || - lookahead == 65279) ADVANCE(133); + lookahead == 0x200b || + lookahead == 0x2060 || + lookahead == 0xfeff) ADVANCE(133); if (lookahead != 0 && - lookahead != '\n' && + (lookahead < '\t' || '\r' < lookahead) && lookahead != '{' && lookahead != '}') ADVANCE(134); END_STATE(); @@ -7950,33 +5539,37 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 137: ACCEPT_TOKEN(sym_integer); - if (lookahead == '.') ADVANCE(146); - if (lookahead == '_') ADVANCE(139); - if (lookahead == 'E' || - lookahead == 'e') ADVANCE(37); - if (lookahead == 'J' || - lookahead == 'L' || - lookahead == 'j' || - lookahead == 'l') ADVANCE(136); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(137); + ADVANCE_MAP( + '.', 146, + '_', 139, + 'B', 31, + 'b', 31, + 'E', 37, + 'e', 37, + 'O', 32, + 'o', 32, + 'X', 33, + 'x', 33, + 'J', 136, + 'L', 136, + 'j', 136, + 'l', 136, + ); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(138); END_STATE(); case 138: ACCEPT_TOKEN(sym_integer); - if (lookahead == '.') ADVANCE(146); - if (lookahead == 'B' || - lookahead == 'b') ADVANCE(31); - if (lookahead == 'O' || - lookahead == 'o') ADVANCE(32); - if (lookahead == 'X' || - lookahead == 'x') ADVANCE(33); - if (lookahead == '_') ADVANCE(139); - if (lookahead == 'E' || - lookahead == 'e') ADVANCE(37); - if (lookahead == 'J' || - lookahead == 'L' || - lookahead == 'j' || - lookahead == 'l') ADVANCE(136); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(137); + ADVANCE_MAP( + '.', 146, + '_', 139, + 'E', 37, + 'e', 37, + 'J', 136, + 'L', 136, + 'j', 136, + 'l', 136, + ); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(138); END_STATE(); case 139: ACCEPT_TOKEN(sym_integer); @@ -7987,7 +5580,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { lookahead == 'L' || lookahead == 'j' || lookahead == 'l') ADVANCE(136); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(137); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(138); END_STATE(); case 140: ACCEPT_TOKEN(sym_integer); @@ -8057,86 +5650,86 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { case 148: ACCEPT_TOKEN(sym_identifier); if (lookahead == '*') ADVANCE(79); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + if (set_contains(sym_identifier_character_set_2, 776, lookahead)) ADVANCE(164); END_STATE(); case 149: ACCEPT_TOKEN(sym_identifier); if (lookahead == 'c') ADVANCE(152); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + if (set_contains(sym_identifier_character_set_2, 776, lookahead)) ADVANCE(164); END_STATE(); case 150: ACCEPT_TOKEN(sym_identifier); if (lookahead == 'c') ADVANCE(153); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + if (set_contains(sym_identifier_character_set_2, 776, lookahead)) ADVANCE(164); END_STATE(); case 151: ACCEPT_TOKEN(sym_identifier); if (lookahead == 'c') ADVANCE(154); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + if (set_contains(sym_identifier_character_set_2, 776, lookahead)) ADVANCE(164); END_STATE(); case 152: ACCEPT_TOKEN(sym_identifier); if (lookahead == 'e') ADVANCE(155); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + if (set_contains(sym_identifier_character_set_2, 776, lookahead)) ADVANCE(164); END_STATE(); case 153: ACCEPT_TOKEN(sym_identifier); if (lookahead == 'e') ADVANCE(156); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + if (set_contains(sym_identifier_character_set_2, 776, lookahead)) ADVANCE(164); END_STATE(); case 154: ACCEPT_TOKEN(sym_identifier); if (lookahead == 'e') ADVANCE(157); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + if (set_contains(sym_identifier_character_set_2, 776, lookahead)) ADVANCE(164); END_STATE(); case 155: ACCEPT_TOKEN(sym_identifier); if (lookahead == 'p') ADVANCE(158); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + if (set_contains(sym_identifier_character_set_2, 776, lookahead)) ADVANCE(164); END_STATE(); case 156: ACCEPT_TOKEN(sym_identifier); if (lookahead == 'p') ADVANCE(159); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + if (set_contains(sym_identifier_character_set_2, 776, lookahead)) ADVANCE(164); END_STATE(); case 157: ACCEPT_TOKEN(sym_identifier); if (lookahead == 'p') ADVANCE(160); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + if (set_contains(sym_identifier_character_set_2, 776, lookahead)) ADVANCE(164); END_STATE(); case 158: ACCEPT_TOKEN(sym_identifier); if (lookahead == 't') ADVANCE(77); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + if (set_contains(sym_identifier_character_set_2, 776, lookahead)) ADVANCE(164); END_STATE(); case 159: ACCEPT_TOKEN(sym_identifier); - if (lookahead == 't') ADVANCE(78); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + if (lookahead == 't') ADVANCE(148); + if (set_contains(sym_identifier_character_set_2, 776, lookahead)) ADVANCE(164); END_STATE(); case 160: ACCEPT_TOKEN(sym_identifier); - if (lookahead == 't') ADVANCE(148); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + if (lookahead == 't') ADVANCE(78); + if (set_contains(sym_identifier_character_set_2, 776, lookahead)) ADVANCE(164); END_STATE(); case 161: ACCEPT_TOKEN(sym_identifier); if (lookahead == 'x') ADVANCE(149); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + if (set_contains(sym_identifier_character_set_2, 776, lookahead)) ADVANCE(164); END_STATE(); case 162: ACCEPT_TOKEN(sym_identifier); if (lookahead == 'x') ADVANCE(150); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + if (set_contains(sym_identifier_character_set_2, 776, lookahead)) ADVANCE(164); END_STATE(); case 163: ACCEPT_TOKEN(sym_identifier); if (lookahead == 'x') ADVANCE(151); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + if (set_contains(sym_identifier_character_set_2, 776, lookahead)) ADVANCE(164); END_STATE(); case 164: ACCEPT_TOKEN(sym_identifier); - if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + if (set_contains(sym_identifier_character_set_2, 776, lookahead)) ADVANCE(164); END_STATE(); case 165: ACCEPT_TOKEN(sym_comment); @@ -8144,7 +5737,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { lookahead != '\n') ADVANCE(165); END_STATE(); case 166: - ACCEPT_TOKEN(sym__semicolon); + ACCEPT_TOKEN(anon_sym_SEMI); END_STATE(); default: return false; @@ -8159,7 +5752,7 @@ static bool ts_lex_keywords(TSLexer *lexer, TSStateId state) { if (lookahead == 'F') ADVANCE(1); if (lookahead == 'N') ADVANCE(2); if (lookahead == 'T') ADVANCE(3); - if (lookahead == '\\') SKIP(4) + if (lookahead == '\\') SKIP(4); if (lookahead == '_') ADVANCE(5); if (lookahead == 'a') ADVANCE(6); if (lookahead == 'b') ADVANCE(7); @@ -8178,14 +5771,11 @@ static bool ts_lex_keywords(TSLexer *lexer, TSStateId state) { if (lookahead == 't') ADVANCE(20); if (lookahead == 'w') ADVANCE(21); if (lookahead == 'y') ADVANCE(22); - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\f' || - lookahead == '\r' || + if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ' || - lookahead == 8203 || - lookahead == 8288 || - lookahead == 65279) SKIP(0) + lookahead == 0x200b || + lookahead == 0x2060 || + lookahead == 0xfeff) SKIP(0); END_STATE(); case 1: if (lookahead == 'a') ADVANCE(23); @@ -8197,8 +5787,8 @@ static bool ts_lex_keywords(TSLexer *lexer, TSStateId state) { if (lookahead == 'r') ADVANCE(25); END_STATE(); case 4: - if (lookahead == '\n') SKIP(0) - if (lookahead == '\r') SKIP(26) + if (lookahead == '\n') SKIP(0); + if (lookahead == '\r') SKIP(26); END_STATE(); case 5: ACCEPT_TOKEN(sym_match_wildcard_pattern); @@ -8279,7 +5869,7 @@ static bool ts_lex_keywords(TSLexer *lexer, TSStateId state) { if (lookahead == 'u') ADVANCE(61); END_STATE(); case 26: - if (lookahead == '\n') SKIP(0) + if (lookahead == '\n') SKIP(0); END_STATE(); case 27: if (lookahead == 'f') ADVANCE(62); @@ -8751,14 +6341,14 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [57] = {.lex_state = 62, .external_lex_state = 3}, [58] = {.lex_state = 62, .external_lex_state = 3}, [59] = {.lex_state = 62, .external_lex_state = 3}, - [60] = {.lex_state = 62, .external_lex_state = 3}, + [60] = {.lex_state = 62, .external_lex_state = 2}, [61] = {.lex_state = 62, .external_lex_state = 3}, - [62] = {.lex_state = 62, .external_lex_state = 3}, + [62] = {.lex_state = 62, .external_lex_state = 2}, [63] = {.lex_state = 62, .external_lex_state = 3}, - [64] = {.lex_state = 62, .external_lex_state = 2}, + [64] = {.lex_state = 62, .external_lex_state = 3}, [65] = {.lex_state = 62, .external_lex_state = 3}, [66] = {.lex_state = 62, .external_lex_state = 3}, - [67] = {.lex_state = 62, .external_lex_state = 2}, + [67] = {.lex_state = 62, .external_lex_state = 3}, [68] = {.lex_state = 62, .external_lex_state = 3}, [69] = {.lex_state = 62, .external_lex_state = 3}, [70] = {.lex_state = 62, .external_lex_state = 4}, @@ -8766,7 +6356,7 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [72] = {.lex_state = 62, .external_lex_state = 5}, [73] = {.lex_state = 62, .external_lex_state = 5}, [74] = {.lex_state = 62, .external_lex_state = 5}, - [75] = {.lex_state = 62, .external_lex_state = 4}, + [75] = {.lex_state = 62, .external_lex_state = 5}, [76] = {.lex_state = 62, .external_lex_state = 5}, [77] = {.lex_state = 62, .external_lex_state = 5}, [78] = {.lex_state = 62, .external_lex_state = 5}, @@ -8778,7 +6368,7 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [84] = {.lex_state = 62, .external_lex_state = 5}, [85] = {.lex_state = 62, .external_lex_state = 5}, [86] = {.lex_state = 62, .external_lex_state = 5}, - [87] = {.lex_state = 62, .external_lex_state = 5}, + [87] = {.lex_state = 62, .external_lex_state = 4}, [88] = {.lex_state = 62, .external_lex_state = 5}, [89] = {.lex_state = 62, .external_lex_state = 5}, [90] = {.lex_state = 62, .external_lex_state = 5}, @@ -8822,8 +6412,8 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [128] = {.lex_state = 62, .external_lex_state = 5}, [129] = {.lex_state = 62, .external_lex_state = 5}, [130] = {.lex_state = 62, .external_lex_state = 5}, - [131] = {.lex_state = 62, .external_lex_state = 4}, - [132] = {.lex_state = 62, .external_lex_state = 2}, + [131] = {.lex_state = 62, .external_lex_state = 2}, + [132] = {.lex_state = 62, .external_lex_state = 4}, [133] = {.lex_state = 62, .external_lex_state = 4}, [134] = {.lex_state = 62, .external_lex_state = 4}, [135] = {.lex_state = 62, .external_lex_state = 4}, @@ -8856,24 +6446,24 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [162] = {.lex_state = 62, .external_lex_state = 2}, [163] = {.lex_state = 62, .external_lex_state = 2}, [164] = {.lex_state = 62, .external_lex_state = 2}, - [165] = {.lex_state = 16, .external_lex_state = 2}, + [165] = {.lex_state = 62, .external_lex_state = 2}, [166] = {.lex_state = 62, .external_lex_state = 2}, [167] = {.lex_state = 16, .external_lex_state = 2}, [168] = {.lex_state = 16, .external_lex_state = 2}, - [169] = {.lex_state = 62, .external_lex_state = 2}, - [170] = {.lex_state = 62, .external_lex_state = 2}, + [169] = {.lex_state = 16, .external_lex_state = 2}, + [170] = {.lex_state = 16, .external_lex_state = 2}, [171] = {.lex_state = 16, .external_lex_state = 2}, - [172] = {.lex_state = 16, .external_lex_state = 2}, + [172] = {.lex_state = 62, .external_lex_state = 2}, [173] = {.lex_state = 62, .external_lex_state = 2}, [174] = {.lex_state = 62, .external_lex_state = 2}, [175] = {.lex_state = 62, .external_lex_state = 2}, [176] = {.lex_state = 62, .external_lex_state = 2}, - [177] = {.lex_state = 62, .external_lex_state = 2}, + [177] = {.lex_state = 62, .external_lex_state = 4}, [178] = {.lex_state = 62, .external_lex_state = 2}, [179] = {.lex_state = 62, .external_lex_state = 2}, - [180] = {.lex_state = 62, .external_lex_state = 4}, - [181] = {.lex_state = 62, .external_lex_state = 4}, - [182] = {.lex_state = 62, .external_lex_state = 2}, + [180] = {.lex_state = 62, .external_lex_state = 2}, + [181] = {.lex_state = 62, .external_lex_state = 2}, + [182] = {.lex_state = 62, .external_lex_state = 4}, [183] = {.lex_state = 62, .external_lex_state = 2}, [184] = {.lex_state = 62, .external_lex_state = 2}, [185] = {.lex_state = 62, .external_lex_state = 2}, @@ -8882,13 +6472,13 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [188] = {.lex_state = 62, .external_lex_state = 2}, [189] = {.lex_state = 62, .external_lex_state = 2}, [190] = {.lex_state = 62, .external_lex_state = 2}, - [191] = {.lex_state = 62, .external_lex_state = 2}, - [192] = {.lex_state = 62, .external_lex_state = 2}, + [191] = {.lex_state = 62, .external_lex_state = 4}, + [192] = {.lex_state = 62, .external_lex_state = 4}, [193] = {.lex_state = 62, .external_lex_state = 2}, [194] = {.lex_state = 62, .external_lex_state = 2}, - [195] = {.lex_state = 62, .external_lex_state = 4}, + [195] = {.lex_state = 62, .external_lex_state = 2}, [196] = {.lex_state = 62, .external_lex_state = 2}, - [197] = {.lex_state = 62, .external_lex_state = 2}, + [197] = {.lex_state = 62, .external_lex_state = 4}, [198] = {.lex_state = 62, .external_lex_state = 2}, [199] = {.lex_state = 62, .external_lex_state = 2}, [200] = {.lex_state = 62, .external_lex_state = 2}, @@ -8896,12 +6486,12 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [202] = {.lex_state = 62, .external_lex_state = 2}, [203] = {.lex_state = 62, .external_lex_state = 2}, [204] = {.lex_state = 62, .external_lex_state = 2}, - [205] = {.lex_state = 62, .external_lex_state = 4}, + [205] = {.lex_state = 62, .external_lex_state = 2}, [206] = {.lex_state = 62, .external_lex_state = 2}, [207] = {.lex_state = 62, .external_lex_state = 2}, [208] = {.lex_state = 62, .external_lex_state = 2}, [209] = {.lex_state = 62, .external_lex_state = 2}, - [210] = {.lex_state = 62, .external_lex_state = 4}, + [210] = {.lex_state = 62, .external_lex_state = 2}, [211] = {.lex_state = 62, .external_lex_state = 2}, [212] = {.lex_state = 62, .external_lex_state = 2}, [213] = {.lex_state = 62, .external_lex_state = 2}, @@ -8910,180 +6500,180 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [216] = {.lex_state = 62, .external_lex_state = 2}, [217] = {.lex_state = 62, .external_lex_state = 2}, [218] = {.lex_state = 15}, - [219] = {.lex_state = 15}, + [219] = {.lex_state = 62, .external_lex_state = 2}, [220] = {.lex_state = 15}, - [221] = {.lex_state = 15}, + [221] = {.lex_state = 62, .external_lex_state = 2}, [222] = {.lex_state = 62, .external_lex_state = 2}, [223] = {.lex_state = 15}, - [224] = {.lex_state = 62, .external_lex_state = 2}, - [225] = {.lex_state = 62, .external_lex_state = 2}, + [224] = {.lex_state = 15}, + [225] = {.lex_state = 15}, [226] = {.lex_state = 15}, [227] = {.lex_state = 15}, - [228] = {.lex_state = 63, .external_lex_state = 2}, - [229] = {.lex_state = 64, .external_lex_state = 3}, - [230] = {.lex_state = 62, .external_lex_state = 2}, + [228] = {.lex_state = 63, .external_lex_state = 3}, + [229] = {.lex_state = 62, .external_lex_state = 2}, + [230] = {.lex_state = 64, .external_lex_state = 3}, [231] = {.lex_state = 62, .external_lex_state = 2}, [232] = {.lex_state = 63, .external_lex_state = 3}, - [233] = {.lex_state = 62, .external_lex_state = 2}, - [234] = {.lex_state = 64, .external_lex_state = 3}, - [235] = {.lex_state = 62, .external_lex_state = 2}, - [236] = {.lex_state = 62, .external_lex_state = 2}, - [237] = {.lex_state = 64, .external_lex_state = 2}, - [238] = {.lex_state = 63, .external_lex_state = 2}, + [233] = {.lex_state = 64, .external_lex_state = 2}, + [234] = {.lex_state = 63, .external_lex_state = 2}, + [235] = {.lex_state = 63, .external_lex_state = 2}, + [236] = {.lex_state = 64, .external_lex_state = 2}, + [237] = {.lex_state = 62, .external_lex_state = 2}, + [238] = {.lex_state = 62, .external_lex_state = 2}, [239] = {.lex_state = 62, .external_lex_state = 2}, - [240] = {.lex_state = 64, .external_lex_state = 2}, - [241] = {.lex_state = 63, .external_lex_state = 3}, - [242] = {.lex_state = 62, .external_lex_state = 2}, - [243] = {.lex_state = 62, .external_lex_state = 2}, - [244] = {.lex_state = 62, .external_lex_state = 2}, - [245] = {.lex_state = 62, .external_lex_state = 2}, - [246] = {.lex_state = 62, .external_lex_state = 2}, - [247] = {.lex_state = 14, .external_lex_state = 6}, - [248] = {.lex_state = 62, .external_lex_state = 2}, - [249] = {.lex_state = 62, .external_lex_state = 2}, - [250] = {.lex_state = 62, .external_lex_state = 2}, - [251] = {.lex_state = 62, .external_lex_state = 2}, + [240] = {.lex_state = 16, .external_lex_state = 2}, + [241] = {.lex_state = 16, .external_lex_state = 2}, + [242] = {.lex_state = 64, .external_lex_state = 3}, + [243] = {.lex_state = 16, .external_lex_state = 2}, + [244] = {.lex_state = 16, .external_lex_state = 2}, + [245] = {.lex_state = 16, .external_lex_state = 2}, + [246] = {.lex_state = 16, .external_lex_state = 2}, + [247] = {.lex_state = 62, .external_lex_state = 2}, + [248] = {.lex_state = 16, .external_lex_state = 2}, + [249] = {.lex_state = 16, .external_lex_state = 2}, + [250] = {.lex_state = 16, .external_lex_state = 2}, + [251] = {.lex_state = 16, .external_lex_state = 2}, [252] = {.lex_state = 62, .external_lex_state = 2}, [253] = {.lex_state = 62, .external_lex_state = 2}, - [254] = {.lex_state = 14, .external_lex_state = 6}, - [255] = {.lex_state = 16, .external_lex_state = 2}, + [254] = {.lex_state = 16, .external_lex_state = 2}, + [255] = {.lex_state = 62, .external_lex_state = 2}, [256] = {.lex_state = 16, .external_lex_state = 2}, - [257] = {.lex_state = 16, .external_lex_state = 2}, - [258] = {.lex_state = 62, .external_lex_state = 3}, - [259] = {.lex_state = 16, .external_lex_state = 2}, - [260] = {.lex_state = 16, .external_lex_state = 2}, - [261] = {.lex_state = 16, .external_lex_state = 2}, - [262] = {.lex_state = 16, .external_lex_state = 2}, - [263] = {.lex_state = 62, .external_lex_state = 3}, - [264] = {.lex_state = 16, .external_lex_state = 2}, - [265] = {.lex_state = 62, .external_lex_state = 3}, - [266] = {.lex_state = 63, .external_lex_state = 3}, - [267] = {.lex_state = 64, .external_lex_state = 3}, - [268] = {.lex_state = 62, .external_lex_state = 2}, - [269] = {.lex_state = 16, .external_lex_state = 2}, - [270] = {.lex_state = 64, .external_lex_state = 2}, - [271] = {.lex_state = 63, .external_lex_state = 2}, + [257] = {.lex_state = 62, .external_lex_state = 2}, + [258] = {.lex_state = 16, .external_lex_state = 2}, + [259] = {.lex_state = 62, .external_lex_state = 2}, + [260] = {.lex_state = 62, .external_lex_state = 2}, + [261] = {.lex_state = 62, .external_lex_state = 2}, + [262] = {.lex_state = 62, .external_lex_state = 2}, + [263] = {.lex_state = 62, .external_lex_state = 2}, + [264] = {.lex_state = 14, .external_lex_state = 6}, + [265] = {.lex_state = 62, .external_lex_state = 2}, + [266] = {.lex_state = 62, .external_lex_state = 2}, + [267] = {.lex_state = 14, .external_lex_state = 6}, + [268] = {.lex_state = 64, .external_lex_state = 3}, + [269] = {.lex_state = 62, .external_lex_state = 2}, + [270] = {.lex_state = 16, .external_lex_state = 2}, + [271] = {.lex_state = 63, .external_lex_state = 3}, [272] = {.lex_state = 62, .external_lex_state = 3}, - [273] = {.lex_state = 16, .external_lex_state = 2}, - [274] = {.lex_state = 16, .external_lex_state = 2}, + [273] = {.lex_state = 62, .external_lex_state = 3}, + [274] = {.lex_state = 62, .external_lex_state = 2}, [275] = {.lex_state = 62, .external_lex_state = 2}, - [276] = {.lex_state = 62, .external_lex_state = 2}, - [277] = {.lex_state = 62, .external_lex_state = 2}, - [278] = {.lex_state = 14, .external_lex_state = 4}, - [279] = {.lex_state = 62, .external_lex_state = 2}, + [276] = {.lex_state = 62, .external_lex_state = 3}, + [277] = {.lex_state = 14, .external_lex_state = 4}, + [278] = {.lex_state = 16, .external_lex_state = 2}, + [279] = {.lex_state = 62, .external_lex_state = 3}, [280] = {.lex_state = 62, .external_lex_state = 2}, [281] = {.lex_state = 62, .external_lex_state = 2}, - [282] = {.lex_state = 62, .external_lex_state = 2}, - [283] = {.lex_state = 62, .external_lex_state = 2}, - [284] = {.lex_state = 14, .external_lex_state = 6}, - [285] = {.lex_state = 62, .external_lex_state = 2}, - [286] = {.lex_state = 62, .external_lex_state = 2}, + [282] = {.lex_state = 64, .external_lex_state = 2}, + [283] = {.lex_state = 63, .external_lex_state = 2}, + [284] = {.lex_state = 62, .external_lex_state = 2}, + [285] = {.lex_state = 62, .external_lex_state = 4}, + [286] = {.lex_state = 62, .external_lex_state = 4}, [287] = {.lex_state = 62, .external_lex_state = 2}, - [288] = {.lex_state = 62, .external_lex_state = 3}, + [288] = {.lex_state = 62, .external_lex_state = 2}, [289] = {.lex_state = 62, .external_lex_state = 2}, [290] = {.lex_state = 62, .external_lex_state = 2}, [291] = {.lex_state = 62, .external_lex_state = 3}, [292] = {.lex_state = 62, .external_lex_state = 2}, [293] = {.lex_state = 62, .external_lex_state = 2}, [294] = {.lex_state = 62, .external_lex_state = 2}, - [295] = {.lex_state = 62, .external_lex_state = 4}, + [295] = {.lex_state = 62, .external_lex_state = 2}, [296] = {.lex_state = 62, .external_lex_state = 2}, - [297] = {.lex_state = 62, .external_lex_state = 2}, - [298] = {.lex_state = 62, .external_lex_state = 2}, - [299] = {.lex_state = 16, .external_lex_state = 2}, - [300] = {.lex_state = 62, .external_lex_state = 4}, - [301] = {.lex_state = 16, .external_lex_state = 2}, - [302] = {.lex_state = 62, .external_lex_state = 2}, - [303] = {.lex_state = 62, .external_lex_state = 4}, - [304] = {.lex_state = 62, .external_lex_state = 4}, - [305] = {.lex_state = 62, .external_lex_state = 2}, + [297] = {.lex_state = 14, .external_lex_state = 6}, + [298] = {.lex_state = 62, .external_lex_state = 4}, + [299] = {.lex_state = 62, .external_lex_state = 2}, + [300] = {.lex_state = 62, .external_lex_state = 2}, + [301] = {.lex_state = 62, .external_lex_state = 4}, + [302] = {.lex_state = 62, .external_lex_state = 3}, + [303] = {.lex_state = 62, .external_lex_state = 2}, + [304] = {.lex_state = 62, .external_lex_state = 2}, + [305] = {.lex_state = 62, .external_lex_state = 3}, [306] = {.lex_state = 62, .external_lex_state = 2}, - [307] = {.lex_state = 62, .external_lex_state = 3}, - [308] = {.lex_state = 62, .external_lex_state = 3}, + [307] = {.lex_state = 62, .external_lex_state = 2}, + [308] = {.lex_state = 62, .external_lex_state = 2}, [309] = {.lex_state = 62, .external_lex_state = 2}, - [310] = {.lex_state = 16, .external_lex_state = 2}, - [311] = {.lex_state = 62, .external_lex_state = 3}, - [312] = {.lex_state = 62, .external_lex_state = 2}, + [310] = {.lex_state = 62, .external_lex_state = 2}, + [311] = {.lex_state = 62, .external_lex_state = 2}, + [312] = {.lex_state = 62, .external_lex_state = 3}, [313] = {.lex_state = 62, .external_lex_state = 2}, - [314] = {.lex_state = 16, .external_lex_state = 2}, + [314] = {.lex_state = 62, .external_lex_state = 3}, [315] = {.lex_state = 62, .external_lex_state = 3}, - [316] = {.lex_state = 64, .external_lex_state = 3}, - [317] = {.lex_state = 63, .external_lex_state = 3}, + [316] = {.lex_state = 62, .external_lex_state = 2}, + [317] = {.lex_state = 15, .external_lex_state = 6}, [318] = {.lex_state = 64, .external_lex_state = 2}, - [319] = {.lex_state = 63, .external_lex_state = 2}, - [320] = {.lex_state = 63, .external_lex_state = 2}, - [321] = {.lex_state = 62, .external_lex_state = 2}, - [322] = {.lex_state = 62, .external_lex_state = 2}, - [323] = {.lex_state = 62, .external_lex_state = 2}, + [319] = {.lex_state = 64, .external_lex_state = 3}, + [320] = {.lex_state = 64, .external_lex_state = 3}, + [321] = {.lex_state = 64, .external_lex_state = 3}, + [322] = {.lex_state = 64, .external_lex_state = 3}, + [323] = {.lex_state = 64, .external_lex_state = 2}, [324] = {.lex_state = 62, .external_lex_state = 2}, [325] = {.lex_state = 63, .external_lex_state = 2}, - [326] = {.lex_state = 63, .external_lex_state = 2}, - [327] = {.lex_state = 64, .external_lex_state = 2}, - [328] = {.lex_state = 63, .external_lex_state = 2}, - [329] = {.lex_state = 64, .external_lex_state = 2}, - [330] = {.lex_state = 14, .external_lex_state = 6}, - [331] = {.lex_state = 64, .external_lex_state = 2}, - [332] = {.lex_state = 63, .external_lex_state = 2}, + [326] = {.lex_state = 62, .external_lex_state = 3}, + [327] = {.lex_state = 15, .external_lex_state = 6}, + [328] = {.lex_state = 14}, + [329] = {.lex_state = 15, .external_lex_state = 6}, + [330] = {.lex_state = 15, .external_lex_state = 6}, + [331] = {.lex_state = 63, .external_lex_state = 2}, + [332] = {.lex_state = 63, .external_lex_state = 3}, [333] = {.lex_state = 63, .external_lex_state = 2}, - [334] = {.lex_state = 14, .external_lex_state = 6}, - [335] = {.lex_state = 16, .external_lex_state = 2}, - [336] = {.lex_state = 15, .external_lex_state = 6}, - [337] = {.lex_state = 15, .external_lex_state = 6}, - [338] = {.lex_state = 14}, - [339] = {.lex_state = 14}, - [340] = {.lex_state = 63, .external_lex_state = 2}, - [341] = {.lex_state = 62, .external_lex_state = 2}, - [342] = {.lex_state = 15, .external_lex_state = 6}, - [343] = {.lex_state = 15, .external_lex_state = 6}, - [344] = {.lex_state = 15, .external_lex_state = 6}, - [345] = {.lex_state = 62, .external_lex_state = 3}, - [346] = {.lex_state = 62, .external_lex_state = 2}, + [334] = {.lex_state = 15, .external_lex_state = 6}, + [335] = {.lex_state = 64, .external_lex_state = 2}, + [336] = {.lex_state = 63, .external_lex_state = 2}, + [337] = {.lex_state = 64, .external_lex_state = 2}, + [338] = {.lex_state = 64, .external_lex_state = 3}, + [339] = {.lex_state = 63, .external_lex_state = 3}, + [340] = {.lex_state = 63, .external_lex_state = 3}, + [341] = {.lex_state = 64, .external_lex_state = 2}, + [342] = {.lex_state = 63, .external_lex_state = 3}, + [343] = {.lex_state = 62, .external_lex_state = 2}, + [344] = {.lex_state = 62, .external_lex_state = 2}, + [345] = {.lex_state = 62, .external_lex_state = 2}, + [346] = {.lex_state = 64, .external_lex_state = 2}, [347] = {.lex_state = 62, .external_lex_state = 2}, - [348] = {.lex_state = 62, .external_lex_state = 2}, - [349] = {.lex_state = 62, .external_lex_state = 3}, - [350] = {.lex_state = 62, .external_lex_state = 2}, - [351] = {.lex_state = 62, .external_lex_state = 2}, - [352] = {.lex_state = 15, .external_lex_state = 6}, - [353] = {.lex_state = 63, .external_lex_state = 3}, - [354] = {.lex_state = 64, .external_lex_state = 3}, + [348] = {.lex_state = 64, .external_lex_state = 3}, + [349] = {.lex_state = 63, .external_lex_state = 3}, + [350] = {.lex_state = 63, .external_lex_state = 3}, + [351] = {.lex_state = 15, .external_lex_state = 6}, + [352] = {.lex_state = 62, .external_lex_state = 3}, + [353] = {.lex_state = 62, .external_lex_state = 2}, + [354] = {.lex_state = 62, .external_lex_state = 2}, [355] = {.lex_state = 64, .external_lex_state = 3}, - [356] = {.lex_state = 64, .external_lex_state = 3}, - [357] = {.lex_state = 63, .external_lex_state = 3}, - [358] = {.lex_state = 64, .external_lex_state = 3}, + [356] = {.lex_state = 14}, + [357] = {.lex_state = 64, .external_lex_state = 3}, + [358] = {.lex_state = 63, .external_lex_state = 3}, [359] = {.lex_state = 64, .external_lex_state = 2}, - [360] = {.lex_state = 63, .external_lex_state = 3}, + [360] = {.lex_state = 62, .external_lex_state = 2}, [361] = {.lex_state = 62, .external_lex_state = 2}, - [362] = {.lex_state = 64, .external_lex_state = 2}, - [363] = {.lex_state = 64, .external_lex_state = 3}, + [362] = {.lex_state = 62, .external_lex_state = 2}, + [363] = {.lex_state = 64, .external_lex_state = 2}, [364] = {.lex_state = 62, .external_lex_state = 2}, - [365] = {.lex_state = 15, .external_lex_state = 6}, - [366] = {.lex_state = 63, .external_lex_state = 3}, - [367] = {.lex_state = 64, .external_lex_state = 2}, - [368] = {.lex_state = 62, .external_lex_state = 2}, - [369] = {.lex_state = 63, .external_lex_state = 2}, - [370] = {.lex_state = 63, .external_lex_state = 3}, - [371] = {.lex_state = 64, .external_lex_state = 2}, - [372] = {.lex_state = 64, .external_lex_state = 3}, - [373] = {.lex_state = 63, .external_lex_state = 3}, + [365] = {.lex_state = 63, .external_lex_state = 2}, + [366] = {.lex_state = 64, .external_lex_state = 3}, + [367] = {.lex_state = 14, .external_lex_state = 6}, + [368] = {.lex_state = 63, .external_lex_state = 3}, + [369] = {.lex_state = 64, .external_lex_state = 2}, + [370] = {.lex_state = 63, .external_lex_state = 2}, + [371] = {.lex_state = 15, .external_lex_state = 6}, + [372] = {.lex_state = 64, .external_lex_state = 2}, + [373] = {.lex_state = 63, .external_lex_state = 2}, [374] = {.lex_state = 64, .external_lex_state = 3}, - [375] = {.lex_state = 63, .external_lex_state = 2}, - [376] = {.lex_state = 64, .external_lex_state = 2}, - [377] = {.lex_state = 63, .external_lex_state = 3}, - [378] = {.lex_state = 63, .external_lex_state = 3}, + [375] = {.lex_state = 62, .external_lex_state = 2}, + [376] = {.lex_state = 63, .external_lex_state = 2}, + [377] = {.lex_state = 64, .external_lex_state = 2}, + [378] = {.lex_state = 64, .external_lex_state = 3}, [379] = {.lex_state = 63, .external_lex_state = 3}, [380] = {.lex_state = 62, .external_lex_state = 2}, - [381] = {.lex_state = 63, .external_lex_state = 3}, + [381] = {.lex_state = 16, .external_lex_state = 2}, [382] = {.lex_state = 63, .external_lex_state = 2}, [383] = {.lex_state = 16, .external_lex_state = 2}, - [384] = {.lex_state = 64, .external_lex_state = 3}, - [385] = {.lex_state = 62, .external_lex_state = 2}, - [386] = {.lex_state = 62, .external_lex_state = 2}, + [384] = {.lex_state = 62, .external_lex_state = 2}, + [385] = {.lex_state = 14, .external_lex_state = 6}, + [386] = {.lex_state = 62, .external_lex_state = 3}, [387] = {.lex_state = 62, .external_lex_state = 2}, [388] = {.lex_state = 62, .external_lex_state = 2}, [389] = {.lex_state = 62, .external_lex_state = 2}, [390] = {.lex_state = 62, .external_lex_state = 2}, [391] = {.lex_state = 62, .external_lex_state = 2}, - [392] = {.lex_state = 62, .external_lex_state = 2}, + [392] = {.lex_state = 15}, [393] = {.lex_state = 62, .external_lex_state = 2}, [394] = {.lex_state = 62, .external_lex_state = 2}, [395] = {.lex_state = 62, .external_lex_state = 2}, @@ -9094,7 +6684,7 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [400] = {.lex_state = 62, .external_lex_state = 2}, [401] = {.lex_state = 62, .external_lex_state = 2}, [402] = {.lex_state = 62, .external_lex_state = 2}, - [403] = {.lex_state = 62, .external_lex_state = 3}, + [403] = {.lex_state = 62, .external_lex_state = 2}, [404] = {.lex_state = 62, .external_lex_state = 2}, [405] = {.lex_state = 62, .external_lex_state = 2}, [406] = {.lex_state = 62, .external_lex_state = 2}, @@ -9104,49 +6694,49 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [410] = {.lex_state = 62, .external_lex_state = 2}, [411] = {.lex_state = 62, .external_lex_state = 2}, [412] = {.lex_state = 62, .external_lex_state = 2}, - [413] = {.lex_state = 62, .external_lex_state = 3}, - [414] = {.lex_state = 62, .external_lex_state = 3}, + [413] = {.lex_state = 62, .external_lex_state = 2}, + [414] = {.lex_state = 62, .external_lex_state = 2}, [415] = {.lex_state = 62, .external_lex_state = 2}, [416] = {.lex_state = 62, .external_lex_state = 2}, [417] = {.lex_state = 62, .external_lex_state = 2}, - [418] = {.lex_state = 62, .external_lex_state = 3}, + [418] = {.lex_state = 62, .external_lex_state = 2}, [419] = {.lex_state = 62, .external_lex_state = 2}, - [420] = {.lex_state = 62, .external_lex_state = 3}, - [421] = {.lex_state = 62, .external_lex_state = 3}, + [420] = {.lex_state = 62, .external_lex_state = 2}, + [421] = {.lex_state = 62, .external_lex_state = 2}, [422] = {.lex_state = 62, .external_lex_state = 2}, - [423] = {.lex_state = 62, .external_lex_state = 2}, + [423] = {.lex_state = 15, .external_lex_state = 6}, [424] = {.lex_state = 62, .external_lex_state = 2}, [425] = {.lex_state = 62, .external_lex_state = 2}, [426] = {.lex_state = 62, .external_lex_state = 2}, - [427] = {.lex_state = 62, .external_lex_state = 2}, - [428] = {.lex_state = 62, .external_lex_state = 3}, + [427] = {.lex_state = 62, .external_lex_state = 3}, + [428] = {.lex_state = 62, .external_lex_state = 2}, [429] = {.lex_state = 62, .external_lex_state = 2}, [430] = {.lex_state = 62, .external_lex_state = 2}, - [431] = {.lex_state = 15, .external_lex_state = 6}, - [432] = {.lex_state = 62, .external_lex_state = 3}, + [431] = {.lex_state = 62, .external_lex_state = 2}, + [432] = {.lex_state = 62, .external_lex_state = 2}, [433] = {.lex_state = 62, .external_lex_state = 2}, [434] = {.lex_state = 62, .external_lex_state = 2}, [435] = {.lex_state = 62, .external_lex_state = 2}, [436] = {.lex_state = 62, .external_lex_state = 2}, [437] = {.lex_state = 62, .external_lex_state = 2}, [438] = {.lex_state = 62, .external_lex_state = 2}, - [439] = {.lex_state = 62, .external_lex_state = 2}, + [439] = {.lex_state = 62, .external_lex_state = 3}, [440] = {.lex_state = 62, .external_lex_state = 2}, - [441] = {.lex_state = 15, .external_lex_state = 6}, + [441] = {.lex_state = 62, .external_lex_state = 2}, [442] = {.lex_state = 62, .external_lex_state = 2}, [443] = {.lex_state = 62, .external_lex_state = 2}, - [444] = {.lex_state = 62, .external_lex_state = 2}, - [445] = {.lex_state = 62, .external_lex_state = 2}, + [444] = {.lex_state = 15, .external_lex_state = 6}, + [445] = {.lex_state = 62, .external_lex_state = 3}, [446] = {.lex_state = 62, .external_lex_state = 2}, [447] = {.lex_state = 62, .external_lex_state = 2}, [448] = {.lex_state = 62, .external_lex_state = 2}, - [449] = {.lex_state = 15}, + [449] = {.lex_state = 62, .external_lex_state = 2}, [450] = {.lex_state = 62, .external_lex_state = 2}, [451] = {.lex_state = 62, .external_lex_state = 2}, [452] = {.lex_state = 62, .external_lex_state = 2}, - [453] = {.lex_state = 62, .external_lex_state = 2}, + [453] = {.lex_state = 62, .external_lex_state = 3}, [454] = {.lex_state = 62, .external_lex_state = 3}, - [455] = {.lex_state = 62, .external_lex_state = 2}, + [455] = {.lex_state = 62, .external_lex_state = 3}, [456] = {.lex_state = 62, .external_lex_state = 2}, [457] = {.lex_state = 62, .external_lex_state = 2}, [458] = {.lex_state = 62, .external_lex_state = 2}, @@ -9154,155 +6744,155 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [460] = {.lex_state = 62, .external_lex_state = 2}, [461] = {.lex_state = 62, .external_lex_state = 2}, [462] = {.lex_state = 62, .external_lex_state = 2}, - [463] = {.lex_state = 62, .external_lex_state = 2}, - [464] = {.lex_state = 62, .external_lex_state = 3}, + [463] = {.lex_state = 62, .external_lex_state = 3}, + [464] = {.lex_state = 62, .external_lex_state = 2}, [465] = {.lex_state = 62, .external_lex_state = 2}, [466] = {.lex_state = 62, .external_lex_state = 2}, [467] = {.lex_state = 62, .external_lex_state = 2}, [468] = {.lex_state = 62, .external_lex_state = 2}, [469] = {.lex_state = 62, .external_lex_state = 2}, - [470] = {.lex_state = 62, .external_lex_state = 2}, + [470] = {.lex_state = 15, .external_lex_state = 6}, [471] = {.lex_state = 62, .external_lex_state = 2}, [472] = {.lex_state = 62, .external_lex_state = 2}, [473] = {.lex_state = 62, .external_lex_state = 2}, [474] = {.lex_state = 62, .external_lex_state = 2}, - [475] = {.lex_state = 15, .external_lex_state = 6}, - [476] = {.lex_state = 62, .external_lex_state = 2}, + [475] = {.lex_state = 62, .external_lex_state = 2}, + [476] = {.lex_state = 62, .external_lex_state = 3}, [477] = {.lex_state = 62, .external_lex_state = 2}, [478] = {.lex_state = 62, .external_lex_state = 3}, [479] = {.lex_state = 62, .external_lex_state = 2}, [480] = {.lex_state = 62, .external_lex_state = 2}, [481] = {.lex_state = 62, .external_lex_state = 2}, - [482] = {.lex_state = 62, .external_lex_state = 2}, + [482] = {.lex_state = 62, .external_lex_state = 3}, [483] = {.lex_state = 62, .external_lex_state = 2}, [484] = {.lex_state = 62, .external_lex_state = 2}, - [485] = {.lex_state = 62, .external_lex_state = 3}, - [486] = {.lex_state = 62, .external_lex_state = 2}, + [485] = {.lex_state = 62, .external_lex_state = 2}, + [486] = {.lex_state = 62, .external_lex_state = 3}, [487] = {.lex_state = 62, .external_lex_state = 3}, - [488] = {.lex_state = 62, .external_lex_state = 2}, - [489] = {.lex_state = 62, .external_lex_state = 3}, - [490] = {.lex_state = 62, .external_lex_state = 2}, - [491] = {.lex_state = 62, .external_lex_state = 3}, - [492] = {.lex_state = 62, .external_lex_state = 3}, - [493] = {.lex_state = 62, .external_lex_state = 2}, + [488] = {.lex_state = 62, .external_lex_state = 3}, + [489] = {.lex_state = 62, .external_lex_state = 2}, + [490] = {.lex_state = 62, .external_lex_state = 3}, + [491] = {.lex_state = 62, .external_lex_state = 2}, + [492] = {.lex_state = 62, .external_lex_state = 2}, + [493] = {.lex_state = 62, .external_lex_state = 3}, [494] = {.lex_state = 62, .external_lex_state = 2}, - [495] = {.lex_state = 62, .external_lex_state = 3}, - [496] = {.lex_state = 62, .external_lex_state = 2}, + [495] = {.lex_state = 62, .external_lex_state = 2}, + [496] = {.lex_state = 62, .external_lex_state = 3}, [497] = {.lex_state = 62, .external_lex_state = 2}, - [498] = {.lex_state = 62, .external_lex_state = 3}, + [498] = {.lex_state = 62, .external_lex_state = 2}, [499] = {.lex_state = 62, .external_lex_state = 2}, [500] = {.lex_state = 62, .external_lex_state = 2}, - [501] = {.lex_state = 62, .external_lex_state = 2}, + [501] = {.lex_state = 62, .external_lex_state = 3}, [502] = {.lex_state = 62, .external_lex_state = 3}, [503] = {.lex_state = 62, .external_lex_state = 2}, - [504] = {.lex_state = 62, .external_lex_state = 2}, - [505] = {.lex_state = 62, .external_lex_state = 3}, - [506] = {.lex_state = 62, .external_lex_state = 3}, + [504] = {.lex_state = 62, .external_lex_state = 3}, + [505] = {.lex_state = 62, .external_lex_state = 2}, + [506] = {.lex_state = 62, .external_lex_state = 2}, [507] = {.lex_state = 62, .external_lex_state = 2}, - [508] = {.lex_state = 62, .external_lex_state = 3}, - [509] = {.lex_state = 62, .external_lex_state = 3}, - [510] = {.lex_state = 62, .external_lex_state = 3}, - [511] = {.lex_state = 62, .external_lex_state = 2}, - [512] = {.lex_state = 62, .external_lex_state = 2}, + [508] = {.lex_state = 62, .external_lex_state = 2}, + [509] = {.lex_state = 62, .external_lex_state = 2}, + [510] = {.lex_state = 62, .external_lex_state = 2}, + [511] = {.lex_state = 62, .external_lex_state = 3}, + [512] = {.lex_state = 62, .external_lex_state = 3}, [513] = {.lex_state = 62, .external_lex_state = 3}, [514] = {.lex_state = 62, .external_lex_state = 2}, [515] = {.lex_state = 62, .external_lex_state = 2}, - [516] = {.lex_state = 62, .external_lex_state = 3}, + [516] = {.lex_state = 62, .external_lex_state = 2}, [517] = {.lex_state = 62, .external_lex_state = 3}, - [518] = {.lex_state = 62, .external_lex_state = 2}, - [519] = {.lex_state = 62, .external_lex_state = 2}, - [520] = {.lex_state = 62, .external_lex_state = 3}, - [521] = {.lex_state = 62, .external_lex_state = 2}, + [518] = {.lex_state = 62, .external_lex_state = 3}, + [519] = {.lex_state = 62, .external_lex_state = 3}, + [520] = {.lex_state = 62, .external_lex_state = 2}, + [521] = {.lex_state = 62, .external_lex_state = 3}, [522] = {.lex_state = 62, .external_lex_state = 3}, - [523] = {.lex_state = 62, .external_lex_state = 2}, + [523] = {.lex_state = 62, .external_lex_state = 3}, [524] = {.lex_state = 62, .external_lex_state = 2}, - [525] = {.lex_state = 62, .external_lex_state = 3}, - [526] = {.lex_state = 62, .external_lex_state = 3}, - [527] = {.lex_state = 62, .external_lex_state = 3}, - [528] = {.lex_state = 62, .external_lex_state = 2}, + [525] = {.lex_state = 62, .external_lex_state = 2}, + [526] = {.lex_state = 62, .external_lex_state = 2}, + [527] = {.lex_state = 62, .external_lex_state = 2}, + [528] = {.lex_state = 62, .external_lex_state = 3}, [529] = {.lex_state = 62, .external_lex_state = 3}, - [530] = {.lex_state = 62, .external_lex_state = 3}, - [531] = {.lex_state = 62, .external_lex_state = 3}, + [530] = {.lex_state = 62, .external_lex_state = 2}, + [531] = {.lex_state = 62, .external_lex_state = 2}, [532] = {.lex_state = 62, .external_lex_state = 2}, [533] = {.lex_state = 62, .external_lex_state = 2}, [534] = {.lex_state = 62, .external_lex_state = 3}, - [535] = {.lex_state = 62, .external_lex_state = 2}, - [536] = {.lex_state = 62, .external_lex_state = 2}, + [535] = {.lex_state = 62, .external_lex_state = 3}, + [536] = {.lex_state = 62, .external_lex_state = 3}, [537] = {.lex_state = 62, .external_lex_state = 2}, [538] = {.lex_state = 62, .external_lex_state = 2}, [539] = {.lex_state = 62, .external_lex_state = 3}, [540] = {.lex_state = 62, .external_lex_state = 3}, - [541] = {.lex_state = 62, .external_lex_state = 2}, - [542] = {.lex_state = 62, .external_lex_state = 2}, + [541] = {.lex_state = 62, .external_lex_state = 3}, + [542] = {.lex_state = 62, .external_lex_state = 3}, [543] = {.lex_state = 62, .external_lex_state = 2}, - [544] = {.lex_state = 62, .external_lex_state = 3}, + [544] = {.lex_state = 62, .external_lex_state = 2}, [545] = {.lex_state = 62, .external_lex_state = 2}, - [546] = {.lex_state = 62, .external_lex_state = 2}, - [547] = {.lex_state = 62, .external_lex_state = 2}, + [546] = {.lex_state = 62, .external_lex_state = 3}, + [547] = {.lex_state = 62, .external_lex_state = 3}, [548] = {.lex_state = 62, .external_lex_state = 3}, [549] = {.lex_state = 62, .external_lex_state = 2}, - [550] = {.lex_state = 62, .external_lex_state = 2}, - [551] = {.lex_state = 62, .external_lex_state = 3}, + [550] = {.lex_state = 62, .external_lex_state = 3}, + [551] = {.lex_state = 62, .external_lex_state = 2}, [552] = {.lex_state = 62, .external_lex_state = 2}, [553] = {.lex_state = 62, .external_lex_state = 2}, - [554] = {.lex_state = 62, .external_lex_state = 3}, - [555] = {.lex_state = 62, .external_lex_state = 3}, - [556] = {.lex_state = 62, .external_lex_state = 2}, - [557] = {.lex_state = 62, .external_lex_state = 2}, + [554] = {.lex_state = 62, .external_lex_state = 2}, + [555] = {.lex_state = 62, .external_lex_state = 2}, + [556] = {.lex_state = 62, .external_lex_state = 3}, + [557] = {.lex_state = 62, .external_lex_state = 3}, [558] = {.lex_state = 62, .external_lex_state = 3}, - [559] = {.lex_state = 62, .external_lex_state = 2}, + [559] = {.lex_state = 62, .external_lex_state = 3}, [560] = {.lex_state = 62, .external_lex_state = 3}, [561] = {.lex_state = 62, .external_lex_state = 2}, [562] = {.lex_state = 62, .external_lex_state = 3}, [563] = {.lex_state = 62, .external_lex_state = 3}, [564] = {.lex_state = 62, .external_lex_state = 3}, - [565] = {.lex_state = 62, .external_lex_state = 3}, - [566] = {.lex_state = 62, .external_lex_state = 2}, - [567] = {.lex_state = 62, .external_lex_state = 3}, - [568] = {.lex_state = 62, .external_lex_state = 3}, + [565] = {.lex_state = 62, .external_lex_state = 2}, + [566] = {.lex_state = 62, .external_lex_state = 3}, + [567] = {.lex_state = 62, .external_lex_state = 2}, + [568] = {.lex_state = 62, .external_lex_state = 2}, [569] = {.lex_state = 62, .external_lex_state = 2}, - [570] = {.lex_state = 62, .external_lex_state = 3}, + [570] = {.lex_state = 62, .external_lex_state = 2}, [571] = {.lex_state = 62, .external_lex_state = 3}, [572] = {.lex_state = 62, .external_lex_state = 2}, - [573] = {.lex_state = 62, .external_lex_state = 2}, - [574] = {.lex_state = 62, .external_lex_state = 3}, - [575] = {.lex_state = 62, .external_lex_state = 2}, + [573] = {.lex_state = 62, .external_lex_state = 3}, + [574] = {.lex_state = 62, .external_lex_state = 2}, + [575] = {.lex_state = 62, .external_lex_state = 3}, [576] = {.lex_state = 62, .external_lex_state = 2}, [577] = {.lex_state = 62, .external_lex_state = 3}, [578] = {.lex_state = 62, .external_lex_state = 2}, - [579] = {.lex_state = 62, .external_lex_state = 3}, + [579] = {.lex_state = 62, .external_lex_state = 2}, [580] = {.lex_state = 62, .external_lex_state = 3}, - [581] = {.lex_state = 62, .external_lex_state = 3}, - [582] = {.lex_state = 62, .external_lex_state = 3}, + [581] = {.lex_state = 62, .external_lex_state = 2}, + [582] = {.lex_state = 62, .external_lex_state = 2}, [583] = {.lex_state = 62, .external_lex_state = 2}, [584] = {.lex_state = 62, .external_lex_state = 3}, - [585] = {.lex_state = 62, .external_lex_state = 2}, + [585] = {.lex_state = 62, .external_lex_state = 3}, [586] = {.lex_state = 62, .external_lex_state = 2}, [587] = {.lex_state = 62, .external_lex_state = 3}, [588] = {.lex_state = 62, .external_lex_state = 3}, - [589] = {.lex_state = 62, .external_lex_state = 2}, + [589] = {.lex_state = 62, .external_lex_state = 3}, [590] = {.lex_state = 62, .external_lex_state = 2}, [591] = {.lex_state = 62, .external_lex_state = 3}, [592] = {.lex_state = 62, .external_lex_state = 3}, [593] = {.lex_state = 62, .external_lex_state = 3}, [594] = {.lex_state = 62, .external_lex_state = 3}, - [595] = {.lex_state = 62, .external_lex_state = 2}, + [595] = {.lex_state = 62, .external_lex_state = 3}, [596] = {.lex_state = 62, .external_lex_state = 2}, [597] = {.lex_state = 62, .external_lex_state = 2}, - [598] = {.lex_state = 15, .external_lex_state = 2}, - [599] = {.lex_state = 15, .external_lex_state = 2}, + [598] = {.lex_state = 62, .external_lex_state = 2}, + [599] = {.lex_state = 62, .external_lex_state = 2}, [600] = {.lex_state = 15, .external_lex_state = 2}, - [601] = {.lex_state = 62, .external_lex_state = 2}, + [601] = {.lex_state = 15, .external_lex_state = 2}, [602] = {.lex_state = 62, .external_lex_state = 2}, [603] = {.lex_state = 62, .external_lex_state = 2}, [604] = {.lex_state = 62, .external_lex_state = 2}, [605] = {.lex_state = 62, .external_lex_state = 2}, [606] = {.lex_state = 62, .external_lex_state = 2}, - [607] = {.lex_state = 62, .external_lex_state = 2}, + [607] = {.lex_state = 15, .external_lex_state = 2}, [608] = {.lex_state = 62, .external_lex_state = 2}, - [609] = {.lex_state = 15, .external_lex_state = 2}, + [609] = {.lex_state = 62, .external_lex_state = 2}, [610] = {.lex_state = 15, .external_lex_state = 2}, - [611] = {.lex_state = 15}, + [611] = {.lex_state = 15, .external_lex_state = 2}, [612] = {.lex_state = 15}, [613] = {.lex_state = 15}, [614] = {.lex_state = 15}, @@ -9314,7 +6904,7 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [620] = {.lex_state = 15}, [621] = {.lex_state = 15}, [622] = {.lex_state = 15}, - [623] = {.lex_state = 15}, + [623] = {.lex_state = 16, .external_lex_state = 2}, [624] = {.lex_state = 15}, [625] = {.lex_state = 15}, [626] = {.lex_state = 15}, @@ -9327,7 +6917,7 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [633] = {.lex_state = 15}, [634] = {.lex_state = 15}, [635] = {.lex_state = 15}, - [636] = {.lex_state = 16, .external_lex_state = 2}, + [636] = {.lex_state = 15}, [637] = {.lex_state = 15}, [638] = {.lex_state = 15}, [639] = {.lex_state = 15}, @@ -9358,32 +6948,32 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [664] = {.lex_state = 15}, [665] = {.lex_state = 15}, [666] = {.lex_state = 15}, - [667] = {.lex_state = 14}, - [668] = {.lex_state = 14}, + [667] = {.lex_state = 15}, + [668] = {.lex_state = 62, .external_lex_state = 2}, [669] = {.lex_state = 62, .external_lex_state = 2}, - [670] = {.lex_state = 62, .external_lex_state = 2}, + [670] = {.lex_state = 14}, [671] = {.lex_state = 15}, - [672] = {.lex_state = 15}, - [673] = {.lex_state = 62, .external_lex_state = 2}, - [674] = {.lex_state = 14}, - [675] = {.lex_state = 14}, - [676] = {.lex_state = 62, .external_lex_state = 2}, - [677] = {.lex_state = 15, .external_lex_state = 2}, + [672] = {.lex_state = 62, .external_lex_state = 2}, + [673] = {.lex_state = 14}, + [674] = {.lex_state = 15, .external_lex_state = 2}, + [675] = {.lex_state = 15}, + [676] = {.lex_state = 14}, + [677] = {.lex_state = 14}, [678] = {.lex_state = 15, .external_lex_state = 2}, [679] = {.lex_state = 62, .external_lex_state = 2}, - [680] = {.lex_state = 62, .external_lex_state = 2}, + [680] = {.lex_state = 15, .external_lex_state = 4}, [681] = {.lex_state = 62, .external_lex_state = 2}, [682] = {.lex_state = 62, .external_lex_state = 2}, - [683] = {.lex_state = 62, .external_lex_state = 2}, - [684] = {.lex_state = 15, .external_lex_state = 6}, + [683] = {.lex_state = 15, .external_lex_state = 4}, + [684] = {.lex_state = 62, .external_lex_state = 2}, [685] = {.lex_state = 62, .external_lex_state = 2}, [686] = {.lex_state = 62, .external_lex_state = 2}, [687] = {.lex_state = 62, .external_lex_state = 2}, [688] = {.lex_state = 62, .external_lex_state = 2}, - [689] = {.lex_state = 15, .external_lex_state = 4}, + [689] = {.lex_state = 62, .external_lex_state = 2}, [690] = {.lex_state = 62, .external_lex_state = 2}, [691] = {.lex_state = 62, .external_lex_state = 2}, - [692] = {.lex_state = 62, .external_lex_state = 2}, + [692] = {.lex_state = 15, .external_lex_state = 4}, [693] = {.lex_state = 62, .external_lex_state = 2}, [694] = {.lex_state = 62, .external_lex_state = 2}, [695] = {.lex_state = 62, .external_lex_state = 2}, @@ -9392,85 +6982,85 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [698] = {.lex_state = 62, .external_lex_state = 2}, [699] = {.lex_state = 62, .external_lex_state = 2}, [700] = {.lex_state = 62, .external_lex_state = 2}, - [701] = {.lex_state = 62, .external_lex_state = 2}, + [701] = {.lex_state = 15}, [702] = {.lex_state = 62, .external_lex_state = 2}, - [703] = {.lex_state = 62, .external_lex_state = 2}, + [703] = {.lex_state = 15}, [704] = {.lex_state = 62, .external_lex_state = 2}, [705] = {.lex_state = 62, .external_lex_state = 2}, [706] = {.lex_state = 62, .external_lex_state = 2}, [707] = {.lex_state = 62, .external_lex_state = 2}, [708] = {.lex_state = 62, .external_lex_state = 2}, [709] = {.lex_state = 62, .external_lex_state = 2}, - [710] = {.lex_state = 62, .external_lex_state = 2}, + [710] = {.lex_state = 15, .external_lex_state = 6}, [711] = {.lex_state = 62, .external_lex_state = 2}, [712] = {.lex_state = 62, .external_lex_state = 2}, - [713] = {.lex_state = 15, .external_lex_state = 4}, + [713] = {.lex_state = 62, .external_lex_state = 2}, [714] = {.lex_state = 62, .external_lex_state = 2}, [715] = {.lex_state = 62, .external_lex_state = 2}, [716] = {.lex_state = 62, .external_lex_state = 2}, [717] = {.lex_state = 62, .external_lex_state = 2}, [718] = {.lex_state = 62, .external_lex_state = 2}, [719] = {.lex_state = 62, .external_lex_state = 2}, - [720] = {.lex_state = 15, .external_lex_state = 4}, + [720] = {.lex_state = 62, .external_lex_state = 2}, [721] = {.lex_state = 62, .external_lex_state = 2}, [722] = {.lex_state = 62, .external_lex_state = 2}, [723] = {.lex_state = 62, .external_lex_state = 2}, [724] = {.lex_state = 62, .external_lex_state = 2}, - [725] = {.lex_state = 15}, + [725] = {.lex_state = 62, .external_lex_state = 2}, [726] = {.lex_state = 62, .external_lex_state = 2}, - [727] = {.lex_state = 15}, + [727] = {.lex_state = 62, .external_lex_state = 2}, [728] = {.lex_state = 62, .external_lex_state = 2}, [729] = {.lex_state = 62, .external_lex_state = 2}, [730] = {.lex_state = 62, .external_lex_state = 2}, - [731] = {.lex_state = 15, .external_lex_state = 6}, + [731] = {.lex_state = 62, .external_lex_state = 2}, [732] = {.lex_state = 15, .external_lex_state = 6}, [733] = {.lex_state = 15, .external_lex_state = 6}, [734] = {.lex_state = 15, .external_lex_state = 6}, - [735] = {.lex_state = 15, .external_lex_state = 6}, - [736] = {.lex_state = 15, .external_lex_state = 2}, + [735] = {.lex_state = 15, .external_lex_state = 2}, + [736] = {.lex_state = 15, .external_lex_state = 6}, [737] = {.lex_state = 15, .external_lex_state = 6}, [738] = {.lex_state = 15, .external_lex_state = 6}, - [739] = {.lex_state = 15, .external_lex_state = 6}, + [739] = {.lex_state = 15, .external_lex_state = 2}, [740] = {.lex_state = 15}, [741] = {.lex_state = 15, .external_lex_state = 6}, - [742] = {.lex_state = 15, .external_lex_state = 2}, - [743] = {.lex_state = 15, .external_lex_state = 6}, - [744] = {.lex_state = 15, .external_lex_state = 2}, + [742] = {.lex_state = 15, .external_lex_state = 6}, + [743] = {.lex_state = 15, .external_lex_state = 2}, + [744] = {.lex_state = 15, .external_lex_state = 6}, [745] = {.lex_state = 15, .external_lex_state = 6}, - [746] = {.lex_state = 15}, + [746] = {.lex_state = 15, .external_lex_state = 6}, [747] = {.lex_state = 15}, [748] = {.lex_state = 15}, - [749] = {.lex_state = 14}, + [749] = {.lex_state = 15}, [750] = {.lex_state = 15}, [751] = {.lex_state = 15}, [752] = {.lex_state = 15}, [753] = {.lex_state = 15}, - [754] = {.lex_state = 14, .external_lex_state = 6}, - [755] = {.lex_state = 14, .external_lex_state = 6}, - [756] = {.lex_state = 15}, - [757] = {.lex_state = 15}, - [758] = {.lex_state = 15, .external_lex_state = 4}, - [759] = {.lex_state = 14}, + [754] = {.lex_state = 15}, + [755] = {.lex_state = 15}, + [756] = {.lex_state = 14, .external_lex_state = 6}, + [757] = {.lex_state = 15, .external_lex_state = 4}, + [758] = {.lex_state = 14}, + [759] = {.lex_state = 15}, [760] = {.lex_state = 14}, - [761] = {.lex_state = 15}, - [762] = {.lex_state = 15}, + [761] = {.lex_state = 14}, + [762] = {.lex_state = 14, .external_lex_state = 6}, [763] = {.lex_state = 15}, - [764] = {.lex_state = 14}, + [764] = {.lex_state = 15}, [765] = {.lex_state = 15}, - [766] = {.lex_state = 15}, + [766] = {.lex_state = 15, .external_lex_state = 4}, [767] = {.lex_state = 15}, [768] = {.lex_state = 15}, - [769] = {.lex_state = 15, .external_lex_state = 4}, + [769] = {.lex_state = 14}, [770] = {.lex_state = 15}, - [771] = {.lex_state = 15, .external_lex_state = 6}, + [771] = {.lex_state = 15}, [772] = {.lex_state = 15, .external_lex_state = 6}, [773] = {.lex_state = 15, .external_lex_state = 6}, [774] = {.lex_state = 15, .external_lex_state = 6}, - [775] = {.lex_state = 15, .external_lex_state = 6}, + [775] = {.lex_state = 14}, [776] = {.lex_state = 15, .external_lex_state = 6}, [777] = {.lex_state = 15, .external_lex_state = 6}, [778] = {.lex_state = 15, .external_lex_state = 6}, - [779] = {.lex_state = 15}, + [779] = {.lex_state = 15, .external_lex_state = 6}, [780] = {.lex_state = 15, .external_lex_state = 6}, [781] = {.lex_state = 15, .external_lex_state = 6}, [782] = {.lex_state = 15, .external_lex_state = 6}, @@ -9480,7 +7070,7 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [786] = {.lex_state = 15, .external_lex_state = 6}, [787] = {.lex_state = 15, .external_lex_state = 6}, [788] = {.lex_state = 15, .external_lex_state = 6}, - [789] = {.lex_state = 15}, + [789] = {.lex_state = 15, .external_lex_state = 6}, [790] = {.lex_state = 15, .external_lex_state = 6}, [791] = {.lex_state = 15, .external_lex_state = 6}, [792] = {.lex_state = 15, .external_lex_state = 6}, @@ -9488,22 +7078,22 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [794] = {.lex_state = 15, .external_lex_state = 6}, [795] = {.lex_state = 15, .external_lex_state = 6}, [796] = {.lex_state = 15, .external_lex_state = 6}, - [797] = {.lex_state = 15, .external_lex_state = 6}, - [798] = {.lex_state = 14}, + [797] = {.lex_state = 15}, + [798] = {.lex_state = 15, .external_lex_state = 6}, [799] = {.lex_state = 15, .external_lex_state = 6}, - [800] = {.lex_state = 15, .external_lex_state = 6}, - [801] = {.lex_state = 14}, - [802] = {.lex_state = 15, .external_lex_state = 6}, + [800] = {.lex_state = 15}, + [801] = {.lex_state = 15, .external_lex_state = 6}, + [802] = {.lex_state = 14}, [803] = {.lex_state = 15, .external_lex_state = 6}, [804] = {.lex_state = 15, .external_lex_state = 6}, [805] = {.lex_state = 15, .external_lex_state = 6}, - [806] = {.lex_state = 15}, + [806] = {.lex_state = 15, .external_lex_state = 6}, [807] = {.lex_state = 15, .external_lex_state = 6}, [808] = {.lex_state = 15, .external_lex_state = 6}, [809] = {.lex_state = 15}, [810] = {.lex_state = 15}, [811] = {.lex_state = 15}, - [812] = {.lex_state = 14}, + [812] = {.lex_state = 15}, [813] = {.lex_state = 15}, [814] = {.lex_state = 15}, [815] = {.lex_state = 15}, @@ -9522,13 +7112,13 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [828] = {.lex_state = 15}, [829] = {.lex_state = 15}, [830] = {.lex_state = 15}, - [831] = {.lex_state = 15}, + [831] = {.lex_state = 14}, [832] = {.lex_state = 15}, [833] = {.lex_state = 15}, [834] = {.lex_state = 15}, [835] = {.lex_state = 15}, [836] = {.lex_state = 15}, - [837] = {.lex_state = 14}, + [837] = {.lex_state = 15}, [838] = {.lex_state = 15}, [839] = {.lex_state = 15}, [840] = {.lex_state = 15}, @@ -9540,11 +7130,11 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [846] = {.lex_state = 15}, [847] = {.lex_state = 15}, [848] = {.lex_state = 15}, - [849] = {.lex_state = 62, .external_lex_state = 2}, + [849] = {.lex_state = 14}, [850] = {.lex_state = 16, .external_lex_state = 2}, - [851] = {.lex_state = 16, .external_lex_state = 2}, + [851] = {.lex_state = 62, .external_lex_state = 2}, [852] = {.lex_state = 62, .external_lex_state = 2}, - [853] = {.lex_state = 62, .external_lex_state = 2}, + [853] = {.lex_state = 16, .external_lex_state = 2}, [854] = {.lex_state = 62, .external_lex_state = 2}, [855] = {.lex_state = 62, .external_lex_state = 2}, [856] = {.lex_state = 62, .external_lex_state = 2}, @@ -9559,22 +7149,22 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [865] = {.lex_state = 62, .external_lex_state = 2}, [866] = {.lex_state = 62, .external_lex_state = 2}, [867] = {.lex_state = 62, .external_lex_state = 2}, - [868] = {.lex_state = 16}, + [868] = {.lex_state = 62, .external_lex_state = 2}, [869] = {.lex_state = 16}, [870] = {.lex_state = 16}, [871] = {.lex_state = 16}, [872] = {.lex_state = 16}, [873] = {.lex_state = 16}, - [874] = {.lex_state = 16}, + [874] = {.lex_state = 15}, [875] = {.lex_state = 16}, [876] = {.lex_state = 16}, - [877] = {.lex_state = 62, .external_lex_state = 6}, - [878] = {.lex_state = 62, .external_lex_state = 6}, - [879] = {.lex_state = 15}, - [880] = {.lex_state = 15}, - [881] = {.lex_state = 16}, - [882] = {.lex_state = 15}, - [883] = {.lex_state = 16}, + [877] = {.lex_state = 16}, + [878] = {.lex_state = 16}, + [879] = {.lex_state = 62, .external_lex_state = 6}, + [880] = {.lex_state = 62, .external_lex_state = 6}, + [881] = {.lex_state = 15}, + [882] = {.lex_state = 16}, + [883] = {.lex_state = 15}, [884] = {.lex_state = 16}, [885] = {.lex_state = 16}, [886] = {.lex_state = 16}, @@ -9582,72 +7172,72 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [888] = {.lex_state = 16}, [889] = {.lex_state = 16}, [890] = {.lex_state = 16}, - [891] = {.lex_state = 62, .external_lex_state = 2}, + [891] = {.lex_state = 16}, [892] = {.lex_state = 62, .external_lex_state = 2}, - [893] = {.lex_state = 62}, + [893] = {.lex_state = 62, .external_lex_state = 2}, [894] = {.lex_state = 62, .external_lex_state = 2}, [895] = {.lex_state = 62}, - [896] = {.lex_state = 16}, + [896] = {.lex_state = 62}, [897] = {.lex_state = 16}, [898] = {.lex_state = 16}, - [899] = {.lex_state = 62}, - [900] = {.lex_state = 16}, + [899] = {.lex_state = 16}, + [900] = {.lex_state = 62}, [901] = {.lex_state = 16}, [902] = {.lex_state = 62}, - [903] = {.lex_state = 62}, - [904] = {.lex_state = 16}, - [905] = {.lex_state = 62, .external_lex_state = 2}, - [906] = {.lex_state = 15}, - [907] = {.lex_state = 16}, + [903] = {.lex_state = 16}, + [904] = {.lex_state = 62}, + [905] = {.lex_state = 16}, + [906] = {.lex_state = 62, .external_lex_state = 2}, + [907] = {.lex_state = 15}, [908] = {.lex_state = 16}, - [909] = {.lex_state = 16}, - [910] = {.lex_state = 15}, - [911] = {.lex_state = 16}, - [912] = {.lex_state = 16}, - [913] = {.lex_state = 16, .external_lex_state = 2}, - [914] = {.lex_state = 16}, - [915] = {.lex_state = 62}, + [909] = {.lex_state = 18, .external_lex_state = 7}, + [910] = {.lex_state = 18, .external_lex_state = 7}, + [911] = {.lex_state = 62}, + [912] = {.lex_state = 15}, + [913] = {.lex_state = 16}, + [914] = {.lex_state = 18, .external_lex_state = 7}, + [915] = {.lex_state = 16}, [916] = {.lex_state = 16}, - [917] = {.lex_state = 15}, + [917] = {.lex_state = 16}, [918] = {.lex_state = 16}, [919] = {.lex_state = 16}, - [920] = {.lex_state = 16}, - [921] = {.lex_state = 16}, + [920] = {.lex_state = 18, .external_lex_state = 7}, + [921] = {.lex_state = 18, .external_lex_state = 7}, [922] = {.lex_state = 16}, - [923] = {.lex_state = 16}, + [923] = {.lex_state = 18, .external_lex_state = 7}, [924] = {.lex_state = 16}, - [925] = {.lex_state = 15}, - [926] = {.lex_state = 16}, - [927] = {.lex_state = 16}, + [925] = {.lex_state = 16}, + [926] = {.lex_state = 18, .external_lex_state = 7}, + [927] = {.lex_state = 18, .external_lex_state = 7}, [928] = {.lex_state = 16}, [929] = {.lex_state = 16}, - [930] = {.lex_state = 62}, - [931] = {.lex_state = 62}, - [932] = {.lex_state = 62}, - [933] = {.lex_state = 16}, - [934] = {.lex_state = 18, .external_lex_state = 7}, - [935] = {.lex_state = 62}, + [930] = {.lex_state = 15}, + [931] = {.lex_state = 16}, + [932] = {.lex_state = 16}, + [933] = {.lex_state = 16, .external_lex_state = 2}, + [934] = {.lex_state = 15}, + [935] = {.lex_state = 16}, [936] = {.lex_state = 18, .external_lex_state = 7}, - [937] = {.lex_state = 18, .external_lex_state = 7}, - [938] = {.lex_state = 18, .external_lex_state = 7}, + [937] = {.lex_state = 16}, + [938] = {.lex_state = 16}, [939] = {.lex_state = 16}, [940] = {.lex_state = 62}, - [941] = {.lex_state = 62}, - [942] = {.lex_state = 18, .external_lex_state = 7}, + [941] = {.lex_state = 16}, + [942] = {.lex_state = 62}, [943] = {.lex_state = 16}, - [944] = {.lex_state = 18, .external_lex_state = 7}, + [944] = {.lex_state = 62}, [945] = {.lex_state = 62}, - [946] = {.lex_state = 62}, - [947] = {.lex_state = 16}, - [948] = {.lex_state = 16}, - [949] = {.lex_state = 18, .external_lex_state = 7}, - [950] = {.lex_state = 18, .external_lex_state = 7}, + [946] = {.lex_state = 16}, + [947] = {.lex_state = 62}, + [948] = {.lex_state = 62}, + [949] = {.lex_state = 16}, + [950] = {.lex_state = 62}, [951] = {.lex_state = 16}, - [952] = {.lex_state = 18, .external_lex_state = 7}, + [952] = {.lex_state = 16}, [953] = {.lex_state = 62}, - [954] = {.lex_state = 16}, + [954] = {.lex_state = 62}, [955] = {.lex_state = 62}, - [956] = {.lex_state = 62}, + [956] = {.lex_state = 16}, [957] = {.lex_state = 16}, [958] = {.lex_state = 62}, [959] = {.lex_state = 62}, @@ -9655,619 +7245,574 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [961] = {.lex_state = 16}, [962] = {.lex_state = 62}, [963] = {.lex_state = 62}, - [964] = {.lex_state = 16}, - [965] = {.lex_state = 0}, + [964] = {.lex_state = 62}, + [965] = {.lex_state = 62, .external_lex_state = 6}, [966] = {.lex_state = 16}, - [967] = {.lex_state = 62, .external_lex_state = 6}, + [967] = {.lex_state = 62}, [968] = {.lex_state = 16}, - [969] = {.lex_state = 16}, + [969] = {.lex_state = 62, .external_lex_state = 6}, [970] = {.lex_state = 16}, [971] = {.lex_state = 16}, - [972] = {.lex_state = 16}, - [973] = {.lex_state = 16}, + [972] = {.lex_state = 62, .external_lex_state = 6}, + [973] = {.lex_state = 62, .external_lex_state = 6}, [974] = {.lex_state = 62, .external_lex_state = 6}, - [975] = {.lex_state = 16}, - [976] = {.lex_state = 62, .external_lex_state = 6}, + [975] = {.lex_state = 62, .external_lex_state = 6}, + [976] = {.lex_state = 0}, [977] = {.lex_state = 16}, - [978] = {.lex_state = 62}, - [979] = {.lex_state = 62}, - [980] = {.lex_state = 62, .external_lex_state = 6}, - [981] = {.lex_state = 16}, - [982] = {.lex_state = 62, .external_lex_state = 6}, - [983] = {.lex_state = 0}, + [978] = {.lex_state = 16}, + [979] = {.lex_state = 16}, + [980] = {.lex_state = 16}, + [981] = {.lex_state = 62}, + [982] = {.lex_state = 16}, + [983] = {.lex_state = 16}, [984] = {.lex_state = 16}, [985] = {.lex_state = 16}, [986] = {.lex_state = 16}, [987] = {.lex_state = 16}, - [988] = {.lex_state = 16}, - [989] = {.lex_state = 16}, - [990] = {.lex_state = 16}, - [991] = {.lex_state = 0}, - [992] = {.lex_state = 62, .external_lex_state = 6}, + [988] = {.lex_state = 62, .external_lex_state = 6}, + [989] = {.lex_state = 62}, + [990] = {.lex_state = 18, .external_lex_state = 7}, + [991] = {.lex_state = 16}, + [992] = {.lex_state = 16}, [993] = {.lex_state = 16}, - [994] = {.lex_state = 62}, - [995] = {.lex_state = 62}, + [994] = {.lex_state = 16}, + [995] = {.lex_state = 16}, [996] = {.lex_state = 62}, - [997] = {.lex_state = 62, .external_lex_state = 6}, - [998] = {.lex_state = 16}, - [999] = {.lex_state = 15}, - [1000] = {.lex_state = 62, .external_lex_state = 6}, - [1001] = {.lex_state = 62, .external_lex_state = 6}, - [1002] = {.lex_state = 62}, - [1003] = {.lex_state = 0}, - [1004] = {.lex_state = 16}, - [1005] = {.lex_state = 16}, - [1006] = {.lex_state = 16}, - [1007] = {.lex_state = 62, .external_lex_state = 6}, - [1008] = {.lex_state = 16}, - [1009] = {.lex_state = 62, .external_lex_state = 6}, - [1010] = {.lex_state = 16}, + [997] = {.lex_state = 62}, + [998] = {.lex_state = 15}, + [999] = {.lex_state = 62}, + [1000] = {.lex_state = 16}, + [1001] = {.lex_state = 0}, + [1002] = {.lex_state = 0}, + [1003] = {.lex_state = 16}, + [1004] = {.lex_state = 0}, + [1005] = {.lex_state = 62}, + [1006] = {.lex_state = 62, .external_lex_state = 6}, + [1007] = {.lex_state = 16}, + [1008] = {.lex_state = 62}, + [1009] = {.lex_state = 16}, + [1010] = {.lex_state = 18, .external_lex_state = 7}, [1011] = {.lex_state = 16}, - [1012] = {.lex_state = 62}, - [1013] = {.lex_state = 62}, - [1014] = {.lex_state = 62, .external_lex_state = 6}, + [1012] = {.lex_state = 62, .external_lex_state = 6}, + [1013] = {.lex_state = 62, .external_lex_state = 6}, + [1014] = {.lex_state = 16}, [1015] = {.lex_state = 16}, - [1016] = {.lex_state = 15}, + [1016] = {.lex_state = 62, .external_lex_state = 6}, [1017] = {.lex_state = 62}, [1018] = {.lex_state = 62}, [1019] = {.lex_state = 62, .external_lex_state = 6}, - [1020] = {.lex_state = 62}, - [1021] = {.lex_state = 16}, - [1022] = {.lex_state = 16}, - [1023] = {.lex_state = 16}, + [1020] = {.lex_state = 15}, + [1021] = {.lex_state = 62, .external_lex_state = 6}, + [1022] = {.lex_state = 62, .external_lex_state = 6}, + [1023] = {.lex_state = 62}, [1024] = {.lex_state = 16}, [1025] = {.lex_state = 16}, - [1026] = {.lex_state = 62, .external_lex_state = 6}, + [1026] = {.lex_state = 16}, [1027] = {.lex_state = 16}, [1028] = {.lex_state = 16}, [1029] = {.lex_state = 16}, - [1030] = {.lex_state = 16}, - [1031] = {.lex_state = 18, .external_lex_state = 7}, + [1030] = {.lex_state = 62}, + [1031] = {.lex_state = 16}, [1032] = {.lex_state = 16}, - [1033] = {.lex_state = 62}, - [1034] = {.lex_state = 62, .external_lex_state = 6}, - [1035] = {.lex_state = 16}, + [1033] = {.lex_state = 16}, + [1034] = {.lex_state = 16}, + [1035] = {.lex_state = 62, .external_lex_state = 6}, [1036] = {.lex_state = 62, .external_lex_state = 6}, - [1037] = {.lex_state = 62}, - [1038] = {.lex_state = 62}, + [1037] = {.lex_state = 62, .external_lex_state = 6}, + [1038] = {.lex_state = 16}, [1039] = {.lex_state = 62}, - [1040] = {.lex_state = 16}, - [1041] = {.lex_state = 16}, - [1042] = {.lex_state = 16}, - [1043] = {.lex_state = 62, .external_lex_state = 6}, - [1044] = {.lex_state = 62, .external_lex_state = 6}, - [1045] = {.lex_state = 62, .external_lex_state = 6}, - [1046] = {.lex_state = 62, .external_lex_state = 6}, + [1040] = {.lex_state = 62, .external_lex_state = 6}, + [1041] = {.lex_state = 62, .external_lex_state = 6}, + [1042] = {.lex_state = 62, .external_lex_state = 6}, + [1043] = {.lex_state = 16}, + [1044] = {.lex_state = 62}, + [1045] = {.lex_state = 62}, + [1046] = {.lex_state = 62}, [1047] = {.lex_state = 16}, - [1048] = {.lex_state = 62, .external_lex_state = 6}, - [1049] = {.lex_state = 62}, - [1050] = {.lex_state = 16}, + [1048] = {.lex_state = 62}, + [1049] = {.lex_state = 62, .external_lex_state = 6}, + [1050] = {.lex_state = 62}, [1051] = {.lex_state = 16}, - [1052] = {.lex_state = 62}, - [1053] = {.lex_state = 62}, - [1054] = {.lex_state = 62, .external_lex_state = 6}, - [1055] = {.lex_state = 18, .external_lex_state = 7}, + [1052] = {.lex_state = 16}, + [1053] = {.lex_state = 16}, + [1054] = {.lex_state = 16}, + [1055] = {.lex_state = 62, .external_lex_state = 6}, [1056] = {.lex_state = 62}, - [1057] = {.lex_state = 15, .external_lex_state = 6}, - [1058] = {.lex_state = 15}, - [1059] = {.lex_state = 16}, + [1057] = {.lex_state = 16}, + [1058] = {.lex_state = 16}, + [1059] = {.lex_state = 15}, [1060] = {.lex_state = 18, .external_lex_state = 7}, - [1061] = {.lex_state = 15}, - [1062] = {.lex_state = 62}, - [1063] = {.lex_state = 16}, - [1064] = {.lex_state = 16}, - [1065] = {.lex_state = 62, .external_lex_state = 6}, + [1061] = {.lex_state = 16}, + [1062] = {.lex_state = 16}, + [1063] = {.lex_state = 15, .external_lex_state = 6}, + [1064] = {.lex_state = 62, .external_lex_state = 6}, + [1065] = {.lex_state = 16}, [1066] = {.lex_state = 62, .external_lex_state = 6}, - [1067] = {.lex_state = 18, .external_lex_state = 7}, - [1068] = {.lex_state = 15, .external_lex_state = 6}, - [1069] = {.lex_state = 18, .external_lex_state = 7}, - [1070] = {.lex_state = 16}, - [1071] = {.lex_state = 62}, + [1067] = {.lex_state = 15, .external_lex_state = 6}, + [1068] = {.lex_state = 18, .external_lex_state = 7}, + [1069] = {.lex_state = 62, .external_lex_state = 6}, + [1070] = {.lex_state = 62}, + [1071] = {.lex_state = 16}, [1072] = {.lex_state = 18, .external_lex_state = 7}, [1073] = {.lex_state = 16}, - [1074] = {.lex_state = 18, .external_lex_state = 7}, - [1075] = {.lex_state = 16}, - [1076] = {.lex_state = 18, .external_lex_state = 7}, + [1074] = {.lex_state = 16}, + [1075] = {.lex_state = 62}, + [1076] = {.lex_state = 16}, [1077] = {.lex_state = 16}, [1078] = {.lex_state = 62, .external_lex_state = 6}, [1079] = {.lex_state = 16}, [1080] = {.lex_state = 16}, - [1081] = {.lex_state = 16}, - [1082] = {.lex_state = 62, .external_lex_state = 6}, + [1081] = {.lex_state = 18, .external_lex_state = 7}, + [1082] = {.lex_state = 16}, [1083] = {.lex_state = 16}, [1084] = {.lex_state = 16}, - [1085] = {.lex_state = 16}, - [1086] = {.lex_state = 16}, - [1087] = {.lex_state = 16}, - [1088] = {.lex_state = 15, .external_lex_state = 6}, - [1089] = {.lex_state = 16}, - [1090] = {.lex_state = 62}, - [1091] = {.lex_state = 62}, - [1092] = {.lex_state = 62, .external_lex_state = 6}, + [1085] = {.lex_state = 15, .external_lex_state = 6}, + [1086] = {.lex_state = 62}, + [1087] = {.lex_state = 15}, + [1088] = {.lex_state = 18, .external_lex_state = 7}, + [1089] = {.lex_state = 18, .external_lex_state = 7}, + [1090] = {.lex_state = 16}, + [1091] = {.lex_state = 16}, + [1092] = {.lex_state = 16}, [1093] = {.lex_state = 62, .external_lex_state = 6}, [1094] = {.lex_state = 62, .external_lex_state = 6}, [1095] = {.lex_state = 62, .external_lex_state = 6}, [1096] = {.lex_state = 62, .external_lex_state = 6}, [1097] = {.lex_state = 16}, - [1098] = {.lex_state = 62}, - [1099] = {.lex_state = 8}, - [1100] = {.lex_state = 0}, - [1101] = {.lex_state = 15, .external_lex_state = 6}, - [1102] = {.lex_state = 62}, - [1103] = {.lex_state = 62}, + [1098] = {.lex_state = 62, .external_lex_state = 6}, + [1099] = {.lex_state = 62}, + [1100] = {.lex_state = 16}, + [1101] = {.lex_state = 62}, + [1102] = {.lex_state = 62, .external_lex_state = 6}, + [1103] = {.lex_state = 15, .external_lex_state = 6}, [1104] = {.lex_state = 16}, - [1105] = {.lex_state = 62, .external_lex_state = 6}, - [1106] = {.lex_state = 16}, + [1105] = {.lex_state = 62}, + [1106] = {.lex_state = 62, .external_lex_state = 6}, [1107] = {.lex_state = 16}, - [1108] = {.lex_state = 16}, - [1109] = {.lex_state = 62, .external_lex_state = 6}, - [1110] = {.lex_state = 16}, + [1108] = {.lex_state = 62, .external_lex_state = 6}, + [1109] = {.lex_state = 8}, + [1110] = {.lex_state = 62, .external_lex_state = 6}, [1111] = {.lex_state = 0}, - [1112] = {.lex_state = 62, .external_lex_state = 6}, - [1113] = {.lex_state = 62, .external_lex_state = 6}, - [1114] = {.lex_state = 0}, - [1115] = {.lex_state = 0}, - [1116] = {.lex_state = 62}, - [1117] = {.lex_state = 8}, - [1118] = {.lex_state = 62, .external_lex_state = 6}, - [1119] = {.lex_state = 62}, - [1120] = {.lex_state = 16}, - [1121] = {.lex_state = 62, .external_lex_state = 6}, - [1122] = {.lex_state = 62, .external_lex_state = 6}, - [1123] = {.lex_state = 16}, - [1124] = {.lex_state = 62}, - [1125] = {.lex_state = 8}, + [1112] = {.lex_state = 16}, + [1113] = {.lex_state = 16}, + [1114] = {.lex_state = 8}, + [1115] = {.lex_state = 62}, + [1116] = {.lex_state = 0}, + [1117] = {.lex_state = 62}, + [1118] = {.lex_state = 0}, + [1119] = {.lex_state = 16}, + [1120] = {.lex_state = 0}, + [1121] = {.lex_state = 62}, + [1122] = {.lex_state = 62}, + [1123] = {.lex_state = 62}, + [1124] = {.lex_state = 62, .external_lex_state = 6}, + [1125] = {.lex_state = 62, .external_lex_state = 6}, [1126] = {.lex_state = 62}, [1127] = {.lex_state = 62}, - [1128] = {.lex_state = 0}, - [1129] = {.lex_state = 62}, - [1130] = {.lex_state = 62}, - [1131] = {.lex_state = 0}, - [1132] = {.lex_state = 0}, - [1133] = {.lex_state = 16}, - [1134] = {.lex_state = 16}, - [1135] = {.lex_state = 16}, - [1136] = {.lex_state = 16}, - [1137] = {.lex_state = 0, .external_lex_state = 6}, + [1128] = {.lex_state = 62, .external_lex_state = 6}, + [1129] = {.lex_state = 8}, + [1130] = {.lex_state = 16}, + [1131] = {.lex_state = 16}, + [1132] = {.lex_state = 62}, + [1133] = {.lex_state = 62}, + [1134] = {.lex_state = 0, .external_lex_state = 6}, + [1135] = {.lex_state = 0, .external_lex_state = 6}, + [1136] = {.lex_state = 0, .external_lex_state = 6}, + [1137] = {.lex_state = 0}, [1138] = {.lex_state = 0, .external_lex_state = 6}, [1139] = {.lex_state = 16}, - [1140] = {.lex_state = 16}, + [1140] = {.lex_state = 0, .external_lex_state = 6}, [1141] = {.lex_state = 16}, - [1142] = {.lex_state = 62}, - [1143] = {.lex_state = 0, .external_lex_state = 6}, - [1144] = {.lex_state = 15}, - [1145] = {.lex_state = 16}, - [1146] = {.lex_state = 0}, - [1147] = {.lex_state = 62}, - [1148] = {.lex_state = 16}, - [1149] = {.lex_state = 62}, - [1150] = {.lex_state = 0, .external_lex_state = 6}, + [1142] = {.lex_state = 16}, + [1143] = {.lex_state = 62}, + [1144] = {.lex_state = 62}, + [1145] = {.lex_state = 0}, + [1146] = {.lex_state = 0, .external_lex_state = 6}, + [1147] = {.lex_state = 16}, + [1148] = {.lex_state = 0, .external_lex_state = 6}, + [1149] = {.lex_state = 0, .external_lex_state = 6}, + [1150] = {.lex_state = 16}, [1151] = {.lex_state = 16}, [1152] = {.lex_state = 62}, - [1153] = {.lex_state = 16}, - [1154] = {.lex_state = 0, .external_lex_state = 6}, - [1155] = {.lex_state = 0, .external_lex_state = 6}, - [1156] = {.lex_state = 62, .external_lex_state = 6}, + [1153] = {.lex_state = 0}, + [1154] = {.lex_state = 16}, + [1155] = {.lex_state = 16}, + [1156] = {.lex_state = 0, .external_lex_state = 6}, [1157] = {.lex_state = 16}, - [1158] = {.lex_state = 16}, + [1158] = {.lex_state = 62}, [1159] = {.lex_state = 16}, - [1160] = {.lex_state = 0, .external_lex_state = 6}, - [1161] = {.lex_state = 62}, + [1160] = {.lex_state = 0}, + [1161] = {.lex_state = 0, .external_lex_state = 6}, [1162] = {.lex_state = 0, .external_lex_state = 6}, - [1163] = {.lex_state = 0, .external_lex_state = 6}, - [1164] = {.lex_state = 0, .external_lex_state = 6}, - [1165] = {.lex_state = 15}, - [1166] = {.lex_state = 0}, + [1163] = {.lex_state = 16}, + [1164] = {.lex_state = 62}, + [1165] = {.lex_state = 0, .external_lex_state = 6}, + [1166] = {.lex_state = 16}, [1167] = {.lex_state = 0}, - [1168] = {.lex_state = 16, .external_lex_state = 2}, + [1168] = {.lex_state = 16}, [1169] = {.lex_state = 62}, - [1170] = {.lex_state = 0}, + [1170] = {.lex_state = 62}, [1171] = {.lex_state = 0, .external_lex_state = 6}, [1172] = {.lex_state = 0, .external_lex_state = 6}, - [1173] = {.lex_state = 16}, - [1174] = {.lex_state = 0, .external_lex_state = 6}, - [1175] = {.lex_state = 0}, - [1176] = {.lex_state = 0}, - [1177] = {.lex_state = 16}, - [1178] = {.lex_state = 16}, - [1179] = {.lex_state = 62}, - [1180] = {.lex_state = 62}, - [1181] = {.lex_state = 16}, - [1182] = {.lex_state = 62}, - [1183] = {.lex_state = 62, .external_lex_state = 6}, - [1184] = {.lex_state = 62}, - [1185] = {.lex_state = 62}, - [1186] = {.lex_state = 62}, - [1187] = {.lex_state = 62, .external_lex_state = 6}, - [1188] = {.lex_state = 62}, + [1173] = {.lex_state = 0}, + [1174] = {.lex_state = 62}, + [1175] = {.lex_state = 0, .external_lex_state = 6}, + [1176] = {.lex_state = 62}, + [1177] = {.lex_state = 62}, + [1178] = {.lex_state = 0, .external_lex_state = 6}, + [1179] = {.lex_state = 0}, + [1180] = {.lex_state = 62, .external_lex_state = 6}, + [1181] = {.lex_state = 0}, + [1182] = {.lex_state = 16, .external_lex_state = 2}, + [1183] = {.lex_state = 62}, + [1184] = {.lex_state = 0, .external_lex_state = 6}, + [1185] = {.lex_state = 0, .external_lex_state = 6}, + [1186] = {.lex_state = 15}, + [1187] = {.lex_state = 0}, + [1188] = {.lex_state = 0, .external_lex_state = 6}, [1189] = {.lex_state = 0, .external_lex_state = 6}, - [1190] = {.lex_state = 16}, - [1191] = {.lex_state = 0, .external_lex_state = 6}, - [1192] = {.lex_state = 0, .external_lex_state = 6}, - [1193] = {.lex_state = 62}, + [1190] = {.lex_state = 62, .external_lex_state = 6}, + [1191] = {.lex_state = 16}, + [1192] = {.lex_state = 16}, + [1193] = {.lex_state = 0, .external_lex_state = 6}, [1194] = {.lex_state = 0, .external_lex_state = 6}, - [1195] = {.lex_state = 62}, + [1195] = {.lex_state = 0, .external_lex_state = 6}, [1196] = {.lex_state = 0}, [1197] = {.lex_state = 62}, [1198] = {.lex_state = 0, .external_lex_state = 6}, [1199] = {.lex_state = 62}, - [1200] = {.lex_state = 0, .external_lex_state = 6}, - [1201] = {.lex_state = 16}, - [1202] = {.lex_state = 0}, + [1200] = {.lex_state = 62}, + [1201] = {.lex_state = 0}, + [1202] = {.lex_state = 0, .external_lex_state = 6}, [1203] = {.lex_state = 0}, [1204] = {.lex_state = 16}, - [1205] = {.lex_state = 0}, - [1206] = {.lex_state = 0}, - [1207] = {.lex_state = 16}, - [1208] = {.lex_state = 0}, + [1205] = {.lex_state = 15}, + [1206] = {.lex_state = 16}, + [1207] = {.lex_state = 0, .external_lex_state = 6}, + [1208] = {.lex_state = 0, .external_lex_state = 6}, [1209] = {.lex_state = 0, .external_lex_state = 6}, - [1210] = {.lex_state = 16}, - [1211] = {.lex_state = 0}, - [1212] = {.lex_state = 0}, - [1213] = {.lex_state = 0}, - [1214] = {.lex_state = 0, .external_lex_state = 6}, - [1215] = {.lex_state = 62}, + [1210] = {.lex_state = 0, .external_lex_state = 6}, + [1211] = {.lex_state = 0, .external_lex_state = 6}, + [1212] = {.lex_state = 62, .external_lex_state = 6}, + [1213] = {.lex_state = 0, .external_lex_state = 6}, + [1214] = {.lex_state = 16}, + [1215] = {.lex_state = 16}, [1216] = {.lex_state = 0}, - [1217] = {.lex_state = 0}, + [1217] = {.lex_state = 0, .external_lex_state = 6}, [1218] = {.lex_state = 0}, [1219] = {.lex_state = 0}, [1220] = {.lex_state = 0}, - [1221] = {.lex_state = 16}, - [1222] = {.lex_state = 8}, - [1223] = {.lex_state = 0, .external_lex_state = 6}, - [1224] = {.lex_state = 16}, - [1225] = {.lex_state = 0}, - [1226] = {.lex_state = 0, .external_lex_state = 6}, - [1227] = {.lex_state = 0}, + [1221] = {.lex_state = 62}, + [1222] = {.lex_state = 0}, + [1223] = {.lex_state = 62}, + [1224] = {.lex_state = 0}, + [1225] = {.lex_state = 8}, + [1226] = {.lex_state = 0}, + [1227] = {.lex_state = 62}, [1228] = {.lex_state = 0}, [1229] = {.lex_state = 0}, [1230] = {.lex_state = 0}, - [1231] = {.lex_state = 0, .external_lex_state = 6}, - [1232] = {.lex_state = 0}, - [1233] = {.lex_state = 0}, - [1234] = {.lex_state = 0}, + [1231] = {.lex_state = 0}, + [1232] = {.lex_state = 16}, + [1233] = {.lex_state = 62}, + [1234] = {.lex_state = 16}, [1235] = {.lex_state = 0}, - [1236] = {.lex_state = 62}, - [1237] = {.lex_state = 0, .external_lex_state = 6}, - [1238] = {.lex_state = 0, .external_lex_state = 6}, + [1236] = {.lex_state = 0}, + [1237] = {.lex_state = 16}, + [1238] = {.lex_state = 62}, [1239] = {.lex_state = 0}, - [1240] = {.lex_state = 0}, - [1241] = {.lex_state = 0, .external_lex_state = 6}, - [1242] = {.lex_state = 0}, - [1243] = {.lex_state = 0}, - [1244] = {.lex_state = 0, .external_lex_state = 6}, - [1245] = {.lex_state = 62}, - [1246] = {.lex_state = 0, .external_lex_state = 6}, + [1240] = {.lex_state = 0, .external_lex_state = 6}, + [1241] = {.lex_state = 16}, + [1242] = {.lex_state = 62, .external_lex_state = 6}, + [1243] = {.lex_state = 0, .external_lex_state = 6}, + [1244] = {.lex_state = 0}, + [1245] = {.lex_state = 62, .external_lex_state = 6}, + [1246] = {.lex_state = 0}, [1247] = {.lex_state = 0}, - [1248] = {.lex_state = 0, .external_lex_state = 6}, + [1248] = {.lex_state = 0}, [1249] = {.lex_state = 0}, - [1250] = {.lex_state = 16}, + [1250] = {.lex_state = 0}, [1251] = {.lex_state = 0}, [1252] = {.lex_state = 0}, - [1253] = {.lex_state = 8}, - [1254] = {.lex_state = 0, .external_lex_state = 6}, - [1255] = {.lex_state = 0}, + [1253] = {.lex_state = 62, .external_lex_state = 6}, + [1254] = {.lex_state = 0}, + [1255] = {.lex_state = 16}, [1256] = {.lex_state = 0}, [1257] = {.lex_state = 0}, [1258] = {.lex_state = 0}, [1259] = {.lex_state = 62}, - [1260] = {.lex_state = 16}, - [1261] = {.lex_state = 0, .external_lex_state = 6}, - [1262] = {.lex_state = 15}, - [1263] = {.lex_state = 0, .external_lex_state = 6}, + [1260] = {.lex_state = 62}, + [1261] = {.lex_state = 0}, + [1262] = {.lex_state = 0}, + [1263] = {.lex_state = 62}, [1264] = {.lex_state = 0}, [1265] = {.lex_state = 0}, - [1266] = {.lex_state = 16}, + [1266] = {.lex_state = 0}, [1267] = {.lex_state = 16}, - [1268] = {.lex_state = 0}, - [1269] = {.lex_state = 8}, + [1268] = {.lex_state = 62}, + [1269] = {.lex_state = 0}, [1270] = {.lex_state = 16}, - [1271] = {.lex_state = 0}, + [1271] = {.lex_state = 62}, [1272] = {.lex_state = 0}, [1273] = {.lex_state = 0}, [1274] = {.lex_state = 0}, [1275] = {.lex_state = 0}, - [1276] = {.lex_state = 62}, + [1276] = {.lex_state = 16}, [1277] = {.lex_state = 0}, [1278] = {.lex_state = 16}, [1279] = {.lex_state = 0}, [1280] = {.lex_state = 0}, - [1281] = {.lex_state = 16}, + [1281] = {.lex_state = 0}, [1282] = {.lex_state = 0}, [1283] = {.lex_state = 0}, - [1284] = {.lex_state = 16}, + [1284] = {.lex_state = 0}, [1285] = {.lex_state = 0}, - [1286] = {.lex_state = 16}, - [1287] = {.lex_state = 16}, - [1288] = {.lex_state = 62, .external_lex_state = 6}, + [1286] = {.lex_state = 0}, + [1287] = {.lex_state = 0}, + [1288] = {.lex_state = 0}, [1289] = {.lex_state = 0}, [1290] = {.lex_state = 0}, - [1291] = {.lex_state = 62, .external_lex_state = 6}, - [1292] = {.lex_state = 0}, - [1293] = {.lex_state = 62}, + [1291] = {.lex_state = 16}, + [1292] = {.lex_state = 16}, + [1293] = {.lex_state = 0}, [1294] = {.lex_state = 0}, - [1295] = {.lex_state = 16}, + [1295] = {.lex_state = 0}, [1296] = {.lex_state = 0}, - [1297] = {.lex_state = 0}, - [1298] = {.lex_state = 0}, + [1297] = {.lex_state = 16}, + [1298] = {.lex_state = 16}, [1299] = {.lex_state = 0}, [1300] = {.lex_state = 0}, [1301] = {.lex_state = 0}, - [1302] = {.lex_state = 0}, - [1303] = {.lex_state = 0}, - [1304] = {.lex_state = 0}, + [1302] = {.lex_state = 0, .external_lex_state = 6}, + [1303] = {.lex_state = 62}, + [1304] = {.lex_state = 8}, [1305] = {.lex_state = 62}, - [1306] = {.lex_state = 62}, - [1307] = {.lex_state = 8}, + [1306] = {.lex_state = 62, .external_lex_state = 6}, + [1307] = {.lex_state = 0}, [1308] = {.lex_state = 16}, - [1309] = {.lex_state = 0, .external_lex_state = 6}, - [1310] = {.lex_state = 0}, + [1309] = {.lex_state = 16}, + [1310] = {.lex_state = 16}, [1311] = {.lex_state = 0}, - [1312] = {.lex_state = 62}, + [1312] = {.lex_state = 0}, [1313] = {.lex_state = 0}, - [1314] = {.lex_state = 62}, - [1315] = {.lex_state = 16}, + [1314] = {.lex_state = 0}, + [1315] = {.lex_state = 0}, [1316] = {.lex_state = 0}, - [1317] = {.lex_state = 62}, - [1318] = {.lex_state = 62, .external_lex_state = 6}, - [1319] = {.lex_state = 0, .external_lex_state = 6}, - [1320] = {.lex_state = 16}, + [1317] = {.lex_state = 0}, + [1318] = {.lex_state = 8}, + [1319] = {.lex_state = 16}, + [1320] = {.lex_state = 0}, [1321] = {.lex_state = 0}, - [1322] = {.lex_state = 16}, + [1322] = {.lex_state = 62}, [1323] = {.lex_state = 0}, [1324] = {.lex_state = 0}, - [1325] = {.lex_state = 0}, + [1325] = {.lex_state = 62}, [1326] = {.lex_state = 0}, [1327] = {.lex_state = 0}, [1328] = {.lex_state = 0}, - [1329] = {.lex_state = 62}, + [1329] = {.lex_state = 0}, [1330] = {.lex_state = 0}, - [1331] = {.lex_state = 0}, - [1332] = {.lex_state = 8}, - [1333] = {.lex_state = 16}, - [1334] = {.lex_state = 16}, - [1335] = {.lex_state = 62, .external_lex_state = 6}, - [1336] = {.lex_state = 0}, - [1337] = {.lex_state = 0}, - [1338] = {.lex_state = 62}, + [1331] = {.lex_state = 62}, + [1332] = {.lex_state = 0}, + [1333] = {.lex_state = 15}, + [1334] = {.lex_state = 62}, + [1335] = {.lex_state = 0}, + [1336] = {.lex_state = 16}, + [1337] = {.lex_state = 8}, + [1338] = {.lex_state = 16}, [1339] = {.lex_state = 16}, - [1340] = {.lex_state = 16}, - [1341] = {.lex_state = 0}, - [1342] = {.lex_state = 0, .external_lex_state = 6}, - [1343] = {.lex_state = 0}, - [1344] = {.lex_state = 17}, - [1345] = {.lex_state = 0, .external_lex_state = 6}, - [1346] = {.lex_state = 0, .external_lex_state = 6}, - [1347] = {.lex_state = 16}, + [1340] = {.lex_state = 0}, + [1341] = {.lex_state = 8}, + [1342] = {.lex_state = 16}, + [1343] = {.lex_state = 16}, + [1344] = {.lex_state = 16}, + [1345] = {.lex_state = 0}, + [1346] = {.lex_state = 17}, + [1347] = {.lex_state = 0}, [1348] = {.lex_state = 0, .external_lex_state = 6}, - [1349] = {.lex_state = 0, .external_lex_state = 6}, - [1350] = {.lex_state = 0, .external_lex_state = 6}, - [1351] = {.lex_state = 0, .external_lex_state = 6}, + [1349] = {.lex_state = 16}, + [1350] = {.lex_state = 17}, + [1351] = {.lex_state = 17}, [1352] = {.lex_state = 0}, - [1353] = {.lex_state = 62}, + [1353] = {.lex_state = 0}, [1354] = {.lex_state = 0}, [1355] = {.lex_state = 0}, - [1356] = {.lex_state = 0}, - [1357] = {.lex_state = 62}, - [1358] = {.lex_state = 0}, + [1356] = {.lex_state = 17}, + [1357] = {.lex_state = 0}, + [1358] = {.lex_state = 0, .external_lex_state = 6}, [1359] = {.lex_state = 0}, [1360] = {.lex_state = 0}, - [1361] = {.lex_state = 0, .external_lex_state = 6}, - [1362] = {.lex_state = 0}, - [1363] = {.lex_state = 17}, + [1361] = {.lex_state = 17}, + [1362] = {.lex_state = 0, .external_lex_state = 6}, + [1363] = {.lex_state = 0}, [1364] = {.lex_state = 0}, - [1365] = {.lex_state = 15}, + [1365] = {.lex_state = 0}, [1366] = {.lex_state = 0}, [1367] = {.lex_state = 0}, - [1368] = {.lex_state = 0}, - [1369] = {.lex_state = 0, .external_lex_state = 6}, - [1370] = {.lex_state = 0}, + [1368] = {.lex_state = 17}, + [1369] = {.lex_state = 0}, + [1370] = {.lex_state = 17}, [1371] = {.lex_state = 17}, [1372] = {.lex_state = 17}, [1373] = {.lex_state = 0}, - [1374] = {.lex_state = 17}, - [1375] = {.lex_state = 17}, - [1376] = {.lex_state = 17}, - [1377] = {.lex_state = 17}, - [1378] = {.lex_state = 17}, + [1374] = {.lex_state = 0}, + [1375] = {.lex_state = 0, .external_lex_state = 6}, + [1376] = {.lex_state = 0, .external_lex_state = 6}, + [1377] = {.lex_state = 0}, + [1378] = {.lex_state = 0}, [1379] = {.lex_state = 0}, - [1380] = {.lex_state = 17}, + [1380] = {.lex_state = 0}, [1381] = {.lex_state = 0}, [1382] = {.lex_state = 0}, [1383] = {.lex_state = 0, .external_lex_state = 6}, - [1384] = {.lex_state = 0}, - [1385] = {.lex_state = 0, .external_lex_state = 6}, - [1386] = {.lex_state = 0, .external_lex_state = 6}, + [1384] = {.lex_state = 17}, + [1385] = {.lex_state = 0}, + [1386] = {.lex_state = 0}, [1387] = {.lex_state = 0}, [1388] = {.lex_state = 0}, - [1389] = {.lex_state = 0, .external_lex_state = 6}, - [1390] = {.lex_state = 0}, - [1391] = {.lex_state = 0, .external_lex_state = 6}, + [1389] = {.lex_state = 0}, + [1390] = {.lex_state = 0, .external_lex_state = 6}, + [1391] = {.lex_state = 62}, [1392] = {.lex_state = 0}, - [1393] = {.lex_state = 0, .external_lex_state = 6}, + [1393] = {.lex_state = 0}, [1394] = {.lex_state = 0, .external_lex_state = 6}, - [1395] = {.lex_state = 0, .external_lex_state = 6}, - [1396] = {.lex_state = 0}, + [1395] = {.lex_state = 62}, + [1396] = {.lex_state = 0, .external_lex_state = 6}, [1397] = {.lex_state = 0}, - [1398] = {.lex_state = 0}, - [1399] = {.lex_state = 0}, + [1398] = {.lex_state = 0, .external_lex_state = 6}, + [1399] = {.lex_state = 0, .external_lex_state = 6}, [1400] = {.lex_state = 0, .external_lex_state = 6}, - [1401] = {.lex_state = 0}, + [1401] = {.lex_state = 15}, [1402] = {.lex_state = 0}, [1403] = {.lex_state = 0}, - [1404] = {.lex_state = 0}, + [1404] = {.lex_state = 0, .external_lex_state = 6}, [1405] = {.lex_state = 0}, - [1406] = {.lex_state = 0}, + [1406] = {.lex_state = 0, .external_lex_state = 6}, [1407] = {.lex_state = 0}, - [1408] = {.lex_state = 62}, - [1409] = {.lex_state = 0}, - [1410] = {.lex_state = 0}, - [1411] = {.lex_state = 0}, + [1408] = {.lex_state = 0, .external_lex_state = 6}, + [1409] = {.lex_state = 0, .external_lex_state = 6}, + [1410] = {.lex_state = 0, .external_lex_state = 6}, + [1411] = {.lex_state = 0, .external_lex_state = 6}, [1412] = {.lex_state = 0}, - [1413] = {.lex_state = 16}, - [1414] = {.lex_state = 0}, + [1413] = {.lex_state = 62}, + [1414] = {.lex_state = 16}, [1415] = {.lex_state = 0}, [1416] = {.lex_state = 62}, [1417] = {.lex_state = 0}, [1418] = {.lex_state = 0}, - [1419] = {.lex_state = 62}, - [1420] = {.lex_state = 0}, - [1421] = {.lex_state = 62}, - [1422] = {.lex_state = 16}, + [1419] = {.lex_state = 0}, + [1420] = {.lex_state = 16}, + [1421] = {.lex_state = 0}, + [1422] = {.lex_state = 62}, [1423] = {.lex_state = 16}, - [1424] = {.lex_state = 0}, - [1425] = {.lex_state = 0}, + [1424] = {.lex_state = 62}, + [1425] = {.lex_state = 16}, [1426] = {.lex_state = 0}, - [1427] = {.lex_state = 16}, - [1428] = {.lex_state = 16}, + [1427] = {.lex_state = 0}, + [1428] = {.lex_state = 0}, [1429] = {.lex_state = 0}, - [1430] = {.lex_state = 62}, - [1431] = {.lex_state = 0}, + [1430] = {.lex_state = 16}, + [1431] = {.lex_state = 16}, [1432] = {.lex_state = 0}, - [1433] = {.lex_state = 0}, - [1434] = {.lex_state = 0}, + [1433] = {.lex_state = 62}, + [1434] = {.lex_state = 16}, [1435] = {.lex_state = 16}, - [1436] = {.lex_state = 62}, + [1436] = {.lex_state = 16}, [1437] = {.lex_state = 0}, [1438] = {.lex_state = 0}, [1439] = {.lex_state = 0}, - [1440] = {.lex_state = 62}, - [1441] = {.lex_state = 62}, - [1442] = {.lex_state = 0}, - [1443] = {.lex_state = 62}, - [1444] = {.lex_state = 62}, - [1445] = {.lex_state = 62}, - [1446] = {.lex_state = 62}, + [1440] = {.lex_state = 0}, + [1441] = {.lex_state = 16}, + [1442] = {.lex_state = 16}, + [1443] = {.lex_state = 16}, + [1444] = {.lex_state = 16}, + [1445] = {.lex_state = 0}, + [1446] = {.lex_state = 0}, [1447] = {.lex_state = 0}, [1448] = {.lex_state = 62}, [1449] = {.lex_state = 62}, - [1450] = {.lex_state = 62}, - [1451] = {.lex_state = 16}, - [1452] = {.lex_state = 16}, - [1453] = {.lex_state = 16}, - [1454] = {.lex_state = 62}, - [1455] = {.lex_state = 0}, + [1450] = {.lex_state = 0}, + [1451] = {.lex_state = 62}, + [1452] = {.lex_state = 62}, + [1453] = {.lex_state = 62}, + [1454] = {.lex_state = 16}, + [1455] = {.lex_state = 16}, [1456] = {.lex_state = 62}, [1457] = {.lex_state = 62}, [1458] = {.lex_state = 16}, [1459] = {.lex_state = 16}, - [1460] = {.lex_state = 0}, - [1461] = {.lex_state = 0}, - [1462] = {.lex_state = 0}, - [1463] = {.lex_state = 16}, + [1460] = {.lex_state = 16}, + [1461] = {.lex_state = 62}, + [1462] = {.lex_state = 62}, + [1463] = {.lex_state = 0}, [1464] = {.lex_state = 0}, - [1465] = {.lex_state = 16}, - [1466] = {.lex_state = 62}, + [1465] = {.lex_state = 62}, + [1466] = {.lex_state = 16}, [1467] = {.lex_state = 0}, - [1468] = {.lex_state = 16}, + [1468] = {.lex_state = 62}, [1469] = {.lex_state = 0}, [1470] = {.lex_state = 16}, - [1471] = {.lex_state = 16}, + [1471] = {.lex_state = 0}, [1472] = {.lex_state = 16}, - [1473] = {.lex_state = 0}, + [1473] = {.lex_state = 16}, [1474] = {.lex_state = 16}, - [1475] = {.lex_state = 0}, - [1476] = {.lex_state = 16}, - [1477] = {.lex_state = 62}, + [1475] = {.lex_state = 16}, + [1476] = {.lex_state = 62}, + [1477] = {.lex_state = 16}, [1478] = {.lex_state = 16}, - [1479] = {.lex_state = 0}, + [1479] = {.lex_state = 16}, [1480] = {.lex_state = 16}, - [1481] = {.lex_state = 16}, - [1482] = {.lex_state = 16}, - [1483] = {.lex_state = 16}, + [1481] = {.lex_state = 62}, + [1482] = {.lex_state = 62}, + [1483] = {.lex_state = 0}, [1484] = {.lex_state = 0}, [1485] = {.lex_state = 16}, - [1486] = {.lex_state = 16}, + [1486] = {.lex_state = 0}, [1487] = {.lex_state = 16}, - [1488] = {.lex_state = 62}, + [1488] = {.lex_state = 16}, [1489] = {.lex_state = 16}, - [1490] = {.lex_state = 62}, - [1491] = {.lex_state = 16}, + [1490] = {.lex_state = 16}, + [1491] = {.lex_state = 0}, [1492] = {.lex_state = 0}, - [1493] = {.lex_state = 16}, + [1493] = {.lex_state = 0}, [1494] = {.lex_state = 62}, [1495] = {.lex_state = 16}, - [1496] = {.lex_state = 0}, + [1496] = {.lex_state = 16}, [1497] = {.lex_state = 0}, - [1498] = {.lex_state = 62}, - [1499] = {.lex_state = 16}, - [1500] = {.lex_state = 62}, - [1501] = {.lex_state = 16}, - [1502] = {.lex_state = 0}, + [1498] = {.lex_state = 16}, + [1499] = {.lex_state = 0}, + [1500] = {.lex_state = 16}, + [1501] = {.lex_state = 62}, + [1502] = {.lex_state = 16}, [1503] = {.lex_state = 0}, [1504] = {.lex_state = 0}, - [1505] = {.lex_state = 16}, - [1506] = {.lex_state = 16}, - [1507] = {.lex_state = 16}, - [1508] = {.lex_state = 62}, - [1509] = {.lex_state = 62}, + [1505] = {.lex_state = 62}, + [1506] = {.lex_state = 0}, + [1507] = {.lex_state = 0}, + [1508] = {.lex_state = 0}, + [1509] = {.lex_state = 0}, [1510] = {.lex_state = 62}, - [1511] = {.lex_state = 62}, - [1512] = {.lex_state = 16}, + [1511] = {.lex_state = 0}, + [1512] = {.lex_state = 62}, [1513] = {.lex_state = 0}, [1514] = {.lex_state = 62}, - [1515] = {.lex_state = 0}, + [1515] = {.lex_state = 62}, [1516] = {.lex_state = 62}, [1517] = {.lex_state = 62}, - [1518] = {.lex_state = 16}, - [1519] = {.lex_state = 62}, + [1518] = {.lex_state = 62}, + [1519] = {.lex_state = 16}, [1520] = {.lex_state = 62}, [1521] = {.lex_state = 16}, - [1522] = {.lex_state = 62}, - [1523] = {.lex_state = 0}, - [1524] = {.lex_state = 16}, -}; - -enum { - ts_external_token__newline = 0, - ts_external_token__indent = 1, - ts_external_token__dedent = 2, - ts_external_token__string_start = 3, - ts_external_token__string_content = 4, - ts_external_token__string_end = 5, -}; - -static const TSSymbol ts_external_scanner_symbol_map[EXTERNAL_TOKEN_COUNT] = { - [ts_external_token__newline] = sym__newline, - [ts_external_token__indent] = sym__indent, - [ts_external_token__dedent] = sym__dedent, - [ts_external_token__string_start] = sym__string_start, - [ts_external_token__string_content] = sym__string_content, - [ts_external_token__string_end] = sym__string_end, -}; - -static const bool ts_external_scanner_states[8][EXTERNAL_TOKEN_COUNT] = { - [1] = { - [ts_external_token__newline] = true, - [ts_external_token__indent] = true, - [ts_external_token__dedent] = true, - [ts_external_token__string_start] = true, - [ts_external_token__string_content] = true, - [ts_external_token__string_end] = true, - }, - [2] = { - [ts_external_token__string_start] = true, - }, - [3] = { - [ts_external_token__dedent] = true, - [ts_external_token__string_start] = true, - }, - [4] = { - [ts_external_token__newline] = true, - [ts_external_token__string_start] = true, - }, - [5] = { - [ts_external_token__newline] = true, - [ts_external_token__indent] = true, - [ts_external_token__string_start] = true, - }, - [6] = { - [ts_external_token__newline] = true, - }, - [7] = { - [ts_external_token__string_content] = true, - [ts_external_token__string_end] = true, - }, + [1522] = {.lex_state = 0}, + [1523] = {.lex_state = 62}, + [1524] = {.lex_state = 62}, + [1525] = {.lex_state = 0}, + [1526] = {.lex_state = 62}, + [1527] = {.lex_state = 62}, + [1528] = {.lex_state = 0}, + [1529] = {.lex_state = 62}, + [1530] = {.lex_state = 0}, + [1531] = {.lex_state = 0}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { @@ -10369,7 +7914,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(1), [sym_none] = ACTIONS(1), [sym_comment] = ACTIONS(3), - [sym__semicolon] = ACTIONS(1), + [anon_sym_SEMI] = ACTIONS(1), [sym__newline] = ACTIONS(1), [sym__indent] = ACTIONS(1), [sym__dedent] = ACTIONS(1), @@ -10378,73 +7923,73 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_end] = ACTIONS(1), }, [1] = { - [sym_module] = STATE(1502), - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), + [sym_module] = STATE(1511), + [sym__statement] = STATE(60), + [sym__simple_statements] = STATE(60), [sym_import_statement] = STATE(1209), [sym_future_import_statement] = STATE(1209), [sym_import_from_statement] = STATE(1209), [sym_print_statement] = STATE(1209), [sym_assert_statement] = STATE(1209), [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), + [sym_named_expression] = STATE(974), [sym_return_statement] = STATE(1209), [sym_delete_statement] = STATE(1209), [sym_raise_statement] = STATE(1209), [sym_pass_statement] = STATE(1209), [sym_break_statement] = STATE(1209), [sym_continue_statement] = STATE(1209), - [sym_if_statement] = STATE(64), - [sym_for_statement] = STATE(64), - [sym_while_statement] = STATE(64), - [sym_try_statement] = STATE(64), - [sym_with_statement] = STATE(64), - [sym_match_statement] = STATE(64), - [sym_function_definition] = STATE(64), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), + [sym_if_statement] = STATE(60), + [sym_for_statement] = STATE(60), + [sym_while_statement] = STATE(60), + [sym_try_statement] = STATE(60), + [sym_with_statement] = STATE(60), + [sym_match_statement] = STATE(60), + [sym_function_definition] = STATE(60), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), [sym_global_statement] = STATE(1209), [sym_nonlocal_statement] = STATE(1209), [sym_exec_statement] = STATE(1209), [sym_type_alias_statement] = STATE(1209), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(1002), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(1002), + [sym_class_definition] = STATE(60), + [sym_decorated_definition] = STATE(60), + [sym_decorator] = STATE(981), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(60), + [aux_sym_decorated_definition_repeat1] = STATE(981), [ts_builtin_sym_end] = ACTIONS(5), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), @@ -10493,73 +8038,73 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [2] = { - [sym__statement] = STATE(65), - [sym__simple_statements] = STATE(65), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(65), - [sym_for_statement] = STATE(65), - [sym_while_statement] = STATE(65), - [sym_try_statement] = STATE(65), - [sym_with_statement] = STATE(65), - [sym_match_statement] = STATE(65), - [sym_function_definition] = STATE(65), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(65), - [sym_decorated_definition] = STATE(65), - [sym_decorator] = STATE(996), - [sym_block] = STATE(357), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(65), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), + [sym_block] = STATE(594), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -10608,73 +8153,73 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [3] = { - [sym__statement] = STATE(68), - [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(68), - [sym_for_statement] = STATE(68), - [sym_while_statement] = STATE(68), - [sym_try_statement] = STATE(68), - [sym_with_statement] = STATE(68), - [sym_match_statement] = STATE(68), - [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(68), - [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(587), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(64), + [sym__simple_statements] = STATE(64), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(64), + [sym_for_statement] = STATE(64), + [sym_while_statement] = STATE(64), + [sym_try_statement] = STATE(64), + [sym_with_statement] = STATE(64), + [sym_match_statement] = STATE(64), + [sym_function_definition] = STATE(64), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(64), + [sym_decorated_definition] = STATE(64), + [sym_decorator] = STATE(967), + [sym_block] = STATE(1001), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(64), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -10723,73 +8268,73 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [4] = { - [sym__statement] = STATE(68), - [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(68), - [sym_for_statement] = STATE(68), - [sym_while_statement] = STATE(68), - [sym_try_statement] = STATE(68), - [sym_with_statement] = STATE(68), - [sym_match_statement] = STATE(68), - [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(68), - [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(540), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(967), + [sym_block] = STATE(506), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -10834,77 +8379,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(103), + [sym__dedent] = ACTIONS(105), [sym__string_start] = ACTIONS(81), }, [5] = { - [sym__statement] = STATE(68), - [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(68), - [sym_for_statement] = STATE(68), - [sym_while_statement] = STATE(68), - [sym_try_statement] = STATE(68), - [sym_with_statement] = STATE(68), - [sym_match_statement] = STATE(68), - [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(68), - [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(534), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(967), + [sym_block] = STATE(508), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -10949,77 +8494,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(103), + [sym__dedent] = ACTIONS(105), [sym__string_start] = ACTIONS(81), }, [6] = { - [sym__statement] = STATE(65), - [sym__simple_statements] = STATE(65), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(65), - [sym_for_statement] = STATE(65), - [sym_while_statement] = STATE(65), - [sym_try_statement] = STATE(65), - [sym_with_statement] = STATE(65), - [sym_match_statement] = STATE(65), - [sym_function_definition] = STATE(65), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(65), - [sym_decorated_definition] = STATE(65), - [sym_decorator] = STATE(996), - [sym_block] = STATE(373), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(65), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(967), + [sym_block] = STATE(497), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -11064,77 +8609,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(101), + [sym__dedent] = ACTIONS(105), [sym__string_start] = ACTIONS(81), }, [7] = { - [sym__statement] = STATE(68), - [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(68), - [sym_for_statement] = STATE(68), - [sym_while_statement] = STATE(68), - [sym_try_statement] = STATE(68), - [sym_with_statement] = STATE(68), - [sym_match_statement] = STATE(68), - [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(68), - [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(403), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(967), + [sym_block] = STATE(516), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -11179,77 +8724,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(103), + [sym__dedent] = ACTIONS(105), [sym__string_start] = ACTIONS(81), }, [8] = { - [sym__statement] = STATE(68), - [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(68), - [sym_for_statement] = STATE(68), - [sym_while_statement] = STATE(68), - [sym_try_statement] = STATE(68), - [sym_with_statement] = STATE(68), - [sym_match_statement] = STATE(68), - [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(68), - [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(509), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(63), + [sym_for_statement] = STATE(63), + [sym_while_statement] = STATE(63), + [sym_try_statement] = STATE(63), + [sym_with_statement] = STATE(63), + [sym_match_statement] = STATE(63), + [sym_function_definition] = STATE(63), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(967), + [sym_block] = STATE(379), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -11294,77 +8839,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(103), + [sym__dedent] = ACTIONS(107), [sym__string_start] = ACTIONS(81), }, [9] = { - [sym__statement] = STATE(62), - [sym__simple_statements] = STATE(62), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(62), - [sym_for_statement] = STATE(62), - [sym_while_statement] = STATE(62), - [sym_try_statement] = STATE(62), - [sym_with_statement] = STATE(62), - [sym_match_statement] = STATE(62), - [sym_function_definition] = STATE(62), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(62), - [sym_decorated_definition] = STATE(62), - [sym_decorator] = STATE(996), - [sym_block] = STATE(372), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(62), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(967), + [sym_block] = STATE(527), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -11413,73 +8958,73 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [10] = { - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(61), - [sym_for_statement] = STATE(61), - [sym_while_statement] = STATE(61), - [sym_try_statement] = STATE(61), - [sym_with_statement] = STATE(61), - [sym_match_statement] = STATE(61), - [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), - [sym_block] = STATE(546), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(967), + [sym_block] = STATE(378), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -11524,77 +9069,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(107), + [sym__dedent] = ACTIONS(109), [sym__string_start] = ACTIONS(81), }, [11] = { - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(61), - [sym_for_statement] = STATE(61), - [sym_while_statement] = STATE(61), - [sym_try_statement] = STATE(61), - [sym_with_statement] = STATE(61), - [sym_match_statement] = STATE(61), - [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), - [sym_block] = STATE(279), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), + [sym_block] = STATE(588), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -11639,77 +9184,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(107), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [12] = { - [sym__statement] = STATE(68), - [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(68), - [sym_for_statement] = STATE(68), - [sym_while_statement] = STATE(68), - [sym_try_statement] = STATE(68), - [sym_with_statement] = STATE(68), - [sym_match_statement] = STATE(68), - [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(68), - [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(491), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(967), + [sym_block] = STATE(370), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -11754,77 +9299,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(103), + [sym__dedent] = ACTIONS(111), [sym__string_start] = ACTIONS(81), }, [13] = { - [sym__statement] = STATE(68), - [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(68), - [sym_for_statement] = STATE(68), - [sym_while_statement] = STATE(68), - [sym_try_statement] = STATE(68), - [sym_with_statement] = STATE(68), - [sym_match_statement] = STATE(68), - [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(68), - [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(495), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(69), + [sym__simple_statements] = STATE(69), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(69), + [sym_for_statement] = STATE(69), + [sym_while_statement] = STATE(69), + [sym_try_statement] = STATE(69), + [sym_with_statement] = STATE(69), + [sym_match_statement] = STATE(69), + [sym_function_definition] = STATE(69), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(69), + [sym_decorated_definition] = STATE(69), + [sym_decorator] = STATE(967), + [sym_block] = STATE(369), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(69), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -11869,77 +9414,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(103), + [sym__dedent] = ACTIONS(113), [sym__string_start] = ACTIONS(81), }, [14] = { - [sym__statement] = STATE(68), - [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(68), - [sym_for_statement] = STATE(68), - [sym_while_statement] = STATE(68), - [sym_try_statement] = STATE(68), - [sym_with_statement] = STATE(68), - [sym_match_statement] = STATE(68), - [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(68), - [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(506), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(967), + [sym_block] = STATE(538), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -11984,77 +9529,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(103), + [sym__dedent] = ACTIONS(105), [sym__string_start] = ACTIONS(81), }, [15] = { - [sym__statement] = STATE(68), - [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(68), - [sym_for_statement] = STATE(68), - [sym_while_statement] = STATE(68), - [sym_try_statement] = STATE(68), - [sym_with_statement] = STATE(68), - [sym_match_statement] = STATE(68), - [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(68), - [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(505), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(967), + [sym_block] = STATE(415), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -12099,77 +9644,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(103), + [sym__dedent] = ACTIONS(105), [sym__string_start] = ACTIONS(81), }, [16] = { - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(61), - [sym_for_statement] = STATE(61), - [sym_while_statement] = STATE(61), - [sym_try_statement] = STATE(61), - [sym_with_statement] = STATE(61), - [sym_match_statement] = STATE(61), - [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), - [sym_block] = STATE(408), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(967), + [sym_block] = STATE(489), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -12214,77 +9759,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(107), + [sym__dedent] = ACTIONS(105), [sym__string_start] = ACTIONS(81), }, [17] = { - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(61), - [sym_for_statement] = STATE(61), - [sym_while_statement] = STATE(61), - [sym_try_statement] = STATE(61), - [sym_with_statement] = STATE(61), - [sym_match_statement] = STATE(61), - [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), - [sym_block] = STATE(536), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(967), + [sym_block] = STATE(549), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -12329,77 +9874,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(107), + [sym__dedent] = ACTIONS(105), [sym__string_start] = ACTIONS(81), }, [18] = { - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(61), - [sym_for_statement] = STATE(61), - [sym_while_statement] = STATE(61), - [sym_try_statement] = STATE(61), - [sym_with_statement] = STATE(61), - [sym_match_statement] = STATE(61), - [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), - [sym_block] = STATE(488), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(967), + [sym_block] = STATE(554), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -12444,77 +9989,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(107), + [sym__dedent] = ACTIONS(105), [sym__string_start] = ACTIONS(81), }, [19] = { - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(61), - [sym_for_statement] = STATE(61), - [sym_while_statement] = STATE(61), - [sym_try_statement] = STATE(61), - [sym_with_statement] = STATE(61), - [sym_match_statement] = STATE(61), - [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), - [sym_block] = STATE(556), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(967), + [sym_block] = STATE(498), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -12559,77 +10104,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(107), + [sym__dedent] = ACTIONS(105), [sym__string_start] = ACTIONS(81), }, [20] = { - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(61), - [sym_for_statement] = STATE(61), - [sym_while_statement] = STATE(61), - [sym_try_statement] = STATE(61), - [sym_with_statement] = STATE(61), - [sym_match_statement] = STATE(61), - [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), - [sym_block] = STATE(528), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(69), + [sym__simple_statements] = STATE(69), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(69), + [sym_for_statement] = STATE(69), + [sym_while_statement] = STATE(69), + [sym_try_statement] = STATE(69), + [sym_with_statement] = STATE(69), + [sym_match_statement] = STATE(69), + [sym_function_definition] = STATE(69), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(69), + [sym_decorated_definition] = STATE(69), + [sym_decorator] = STATE(967), + [sym_block] = STATE(359), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(69), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -12674,77 +10219,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(107), + [sym__dedent] = ACTIONS(113), [sym__string_start] = ACTIONS(81), }, [21] = { - [sym__statement] = STATE(68), - [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(68), - [sym_for_statement] = STATE(68), - [sym_while_statement] = STATE(68), - [sym_try_statement] = STATE(68), - [sym_with_statement] = STATE(68), - [sym_match_statement] = STATE(68), - [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(68), - [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(414), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), + [sym_block] = STATE(571), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -12789,77 +10334,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(103), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [22] = { - [sym__statement] = STATE(65), - [sym__simple_statements] = STATE(65), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(65), - [sym_for_statement] = STATE(65), - [sym_while_statement] = STATE(65), - [sym_try_statement] = STATE(65), - [sym_with_statement] = STATE(65), - [sym_match_statement] = STATE(65), - [sym_function_definition] = STATE(65), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(65), - [sym_decorated_definition] = STATE(65), - [sym_decorator] = STATE(996), - [sym_block] = STATE(366), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(65), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(967), + [sym_block] = STATE(436), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -12904,77 +10449,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(101), + [sym__dedent] = ACTIONS(105), [sym__string_start] = ACTIONS(81), }, [23] = { - [sym__statement] = STATE(62), - [sym__simple_statements] = STATE(62), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(62), - [sym_for_statement] = STATE(62), - [sym_while_statement] = STATE(62), - [sym_try_statement] = STATE(62), - [sym_with_statement] = STATE(62), - [sym_match_statement] = STATE(62), - [sym_function_definition] = STATE(62), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(62), - [sym_decorated_definition] = STATE(62), - [sym_decorator] = STATE(996), - [sym_block] = STATE(363), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(62), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(967), + [sym_block] = STATE(570), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -13023,73 +10568,73 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [24] = { - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(61), - [sym_for_statement] = STATE(61), - [sym_while_statement] = STATE(61), - [sym_try_statement] = STATE(61), - [sym_with_statement] = STATE(61), - [sym_match_statement] = STATE(61), - [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), - [sym_block] = STATE(512), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(967), + [sym_block] = STATE(581), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -13134,77 +10679,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(107), + [sym__dedent] = ACTIONS(105), [sym__string_start] = ACTIONS(81), }, [25] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(60), - [sym_for_statement] = STATE(60), - [sym_while_statement] = STATE(60), - [sym_try_statement] = STATE(60), - [sym_with_statement] = STATE(60), - [sym_match_statement] = STATE(60), - [sym_function_definition] = STATE(60), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(996), - [sym_block] = STATE(320), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(967), + [sym_block] = STATE(583), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -13249,77 +10794,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(109), + [sym__dedent] = ACTIONS(105), [sym__string_start] = ACTIONS(81), }, [26] = { - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(61), - [sym_for_statement] = STATE(61), - [sym_while_statement] = STATE(61), - [sym_try_statement] = STATE(61), - [sym_with_statement] = STATE(61), - [sym_match_statement] = STATE(61), - [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(967), [sym_block] = STATE(590), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -13364,77 +10909,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(107), + [sym__dedent] = ACTIONS(105), [sym__string_start] = ACTIONS(81), }, [27] = { - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(61), - [sym_for_statement] = STATE(61), - [sym_while_statement] = STATE(61), - [sym_try_statement] = STATE(61), - [sym_with_statement] = STATE(61), - [sym_match_statement] = STATE(61), - [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), - [sym_block] = STATE(494), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(967), + [sym_block] = STATE(553), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -13479,77 +11024,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(107), + [sym__dedent] = ACTIONS(105), [sym__string_start] = ACTIONS(81), }, [28] = { - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(61), - [sym_for_statement] = STATE(61), - [sym_while_statement] = STATE(61), - [sym_try_statement] = STATE(61), - [sym_with_statement] = STATE(61), - [sym_match_statement] = STATE(61), - [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), - [sym_block] = STATE(557), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(967), + [sym_block] = STATE(551), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -13594,77 +11139,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(107), + [sym__dedent] = ACTIONS(105), [sym__string_start] = ACTIONS(81), }, [29] = { - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(61), - [sym_for_statement] = STATE(61), - [sym_while_statement] = STATE(61), - [sym_try_statement] = STATE(61), - [sym_with_statement] = STATE(61), - [sym_match_statement] = STATE(61), - [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), - [sym_block] = STATE(549), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(967), + [sym_block] = STATE(514), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -13709,77 +11254,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(107), + [sym__dedent] = ACTIONS(105), [sym__string_start] = ACTIONS(81), }, [30] = { - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(61), - [sym_for_statement] = STATE(61), - [sym_while_statement] = STATE(61), - [sym_try_statement] = STATE(61), - [sym_with_statement] = STATE(61), - [sym_match_statement] = STATE(61), - [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), - [sym_block] = STATE(586), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), + [sym_block] = STATE(547), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -13824,77 +11369,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(107), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [31] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(60), - [sym_for_statement] = STATE(60), - [sym_while_statement] = STATE(60), - [sym_try_statement] = STATE(60), - [sym_with_statement] = STATE(60), - [sym_match_statement] = STATE(60), - [sym_function_definition] = STATE(60), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(996), - [sym_block] = STATE(328), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(967), + [sym_block] = STATE(421), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -13939,25 +11484,25 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(109), + [sym__dedent] = ACTIONS(105), [sym__string_start] = ACTIONS(81), }, [32] = { [sym__statement] = STATE(66), [sym__simple_statements] = STATE(66), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), [sym_if_statement] = STATE(66), [sym_for_statement] = STATE(66), [sym_while_statement] = STATE(66), @@ -13965,51 +11510,51 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_with_statement] = STATE(66), [sym_match_statement] = STATE(66), [sym_function_definition] = STATE(66), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), [sym_class_definition] = STATE(66), [sym_decorated_definition] = STATE(66), - [sym_decorator] = STATE(996), - [sym_block] = STATE(329), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_decorator] = STATE(967), + [sym_block] = STATE(281), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [aux_sym_module_repeat1] = STATE(66), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -14054,25 +11599,25 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(111), + [sym__dedent] = ACTIONS(105), [sym__string_start] = ACTIONS(81), }, [33] = { [sym__statement] = STATE(61), [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), [sym_if_statement] = STATE(61), [sym_for_statement] = STATE(61), [sym_while_statement] = STATE(61), @@ -14080,51 +11625,51 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_with_statement] = STATE(61), [sym_match_statement] = STATE(61), [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), [sym_class_definition] = STATE(61), [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), - [sym_block] = STATE(583), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_decorator] = STATE(967), + [sym_block] = STATE(382), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -14169,77 +11714,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(107), + [sym__dedent] = ACTIONS(111), [sym__string_start] = ACTIONS(81), }, [34] = { - [sym__statement] = STATE(68), - [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(68), - [sym_for_statement] = STATE(68), - [sym_while_statement] = STATE(68), - [sym_try_statement] = STATE(68), - [sym_with_statement] = STATE(68), - [sym_match_statement] = STATE(68), - [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(68), - [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(418), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), + [sym_block] = STATE(272), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -14284,77 +11829,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(103), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [35] = { - [sym__statement] = STATE(68), - [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(68), - [sym_for_statement] = STATE(68), - [sym_while_statement] = STATE(68), - [sym_try_statement] = STATE(68), - [sym_with_statement] = STATE(68), - [sym_match_statement] = STATE(68), - [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(68), - [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(489), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), + [sym_block] = STATE(454), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -14399,77 +11944,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(103), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [36] = { - [sym__statement] = STATE(68), - [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(68), - [sym_for_statement] = STATE(68), - [sym_while_statement] = STATE(68), - [sym_try_statement] = STATE(68), - [sym_with_statement] = STATE(68), - [sym_match_statement] = STATE(68), - [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(68), - [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(498), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(967), + [sym_block] = STATE(398), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -14514,77 +12059,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(103), + [sym__dedent] = ACTIONS(105), [sym__string_start] = ACTIONS(81), }, [37] = { - [sym__statement] = STATE(68), - [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(68), - [sym_for_statement] = STATE(68), - [sym_while_statement] = STATE(68), - [sym_try_statement] = STATE(68), - [sym_with_statement] = STATE(68), - [sym_match_statement] = STATE(68), - [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(68), - [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(555), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(69), + [sym__simple_statements] = STATE(69), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(69), + [sym_for_statement] = STATE(69), + [sym_while_statement] = STATE(69), + [sym_try_statement] = STATE(69), + [sym_with_statement] = STATE(69), + [sym_match_statement] = STATE(69), + [sym_function_definition] = STATE(69), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(69), + [sym_decorated_definition] = STATE(69), + [sym_decorator] = STATE(967), + [sym_block] = STATE(377), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(69), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -14629,77 +12174,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(103), + [sym__dedent] = ACTIONS(113), [sym__string_start] = ACTIONS(81), }, [38] = { - [sym__statement] = STATE(68), - [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(68), - [sym_for_statement] = STATE(68), - [sym_while_statement] = STATE(68), - [sym_try_statement] = STATE(68), - [sym_with_statement] = STATE(68), - [sym_match_statement] = STATE(68), - [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(68), - [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(565), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(967), + [sym_block] = STATE(494), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -14744,77 +12289,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(103), + [sym__dedent] = ACTIONS(105), [sym__string_start] = ACTIONS(81), }, [39] = { - [sym__statement] = STATE(68), - [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(68), - [sym_for_statement] = STATE(68), - [sym_while_statement] = STATE(68), - [sym_try_statement] = STATE(68), - [sym_with_statement] = STATE(68), - [sym_match_statement] = STATE(68), - [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(68), - [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(428), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), + [sym_block] = STATE(558), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -14859,77 +12404,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(103), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [40] = { - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(61), - [sym_for_statement] = STATE(61), - [sym_while_statement] = STATE(61), - [sym_try_statement] = STATE(61), - [sym_with_statement] = STATE(61), - [sym_match_statement] = STATE(61), - [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), - [sym_block] = STATE(515), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), + [sym_block] = STATE(536), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -14974,77 +12519,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(107), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [41] = { - [sym__statement] = STATE(68), - [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(68), - [sym_for_statement] = STATE(68), - [sym_while_statement] = STATE(68), - [sym_try_statement] = STATE(68), - [sym_with_statement] = STATE(68), - [sym_match_statement] = STATE(68), - [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(68), - [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(574), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), + [sym_block] = STATE(493), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -15089,77 +12634,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(103), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [42] = { - [sym__statement] = STATE(66), - [sym__simple_statements] = STATE(66), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(66), - [sym_for_statement] = STATE(66), - [sym_while_statement] = STATE(66), - [sym_try_statement] = STATE(66), - [sym_with_statement] = STATE(66), - [sym_match_statement] = STATE(66), - [sym_function_definition] = STATE(66), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(66), - [sym_decorated_definition] = STATE(66), - [sym_decorator] = STATE(996), - [sym_block] = STATE(318), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(66), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), + [sym_block] = STATE(512), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -15204,77 +12749,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(111), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [43] = { - [sym__statement] = STATE(68), - [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(68), - [sym_for_statement] = STATE(68), - [sym_while_statement] = STATE(68), - [sym_try_statement] = STATE(68), - [sym_with_statement] = STATE(68), - [sym_match_statement] = STATE(68), - [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(68), - [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(513), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), + [sym_block] = STATE(534), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -15319,77 +12864,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(103), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [44] = { - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(61), - [sym_for_statement] = STATE(61), - [sym_while_statement] = STATE(61), - [sym_try_statement] = STATE(61), - [sym_with_statement] = STATE(61), - [sym_match_statement] = STATE(61), - [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), - [sym_block] = STATE(533), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), + [sym_block] = STATE(528), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -15434,77 +12979,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(107), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [45] = { - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(61), - [sym_for_statement] = STATE(61), - [sym_while_statement] = STATE(61), - [sym_try_statement] = STATE(61), - [sym_with_statement] = STATE(61), - [sym_match_statement] = STATE(61), - [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), - [sym_block] = STATE(573), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), + [sym_block] = STATE(519), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -15549,77 +13094,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(107), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [46] = { - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(61), - [sym_for_statement] = STATE(61), - [sym_while_statement] = STATE(61), - [sym_try_statement] = STATE(61), - [sym_with_statement] = STATE(61), - [sym_match_statement] = STATE(61), - [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), [sym_block] = STATE(427), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -15664,77 +13209,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(107), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [47] = { - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(61), - [sym_for_statement] = STATE(61), - [sym_while_statement] = STATE(61), - [sym_try_statement] = STATE(61), - [sym_with_statement] = STATE(61), - [sym_match_statement] = STATE(61), - [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), - [sym_block] = STATE(387), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(967), + [sym_block] = STATE(355), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -15779,77 +13324,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(107), + [sym__dedent] = ACTIONS(109), [sym__string_start] = ACTIONS(81), }, [48] = { - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(61), - [sym_for_statement] = STATE(61), - [sym_while_statement] = STATE(61), - [sym_try_statement] = STATE(61), - [sym_with_statement] = STATE(61), - [sym_match_statement] = STATE(61), - [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), - [sym_block] = STATE(496), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), + [sym_block] = STATE(502), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -15894,77 +13439,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(107), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [49] = { - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(61), - [sym_for_statement] = STATE(61), - [sym_while_statement] = STATE(61), - [sym_try_statement] = STATE(61), - [sym_with_statement] = STATE(61), - [sym_match_statement] = STATE(61), - [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), - [sym_block] = STATE(566), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), + [sym_block] = STATE(523), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -16009,77 +13554,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(107), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [50] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(60), - [sym_for_statement] = STATE(60), - [sym_while_statement] = STATE(60), - [sym_try_statement] = STATE(60), - [sym_with_statement] = STATE(60), - [sym_match_statement] = STATE(60), - [sym_function_definition] = STATE(60), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(996), - [sym_block] = STATE(333), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), + [sym_block] = STATE(540), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -16124,77 +13669,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(109), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [51] = { - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(61), - [sym_for_statement] = STATE(61), - [sym_while_statement] = STATE(61), - [sym_try_statement] = STATE(61), - [sym_with_statement] = STATE(61), - [sym_match_statement] = STATE(61), - [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), - [sym_block] = STATE(407), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), + [sym_block] = STATE(463), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -16239,77 +13784,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(107), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [52] = { - [sym__statement] = STATE(68), - [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(68), - [sym_for_statement] = STATE(68), - [sym_while_statement] = STATE(68), - [sym_try_statement] = STATE(68), - [sym_with_statement] = STATE(68), - [sym_match_statement] = STATE(68), - [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(68), - [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(579), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), + [sym_block] = STATE(486), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -16354,77 +13899,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(103), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [53] = { - [sym__statement] = STATE(68), - [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(68), - [sym_for_statement] = STATE(68), - [sym_while_statement] = STATE(68), - [sym_try_statement] = STATE(68), - [sym_with_statement] = STATE(68), - [sym_match_statement] = STATE(68), - [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(68), - [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(581), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), + [sym_block] = STATE(478), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -16469,77 +14014,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(103), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [54] = { - [sym__statement] = STATE(69), - [sym__simple_statements] = STATE(69), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(69), - [sym_for_statement] = STATE(69), - [sym_while_statement] = STATE(69), - [sym_try_statement] = STATE(69), - [sym_with_statement] = STATE(69), - [sym_match_statement] = STATE(69), - [sym_function_definition] = STATE(69), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(69), - [sym_decorated_definition] = STATE(69), - [sym_decorator] = STATE(996), - [sym_block] = STATE(1003), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(69), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), + [sym_block] = STATE(557), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -16584,140 +14129,25 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(113), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [55] = { - [sym__statement] = STATE(69), - [sym__simple_statements] = STATE(69), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(69), - [sym_for_statement] = STATE(69), - [sym_while_statement] = STATE(69), - [sym_try_statement] = STATE(69), - [sym_with_statement] = STATE(69), - [sym_match_statement] = STATE(69), - [sym_function_definition] = STATE(69), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(69), - [sym_decorated_definition] = STATE(69), - [sym_decorator] = STATE(996), - [sym_block] = STATE(983), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(69), - [aux_sym_decorated_definition_repeat1] = STATE(996), - [sym_identifier] = ACTIONS(7), - [anon_sym_import] = ACTIONS(9), - [anon_sym_from] = ACTIONS(11), - [anon_sym_LPAREN] = ACTIONS(13), - [anon_sym_STAR] = ACTIONS(15), - [anon_sym_print] = ACTIONS(17), - [anon_sym_assert] = ACTIONS(19), - [anon_sym_return] = ACTIONS(21), - [anon_sym_del] = ACTIONS(23), - [anon_sym_raise] = ACTIONS(25), - [anon_sym_pass] = ACTIONS(27), - [anon_sym_break] = ACTIONS(29), - [anon_sym_continue] = ACTIONS(31), - [anon_sym_if] = ACTIONS(83), - [anon_sym_async] = ACTIONS(85), - [anon_sym_for] = ACTIONS(87), - [anon_sym_while] = ACTIONS(89), - [anon_sym_try] = ACTIONS(91), - [anon_sym_with] = ACTIONS(93), - [anon_sym_match] = ACTIONS(95), - [anon_sym_DASH] = ACTIONS(47), - [anon_sym_PLUS] = ACTIONS(47), - [anon_sym_LBRACK] = ACTIONS(49), - [anon_sym_LBRACE] = ACTIONS(51), - [anon_sym_STAR_STAR] = ACTIONS(53), - [anon_sym_def] = ACTIONS(97), - [anon_sym_global] = ACTIONS(57), - [anon_sym_nonlocal] = ACTIONS(59), - [anon_sym_exec] = ACTIONS(61), - [anon_sym_type] = ACTIONS(63), - [anon_sym_class] = ACTIONS(99), - [anon_sym_AT] = ACTIONS(67), - [anon_sym_not] = ACTIONS(69), - [anon_sym_TILDE] = ACTIONS(47), - [anon_sym_lambda] = ACTIONS(71), - [anon_sym_yield] = ACTIONS(73), - [sym_ellipsis] = ACTIONS(75), - [sym_integer] = ACTIONS(77), - [sym_float] = ACTIONS(75), - [anon_sym_await] = ACTIONS(79), - [sym_true] = ACTIONS(77), - [sym_false] = ACTIONS(77), - [sym_none] = ACTIONS(77), - [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(113), - [sym__string_start] = ACTIONS(81), - }, - [56] = { [sym__statement] = STATE(68), [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), [sym_if_statement] = STATE(68), [sym_for_statement] = STATE(68), [sym_while_statement] = STATE(68), @@ -16725,51 +14155,51 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_with_statement] = STATE(68), [sym_match_statement] = STATE(68), [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), [sym_class_definition] = STATE(68), [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(265), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_decorator] = STATE(967), + [sym_block] = STATE(366), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -16814,77 +14244,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(103), + [sym__dedent] = ACTIONS(109), [sym__string_start] = ACTIONS(81), }, - [57] = { - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(61), - [sym_for_statement] = STATE(61), - [sym_while_statement] = STATE(61), - [sym_try_statement] = STATE(61), - [sym_with_statement] = STATE(61), - [sym_match_statement] = STATE(61), - [sym_function_definition] = STATE(61), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(996), - [sym_block] = STATE(561), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [56] = { + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(63), + [sym_for_statement] = STATE(63), + [sym_while_statement] = STATE(63), + [sym_try_statement] = STATE(63), + [sym_with_statement] = STATE(63), + [sym_match_statement] = STATE(63), + [sym_function_definition] = STATE(63), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(967), + [sym_block] = STATE(368), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -16932,74 +14362,74 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__dedent] = ACTIONS(107), [sym__string_start] = ACTIONS(81), }, - [58] = { - [sym__statement] = STATE(68), - [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(68), - [sym_for_statement] = STATE(68), - [sym_while_statement] = STATE(68), - [sym_try_statement] = STATE(68), - [sym_with_statement] = STATE(68), - [sym_match_statement] = STATE(68), - [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(68), - [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(517), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [57] = { + [sym__statement] = STATE(64), + [sym__simple_statements] = STATE(64), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(64), + [sym_for_statement] = STATE(64), + [sym_while_statement] = STATE(64), + [sym_try_statement] = STATE(64), + [sym_with_statement] = STATE(64), + [sym_match_statement] = STATE(64), + [sym_function_definition] = STATE(64), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(64), + [sym_decorated_definition] = STATE(64), + [sym_decorator] = STATE(967), + [sym_block] = STATE(1002), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(64), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -17047,74 +14477,74 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__dedent] = ACTIONS(103), [sym__string_start] = ACTIONS(81), }, - [59] = { - [sym__statement] = STATE(68), - [sym__simple_statements] = STATE(68), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(68), - [sym_for_statement] = STATE(68), - [sym_while_statement] = STATE(68), - [sym_try_statement] = STATE(68), - [sym_with_statement] = STATE(68), - [sym_match_statement] = STATE(68), - [sym_function_definition] = STATE(68), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(68), - [sym_decorated_definition] = STATE(68), - [sym_decorator] = STATE(996), - [sym_block] = STATE(554), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(68), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [58] = { + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), + [sym_block] = STATE(487), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -17159,76 +14589,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(103), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, - [60] = { - [sym__statement] = STATE(63), - [sym__simple_statements] = STATE(63), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(63), - [sym_for_statement] = STATE(63), - [sym_while_statement] = STATE(63), - [sym_try_statement] = STATE(63), - [sym_with_statement] = STATE(63), - [sym_match_statement] = STATE(63), - [sym_function_definition] = STATE(63), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(63), - [sym_decorated_definition] = STATE(63), - [sym_decorator] = STATE(996), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(63), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [59] = { + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(967), + [sym_block] = STATE(566), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -17273,76 +14704,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(115), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, - [61] = { - [sym__statement] = STATE(63), - [sym__simple_statements] = STATE(63), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(63), - [sym_for_statement] = STATE(63), - [sym_while_statement] = STATE(63), - [sym_try_statement] = STATE(63), - [sym_with_statement] = STATE(63), - [sym_match_statement] = STATE(63), - [sym_function_definition] = STATE(63), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(63), - [sym_decorated_definition] = STATE(63), - [sym_decorator] = STATE(996), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(63), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [60] = { + [sym__statement] = STATE(62), + [sym__simple_statements] = STATE(62), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_if_statement] = STATE(62), + [sym_for_statement] = STATE(62), + [sym_while_statement] = STATE(62), + [sym_try_statement] = STATE(62), + [sym_with_statement] = STATE(62), + [sym_match_statement] = STATE(62), + [sym_function_definition] = STATE(62), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_class_definition] = STATE(62), + [sym_decorated_definition] = STATE(62), + [sym_decorator] = STATE(981), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(62), + [aux_sym_decorated_definition_repeat1] = STATE(981), + [ts_builtin_sym_end] = ACTIONS(115), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -17356,24 +14788,24 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_pass] = ACTIONS(27), [anon_sym_break] = ACTIONS(29), [anon_sym_continue] = ACTIONS(31), - [anon_sym_if] = ACTIONS(83), - [anon_sym_async] = ACTIONS(85), - [anon_sym_for] = ACTIONS(87), - [anon_sym_while] = ACTIONS(89), - [anon_sym_try] = ACTIONS(91), - [anon_sym_with] = ACTIONS(93), - [anon_sym_match] = ACTIONS(95), + [anon_sym_if] = ACTIONS(33), + [anon_sym_async] = ACTIONS(35), + [anon_sym_for] = ACTIONS(37), + [anon_sym_while] = ACTIONS(39), + [anon_sym_try] = ACTIONS(41), + [anon_sym_with] = ACTIONS(43), + [anon_sym_match] = ACTIONS(45), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), [anon_sym_LBRACE] = ACTIONS(51), [anon_sym_STAR_STAR] = ACTIONS(53), - [anon_sym_def] = ACTIONS(97), + [anon_sym_def] = ACTIONS(55), [anon_sym_global] = ACTIONS(57), [anon_sym_nonlocal] = ACTIONS(59), [anon_sym_exec] = ACTIONS(61), [anon_sym_type] = ACTIONS(63), - [anon_sym_class] = ACTIONS(99), + [anon_sym_class] = ACTIONS(65), [anon_sym_AT] = ACTIONS(67), [anon_sym_not] = ACTIONS(69), [anon_sym_TILDE] = ACTIONS(47), @@ -17387,76 +14819,75 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(117), [sym__string_start] = ACTIONS(81), }, - [62] = { - [sym__statement] = STATE(63), - [sym__simple_statements] = STATE(63), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(63), - [sym_for_statement] = STATE(63), - [sym_while_statement] = STATE(63), - [sym_try_statement] = STATE(63), - [sym_with_statement] = STATE(63), - [sym_match_statement] = STATE(63), - [sym_function_definition] = STATE(63), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(63), - [sym_decorated_definition] = STATE(63), - [sym_decorator] = STATE(996), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(63), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [61] = { + [sym__statement] = STATE(65), + [sym__simple_statements] = STATE(65), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(65), + [sym_for_statement] = STATE(65), + [sym_while_statement] = STATE(65), + [sym_try_statement] = STATE(65), + [sym_with_statement] = STATE(65), + [sym_match_statement] = STATE(65), + [sym_function_definition] = STATE(65), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(65), + [sym_decorated_definition] = STATE(65), + [sym_decorator] = STATE(967), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(65), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -17501,76 +14932,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(119), + [sym__dedent] = ACTIONS(117), [sym__string_start] = ACTIONS(81), }, - [63] = { - [sym__statement] = STATE(63), - [sym__simple_statements] = STATE(63), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(63), - [sym_for_statement] = STATE(63), - [sym_while_statement] = STATE(63), - [sym_try_statement] = STATE(63), - [sym_with_statement] = STATE(63), - [sym_match_statement] = STATE(63), - [sym_function_definition] = STATE(63), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(63), - [sym_decorated_definition] = STATE(63), - [sym_decorator] = STATE(996), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(63), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [62] = { + [sym__statement] = STATE(62), + [sym__simple_statements] = STATE(62), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_if_statement] = STATE(62), + [sym_for_statement] = STATE(62), + [sym_while_statement] = STATE(62), + [sym_try_statement] = STATE(62), + [sym_with_statement] = STATE(62), + [sym_match_statement] = STATE(62), + [sym_function_definition] = STATE(62), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_class_definition] = STATE(62), + [sym_decorated_definition] = STATE(62), + [sym_decorator] = STATE(981), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(62), + [aux_sym_decorated_definition_repeat1] = STATE(981), + [ts_builtin_sym_end] = ACTIONS(119), [sym_identifier] = ACTIONS(121), [anon_sym_import] = ACTIONS(124), [anon_sym_from] = ACTIONS(127), @@ -17615,190 +15047,75 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(226), [sym_none] = ACTIONS(226), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(232), - [sym__string_start] = ACTIONS(234), - }, - [64] = { - [sym__statement] = STATE(67), - [sym__simple_statements] = STATE(67), - [sym_import_statement] = STATE(1209), - [sym_future_import_statement] = STATE(1209), - [sym_import_from_statement] = STATE(1209), - [sym_print_statement] = STATE(1209), - [sym_assert_statement] = STATE(1209), - [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1209), - [sym_delete_statement] = STATE(1209), - [sym_raise_statement] = STATE(1209), - [sym_pass_statement] = STATE(1209), - [sym_break_statement] = STATE(1209), - [sym_continue_statement] = STATE(1209), - [sym_if_statement] = STATE(67), - [sym_for_statement] = STATE(67), - [sym_while_statement] = STATE(67), - [sym_try_statement] = STATE(67), - [sym_with_statement] = STATE(67), - [sym_match_statement] = STATE(67), - [sym_function_definition] = STATE(67), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1209), - [sym_nonlocal_statement] = STATE(1209), - [sym_exec_statement] = STATE(1209), - [sym_type_alias_statement] = STATE(1209), - [sym_class_definition] = STATE(67), - [sym_decorated_definition] = STATE(67), - [sym_decorator] = STATE(1002), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(67), - [aux_sym_decorated_definition_repeat1] = STATE(1002), - [ts_builtin_sym_end] = ACTIONS(237), - [sym_identifier] = ACTIONS(7), - [anon_sym_import] = ACTIONS(9), - [anon_sym_from] = ACTIONS(11), - [anon_sym_LPAREN] = ACTIONS(13), - [anon_sym_STAR] = ACTIONS(15), - [anon_sym_print] = ACTIONS(17), - [anon_sym_assert] = ACTIONS(19), - [anon_sym_return] = ACTIONS(21), - [anon_sym_del] = ACTIONS(23), - [anon_sym_raise] = ACTIONS(25), - [anon_sym_pass] = ACTIONS(27), - [anon_sym_break] = ACTIONS(29), - [anon_sym_continue] = ACTIONS(31), - [anon_sym_if] = ACTIONS(33), - [anon_sym_async] = ACTIONS(35), - [anon_sym_for] = ACTIONS(37), - [anon_sym_while] = ACTIONS(39), - [anon_sym_try] = ACTIONS(41), - [anon_sym_with] = ACTIONS(43), - [anon_sym_match] = ACTIONS(45), - [anon_sym_DASH] = ACTIONS(47), - [anon_sym_PLUS] = ACTIONS(47), - [anon_sym_LBRACK] = ACTIONS(49), - [anon_sym_LBRACE] = ACTIONS(51), - [anon_sym_STAR_STAR] = ACTIONS(53), - [anon_sym_def] = ACTIONS(55), - [anon_sym_global] = ACTIONS(57), - [anon_sym_nonlocal] = ACTIONS(59), - [anon_sym_exec] = ACTIONS(61), - [anon_sym_type] = ACTIONS(63), - [anon_sym_class] = ACTIONS(65), - [anon_sym_AT] = ACTIONS(67), - [anon_sym_not] = ACTIONS(69), - [anon_sym_TILDE] = ACTIONS(47), - [anon_sym_lambda] = ACTIONS(71), - [anon_sym_yield] = ACTIONS(73), - [sym_ellipsis] = ACTIONS(75), - [sym_integer] = ACTIONS(77), - [sym_float] = ACTIONS(75), - [anon_sym_await] = ACTIONS(79), - [sym_true] = ACTIONS(77), - [sym_false] = ACTIONS(77), - [sym_none] = ACTIONS(77), - [sym_comment] = ACTIONS(3), - [sym__string_start] = ACTIONS(81), + [sym__string_start] = ACTIONS(232), }, - [65] = { - [sym__statement] = STATE(63), - [sym__simple_statements] = STATE(63), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(63), - [sym_for_statement] = STATE(63), - [sym_while_statement] = STATE(63), - [sym_try_statement] = STATE(63), - [sym_with_statement] = STATE(63), - [sym_match_statement] = STATE(63), - [sym_function_definition] = STATE(63), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(63), - [sym_decorated_definition] = STATE(63), - [sym_decorator] = STATE(996), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(63), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [63] = { + [sym__statement] = STATE(65), + [sym__simple_statements] = STATE(65), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(65), + [sym_for_statement] = STATE(65), + [sym_while_statement] = STATE(65), + [sym_try_statement] = STATE(65), + [sym_with_statement] = STATE(65), + [sym_match_statement] = STATE(65), + [sym_function_definition] = STATE(65), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(65), + [sym_decorated_definition] = STATE(65), + [sym_decorator] = STATE(967), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(65), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -17843,76 +15160,76 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(239), + [sym__dedent] = ACTIONS(235), [sym__string_start] = ACTIONS(81), }, - [66] = { - [sym__statement] = STATE(63), - [sym__simple_statements] = STATE(63), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(63), - [sym_for_statement] = STATE(63), - [sym_while_statement] = STATE(63), - [sym_try_statement] = STATE(63), - [sym_with_statement] = STATE(63), - [sym_match_statement] = STATE(63), - [sym_function_definition] = STATE(63), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(63), - [sym_decorated_definition] = STATE(63), - [sym_decorator] = STATE(996), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(63), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [64] = { + [sym__statement] = STATE(65), + [sym__simple_statements] = STATE(65), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(65), + [sym_for_statement] = STATE(65), + [sym_while_statement] = STATE(65), + [sym_try_statement] = STATE(65), + [sym_with_statement] = STATE(65), + [sym_match_statement] = STATE(65), + [sym_function_definition] = STATE(65), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(65), + [sym_decorated_definition] = STATE(65), + [sym_decorator] = STATE(967), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(65), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -17957,77 +15274,76 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(241), + [sym__dedent] = ACTIONS(237), [sym__string_start] = ACTIONS(81), }, - [67] = { - [sym__statement] = STATE(67), - [sym__simple_statements] = STATE(67), - [sym_import_statement] = STATE(1209), - [sym_future_import_statement] = STATE(1209), - [sym_import_from_statement] = STATE(1209), - [sym_print_statement] = STATE(1209), - [sym_assert_statement] = STATE(1209), - [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1209), - [sym_delete_statement] = STATE(1209), - [sym_raise_statement] = STATE(1209), - [sym_pass_statement] = STATE(1209), - [sym_break_statement] = STATE(1209), - [sym_continue_statement] = STATE(1209), - [sym_if_statement] = STATE(67), - [sym_for_statement] = STATE(67), - [sym_while_statement] = STATE(67), - [sym_try_statement] = STATE(67), - [sym_with_statement] = STATE(67), - [sym_match_statement] = STATE(67), - [sym_function_definition] = STATE(67), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1209), - [sym_nonlocal_statement] = STATE(1209), - [sym_exec_statement] = STATE(1209), - [sym_type_alias_statement] = STATE(1209), - [sym_class_definition] = STATE(67), - [sym_decorated_definition] = STATE(67), - [sym_decorator] = STATE(1002), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(67), - [aux_sym_decorated_definition_repeat1] = STATE(1002), - [ts_builtin_sym_end] = ACTIONS(232), + [65] = { + [sym__statement] = STATE(65), + [sym__simple_statements] = STATE(65), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(65), + [sym_for_statement] = STATE(65), + [sym_while_statement] = STATE(65), + [sym_try_statement] = STATE(65), + [sym_with_statement] = STATE(65), + [sym_match_statement] = STATE(65), + [sym_function_definition] = STATE(65), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(65), + [sym_decorated_definition] = STATE(65), + [sym_decorator] = STATE(967), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(65), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(121), [anon_sym_import] = ACTIONS(124), [anon_sym_from] = ACTIONS(127), @@ -18041,24 +15357,24 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_pass] = ACTIONS(151), [anon_sym_break] = ACTIONS(154), [anon_sym_continue] = ACTIONS(157), - [anon_sym_if] = ACTIONS(243), - [anon_sym_async] = ACTIONS(246), - [anon_sym_for] = ACTIONS(249), - [anon_sym_while] = ACTIONS(252), - [anon_sym_try] = ACTIONS(255), - [anon_sym_with] = ACTIONS(258), - [anon_sym_match] = ACTIONS(261), + [anon_sym_if] = ACTIONS(239), + [anon_sym_async] = ACTIONS(242), + [anon_sym_for] = ACTIONS(245), + [anon_sym_while] = ACTIONS(248), + [anon_sym_try] = ACTIONS(251), + [anon_sym_with] = ACTIONS(254), + [anon_sym_match] = ACTIONS(257), [anon_sym_DASH] = ACTIONS(181), [anon_sym_PLUS] = ACTIONS(181), [anon_sym_LBRACK] = ACTIONS(184), [anon_sym_LBRACE] = ACTIONS(187), [anon_sym_STAR_STAR] = ACTIONS(190), - [anon_sym_def] = ACTIONS(264), + [anon_sym_def] = ACTIONS(260), [anon_sym_global] = ACTIONS(196), [anon_sym_nonlocal] = ACTIONS(199), [anon_sym_exec] = ACTIONS(202), [anon_sym_type] = ACTIONS(205), - [anon_sym_class] = ACTIONS(267), + [anon_sym_class] = ACTIONS(263), [anon_sym_AT] = ACTIONS(211), [anon_sym_not] = ACTIONS(214), [anon_sym_TILDE] = ACTIONS(181), @@ -18072,75 +15388,76 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(226), [sym_none] = ACTIONS(226), [sym_comment] = ACTIONS(3), - [sym__string_start] = ACTIONS(234), + [sym__dedent] = ACTIONS(119), + [sym__string_start] = ACTIONS(232), }, - [68] = { - [sym__statement] = STATE(63), - [sym__simple_statements] = STATE(63), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(63), - [sym_for_statement] = STATE(63), - [sym_while_statement] = STATE(63), - [sym_try_statement] = STATE(63), - [sym_with_statement] = STATE(63), - [sym_match_statement] = STATE(63), - [sym_function_definition] = STATE(63), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(63), - [sym_decorated_definition] = STATE(63), - [sym_decorator] = STATE(996), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(63), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [66] = { + [sym__statement] = STATE(65), + [sym__simple_statements] = STATE(65), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(65), + [sym_for_statement] = STATE(65), + [sym_while_statement] = STATE(65), + [sym_try_statement] = STATE(65), + [sym_with_statement] = STATE(65), + [sym_match_statement] = STATE(65), + [sym_function_definition] = STATE(65), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(65), + [sym_decorated_definition] = STATE(65), + [sym_decorator] = STATE(967), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(65), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -18185,76 +15502,304 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(270), + [sym__dedent] = ACTIONS(266), [sym__string_start] = ACTIONS(81), }, - [69] = { - [sym__statement] = STATE(63), - [sym__simple_statements] = STATE(63), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_if_statement] = STATE(63), - [sym_for_statement] = STATE(63), - [sym_while_statement] = STATE(63), - [sym_try_statement] = STATE(63), - [sym_with_statement] = STATE(63), - [sym_match_statement] = STATE(63), - [sym_function_definition] = STATE(63), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_class_definition] = STATE(63), - [sym_decorated_definition] = STATE(63), - [sym_decorator] = STATE(996), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [aux_sym_module_repeat1] = STATE(63), - [aux_sym_decorated_definition_repeat1] = STATE(996), + [67] = { + [sym__statement] = STATE(65), + [sym__simple_statements] = STATE(65), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(65), + [sym_for_statement] = STATE(65), + [sym_while_statement] = STATE(65), + [sym_try_statement] = STATE(65), + [sym_with_statement] = STATE(65), + [sym_match_statement] = STATE(65), + [sym_function_definition] = STATE(65), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(65), + [sym_decorated_definition] = STATE(65), + [sym_decorator] = STATE(967), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(65), + [aux_sym_decorated_definition_repeat1] = STATE(967), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(268), + [sym__string_start] = ACTIONS(81), + }, + [68] = { + [sym__statement] = STATE(65), + [sym__simple_statements] = STATE(65), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(65), + [sym_for_statement] = STATE(65), + [sym_while_statement] = STATE(65), + [sym_try_statement] = STATE(65), + [sym_with_statement] = STATE(65), + [sym_match_statement] = STATE(65), + [sym_function_definition] = STATE(65), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(65), + [sym_decorated_definition] = STATE(65), + [sym_decorator] = STATE(967), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(65), + [aux_sym_decorated_definition_repeat1] = STATE(967), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(270), + [sym__string_start] = ACTIONS(81), + }, + [69] = { + [sym__statement] = STATE(65), + [sym__simple_statements] = STATE(65), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_if_statement] = STATE(65), + [sym_for_statement] = STATE(65), + [sym_while_statement] = STATE(65), + [sym_try_statement] = STATE(65), + [sym_with_statement] = STATE(65), + [sym_match_statement] = STATE(65), + [sym_function_definition] = STATE(65), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_class_definition] = STATE(65), + [sym_decorated_definition] = STATE(65), + [sym_decorator] = STATE(967), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [aux_sym_module_repeat1] = STATE(65), + [aux_sym_decorated_definition_repeat1] = STATE(967), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -18303,34 +15848,34 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [70] = { - [sym_named_expression] = STATE(900), - [sym_list_splat] = STATE(1366), - [sym_dictionary_splat] = STATE(1366), - [sym_expression_list] = STATE(1452), - [sym_expression] = STATE(1079), + [sym_named_expression] = STATE(905), + [sym_list_splat] = STATE(1373), + [sym_dictionary_splat] = STATE(1373), + [sym_expression_list] = STATE(1459), + [sym_expression] = STATE(1058), [sym_primary_expression] = STATE(630), - [sym_not_operator] = STATE(900), - [sym_boolean_operator] = STATE(900), - [sym_binary_operator] = STATE(642), - [sym_unary_operator] = STATE(642), - [sym_comparison_operator] = STATE(900), - [sym_lambda] = STATE(900), - [sym_attribute] = STATE(642), - [sym_subscript] = STATE(642), - [sym_call] = STATE(642), - [sym_list] = STATE(642), - [sym_set] = STATE(642), - [sym_tuple] = STATE(642), - [sym_dictionary] = STATE(642), - [sym_list_comprehension] = STATE(642), - [sym_dictionary_comprehension] = STATE(642), - [sym_set_comprehension] = STATE(642), - [sym_generator_expression] = STATE(642), - [sym_parenthesized_expression] = STATE(642), - [sym_conditional_expression] = STATE(900), - [sym_concatenated_string] = STATE(642), - [sym_string] = STATE(600), - [sym_await] = STATE(900), + [sym_not_operator] = STATE(905), + [sym_boolean_operator] = STATE(905), + [sym_binary_operator] = STATE(622), + [sym_unary_operator] = STATE(622), + [sym_comparison_operator] = STATE(905), + [sym_lambda] = STATE(905), + [sym_attribute] = STATE(622), + [sym_subscript] = STATE(622), + [sym_call] = STATE(622), + [sym_list] = STATE(622), + [sym_set] = STATE(622), + [sym_tuple] = STATE(622), + [sym_dictionary] = STATE(622), + [sym_list_comprehension] = STATE(622), + [sym_dictionary_comprehension] = STATE(622), + [sym_set_comprehension] = STATE(622), + [sym_generator_expression] = STATE(622), + [sym_parenthesized_expression] = STATE(622), + [sym_conditional_expression] = STATE(905), + [sym_concatenated_string] = STATE(622), + [sym_string] = STATE(607), + [sym_await] = STATE(905), [sym_identifier] = ACTIONS(274), [anon_sym_DOT] = ACTIONS(276), [anon_sym_LPAREN] = ACTIONS(278), @@ -18394,39 +15939,39 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(311), [sym_none] = ACTIONS(311), [sym_comment] = ACTIONS(3), - [sym__semicolon] = ACTIONS(303), + [anon_sym_SEMI] = ACTIONS(303), [sym__newline] = ACTIONS(303), [sym__string_start] = ACTIONS(315), }, [71] = { - [sym_named_expression] = STATE(900), - [sym_list_splat] = STATE(1366), - [sym_dictionary_splat] = STATE(1366), - [sym_expression_list] = STATE(1493), - [sym_expression] = STATE(1080), + [sym_named_expression] = STATE(905), + [sym_list_splat] = STATE(1373), + [sym_dictionary_splat] = STATE(1373), + [sym_expression_list] = STATE(1423), + [sym_expression] = STATE(1092), [sym_primary_expression] = STATE(630), - [sym_not_operator] = STATE(900), - [sym_boolean_operator] = STATE(900), - [sym_binary_operator] = STATE(642), - [sym_unary_operator] = STATE(642), - [sym_comparison_operator] = STATE(900), - [sym_lambda] = STATE(900), - [sym_attribute] = STATE(642), - [sym_subscript] = STATE(642), - [sym_call] = STATE(642), - [sym_list] = STATE(642), - [sym_set] = STATE(642), - [sym_tuple] = STATE(642), - [sym_dictionary] = STATE(642), - [sym_list_comprehension] = STATE(642), - [sym_dictionary_comprehension] = STATE(642), - [sym_set_comprehension] = STATE(642), - [sym_generator_expression] = STATE(642), - [sym_parenthesized_expression] = STATE(642), - [sym_conditional_expression] = STATE(900), - [sym_concatenated_string] = STATE(642), - [sym_string] = STATE(600), - [sym_await] = STATE(900), + [sym_not_operator] = STATE(905), + [sym_boolean_operator] = STATE(905), + [sym_binary_operator] = STATE(622), + [sym_unary_operator] = STATE(622), + [sym_comparison_operator] = STATE(905), + [sym_lambda] = STATE(905), + [sym_attribute] = STATE(622), + [sym_subscript] = STATE(622), + [sym_call] = STATE(622), + [sym_list] = STATE(622), + [sym_set] = STATE(622), + [sym_tuple] = STATE(622), + [sym_dictionary] = STATE(622), + [sym_list_comprehension] = STATE(622), + [sym_dictionary_comprehension] = STATE(622), + [sym_set_comprehension] = STATE(622), + [sym_generator_expression] = STATE(622), + [sym_parenthesized_expression] = STATE(622), + [sym_conditional_expression] = STATE(905), + [sym_concatenated_string] = STATE(622), + [sym_string] = STATE(607), + [sym_await] = STATE(905), [sym_identifier] = ACTIONS(274), [anon_sym_DOT] = ACTIONS(276), [anon_sym_LPAREN] = ACTIONS(278), @@ -18490,64 +16035,64 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(311), [sym_none] = ACTIONS(311), [sym_comment] = ACTIONS(3), - [sym__semicolon] = ACTIONS(303), + [anon_sym_SEMI] = ACTIONS(303), [sym__newline] = ACTIONS(303), [sym__string_start] = ACTIONS(315), }, [72] = { - [sym__simple_statements] = STATE(550), + [sym__simple_statements] = STATE(569), [sym_import_statement] = STATE(1209), [sym_future_import_statement] = STATE(1209), [sym_import_from_statement] = STATE(1209), [sym_print_statement] = STATE(1209), [sym_assert_statement] = STATE(1209), [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), + [sym_named_expression] = STATE(974), [sym_return_statement] = STATE(1209), [sym_delete_statement] = STATE(1209), [sym_raise_statement] = STATE(1209), [sym_pass_statement] = STATE(1209), [sym_break_statement] = STATE(1209), [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), [sym_global_statement] = STATE(1209), [sym_nonlocal_statement] = STATE(1209), [sym_exec_statement] = STATE(1209), [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -18589,59 +16134,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [73] = { - [sym__simple_statements] = STATE(432), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(490), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -18683,59 +16228,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [74] = { - [sym__simple_statements] = STATE(327), - [sym_import_statement] = STATE(1248), - [sym_future_import_statement] = STATE(1248), - [sym_import_from_statement] = STATE(1248), - [sym_print_statement] = STATE(1248), - [sym_assert_statement] = STATE(1248), - [sym_expression_statement] = STATE(1248), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1248), - [sym_delete_statement] = STATE(1248), - [sym_raise_statement] = STATE(1248), - [sym_pass_statement] = STATE(1248), - [sym_break_statement] = STATE(1248), - [sym_continue_statement] = STATE(1248), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1248), - [sym_nonlocal_statement] = STATE(1248), - [sym_exec_statement] = STATE(1248), - [sym_type_alias_statement] = STATE(1248), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(461), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -18777,153 +16322,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [75] = { - [sym_chevron] = STATE(1150), - [sym_named_expression] = STATE(1009), - [sym_expression] = STATE(1043), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_attribute] = STATE(797), - [sym_subscript] = STATE(797), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [sym_identifier] = ACTIONS(331), - [anon_sym_DOT] = ACTIONS(276), - [anon_sym_LPAREN] = ACTIONS(303), - [anon_sym_COMMA] = ACTIONS(280), - [anon_sym_STAR] = ACTIONS(276), - [anon_sym_print] = ACTIONS(333), - [anon_sym_GT_GT] = ACTIONS(335), - [anon_sym_COLON_EQ] = ACTIONS(287), - [anon_sym_if] = ACTIONS(276), - [anon_sym_COLON] = ACTIONS(289), - [anon_sym_async] = ACTIONS(333), - [anon_sym_in] = ACTIONS(276), - [anon_sym_match] = ACTIONS(333), - [anon_sym_PIPE] = ACTIONS(276), - [anon_sym_DASH] = ACTIONS(276), - [anon_sym_PLUS] = ACTIONS(276), - [anon_sym_LBRACK] = ACTIONS(303), - [anon_sym_LBRACE] = ACTIONS(51), - [anon_sym_STAR_STAR] = ACTIONS(276), - [anon_sym_EQ] = ACTIONS(289), - [anon_sym_exec] = ACTIONS(333), - [anon_sym_type] = ACTIONS(333), - [anon_sym_AT] = ACTIONS(276), - [anon_sym_not] = ACTIONS(276), - [anon_sym_and] = ACTIONS(276), - [anon_sym_or] = ACTIONS(276), - [anon_sym_SLASH] = ACTIONS(276), - [anon_sym_PERCENT] = ACTIONS(276), - [anon_sym_SLASH_SLASH] = ACTIONS(276), - [anon_sym_AMP] = ACTIONS(276), - [anon_sym_CARET] = ACTIONS(276), - [anon_sym_LT_LT] = ACTIONS(276), - [anon_sym_TILDE] = ACTIONS(47), - [anon_sym_LT] = ACTIONS(276), - [anon_sym_LT_EQ] = ACTIONS(303), - [anon_sym_EQ_EQ] = ACTIONS(303), - [anon_sym_BANG_EQ] = ACTIONS(303), - [anon_sym_GT_EQ] = ACTIONS(303), - [anon_sym_GT] = ACTIONS(276), - [anon_sym_LT_GT] = ACTIONS(303), - [anon_sym_is] = ACTIONS(276), - [anon_sym_lambda] = ACTIONS(71), - [anon_sym_PLUS_EQ] = ACTIONS(307), - [anon_sym_DASH_EQ] = ACTIONS(307), - [anon_sym_STAR_EQ] = ACTIONS(307), - [anon_sym_SLASH_EQ] = ACTIONS(307), - [anon_sym_AT_EQ] = ACTIONS(307), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(307), - [anon_sym_PERCENT_EQ] = ACTIONS(307), - [anon_sym_STAR_STAR_EQ] = ACTIONS(307), - [anon_sym_GT_GT_EQ] = ACTIONS(307), - [anon_sym_LT_LT_EQ] = ACTIONS(307), - [anon_sym_AMP_EQ] = ACTIONS(307), - [anon_sym_CARET_EQ] = ACTIONS(307), - [anon_sym_PIPE_EQ] = ACTIONS(307), - [sym_ellipsis] = ACTIONS(75), - [sym_integer] = ACTIONS(77), - [sym_float] = ACTIONS(75), - [anon_sym_await] = ACTIONS(337), - [sym_true] = ACTIONS(77), - [sym_false] = ACTIONS(77), - [sym_none] = ACTIONS(77), - [sym_comment] = ACTIONS(3), - [sym__semicolon] = ACTIONS(303), - [sym__newline] = ACTIONS(303), - [sym__string_start] = ACTIONS(81), - }, - [76] = { - [sym__simple_statements] = STATE(340), - [sym_import_statement] = STATE(1261), - [sym_future_import_statement] = STATE(1261), - [sym_import_from_statement] = STATE(1261), - [sym_print_statement] = STATE(1261), - [sym_assert_statement] = STATE(1261), - [sym_expression_statement] = STATE(1261), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1261), - [sym_delete_statement] = STATE(1261), - [sym_raise_statement] = STATE(1261), - [sym_pass_statement] = STATE(1261), - [sym_break_statement] = STATE(1261), - [sym_continue_statement] = STATE(1261), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1261), - [sym_nonlocal_statement] = STATE(1261), - [sym_exec_statement] = STATE(1261), - [sym_type_alias_statement] = STATE(1261), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(505), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -18960,64 +16411,64 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__newline] = ACTIONS(339), - [sym__indent] = ACTIONS(341), + [sym__newline] = ACTIONS(331), + [sym__indent] = ACTIONS(333), [sym__string_start] = ACTIONS(81), }, - [77] = { - [sym__simple_statements] = STATE(530), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [76] = { + [sym__simple_statements] = STATE(533), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -19054,64 +16505,64 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__newline] = ACTIONS(343), - [sym__indent] = ACTIONS(345), + [sym__newline] = ACTIONS(335), + [sym__indent] = ACTIONS(337), [sym__string_start] = ACTIONS(81), }, - [78] = { - [sym__simple_statements] = STATE(521), + [77] = { + [sym__simple_statements] = STATE(586), [sym_import_statement] = STATE(1209), [sym_future_import_statement] = STATE(1209), [sym_import_from_statement] = STATE(1209), [sym_print_statement] = STATE(1209), [sym_assert_statement] = STATE(1209), [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), + [sym_named_expression] = STATE(974), [sym_return_statement] = STATE(1209), [sym_delete_statement] = STATE(1209), [sym_raise_statement] = STATE(1209), [sym_pass_statement] = STATE(1209), [sym_break_statement] = STATE(1209), [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), [sym_global_statement] = STATE(1209), [sym_nonlocal_statement] = STATE(1209), [sym_exec_statement] = STATE(1209), [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -19148,64 +16599,64 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__newline] = ACTIONS(347), - [sym__indent] = ACTIONS(349), + [sym__newline] = ACTIONS(339), + [sym__indent] = ACTIONS(341), [sym__string_start] = ACTIONS(81), }, - [79] = { - [sym__simple_statements] = STATE(548), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [78] = { + [sym__simple_statements] = STATE(279), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -19242,64 +16693,64 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__newline] = ACTIONS(351), - [sym__indent] = ACTIONS(353), + [sym__newline] = ACTIONS(343), + [sym__indent] = ACTIONS(345), [sym__string_start] = ACTIONS(81), }, - [80] = { - [sym__simple_statements] = STATE(325), - [sym_import_statement] = STATE(1261), - [sym_future_import_statement] = STATE(1261), - [sym_import_from_statement] = STATE(1261), - [sym_print_statement] = STATE(1261), - [sym_assert_statement] = STATE(1261), - [sym_expression_statement] = STATE(1261), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1261), - [sym_delete_statement] = STATE(1261), - [sym_raise_statement] = STATE(1261), - [sym_pass_statement] = STATE(1261), - [sym_break_statement] = STATE(1261), - [sym_continue_statement] = STATE(1261), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1261), - [sym_nonlocal_statement] = STATE(1261), - [sym_exec_statement] = STATE(1261), - [sym_type_alias_statement] = STATE(1261), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [79] = { + [sym__simple_statements] = STATE(582), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -19336,64 +16787,64 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__newline] = ACTIONS(355), - [sym__indent] = ACTIONS(357), + [sym__newline] = ACTIONS(347), + [sym__indent] = ACTIONS(349), [sym__string_start] = ACTIONS(81), }, - [81] = { - [sym__simple_statements] = STATE(535), - [sym_import_statement] = STATE(1209), - [sym_future_import_statement] = STATE(1209), - [sym_import_from_statement] = STATE(1209), - [sym_print_statement] = STATE(1209), - [sym_assert_statement] = STATE(1209), - [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1209), - [sym_delete_statement] = STATE(1209), - [sym_raise_statement] = STATE(1209), - [sym_pass_statement] = STATE(1209), - [sym_break_statement] = STATE(1209), - [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1209), - [sym_nonlocal_statement] = STATE(1209), - [sym_exec_statement] = STATE(1209), - [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [80] = { + [sym__simple_statements] = STATE(332), + [sym_import_statement] = STATE(1140), + [sym_future_import_statement] = STATE(1140), + [sym_import_from_statement] = STATE(1140), + [sym_print_statement] = STATE(1140), + [sym_assert_statement] = STATE(1140), + [sym_expression_statement] = STATE(1140), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1140), + [sym_delete_statement] = STATE(1140), + [sym_raise_statement] = STATE(1140), + [sym_pass_statement] = STATE(1140), + [sym_break_statement] = STATE(1140), + [sym_continue_statement] = STATE(1140), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1140), + [sym_nonlocal_statement] = STATE(1140), + [sym_exec_statement] = STATE(1140), + [sym_type_alias_statement] = STATE(1140), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -19430,64 +16881,64 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__newline] = ACTIONS(359), - [sym__indent] = ACTIONS(361), + [sym__newline] = ACTIONS(351), + [sym__indent] = ACTIONS(353), [sym__string_start] = ACTIONS(81), }, - [82] = { - [sym__simple_statements] = STATE(508), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [81] = { + [sym__simple_statements] = STATE(374), + [sym_import_statement] = STATE(1149), + [sym_future_import_statement] = STATE(1149), + [sym_import_from_statement] = STATE(1149), + [sym_print_statement] = STATE(1149), + [sym_assert_statement] = STATE(1149), + [sym_expression_statement] = STATE(1149), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1149), + [sym_delete_statement] = STATE(1149), + [sym_raise_statement] = STATE(1149), + [sym_pass_statement] = STATE(1149), + [sym_break_statement] = STATE(1149), + [sym_continue_statement] = STATE(1149), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1149), + [sym_nonlocal_statement] = STATE(1149), + [sym_exec_statement] = STATE(1149), + [sym_type_alias_statement] = STATE(1149), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -19524,64 +16975,64 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__newline] = ACTIONS(363), - [sym__indent] = ACTIONS(365), + [sym__newline] = ACTIONS(355), + [sym__indent] = ACTIONS(357), [sym__string_start] = ACTIONS(81), }, - [83] = { - [sym__simple_statements] = STATE(377), - [sym_import_statement] = STATE(1244), - [sym_future_import_statement] = STATE(1244), - [sym_import_from_statement] = STATE(1244), - [sym_print_statement] = STATE(1244), - [sym_assert_statement] = STATE(1244), - [sym_expression_statement] = STATE(1244), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1244), - [sym_delete_statement] = STATE(1244), - [sym_raise_statement] = STATE(1244), - [sym_pass_statement] = STATE(1244), - [sym_break_statement] = STATE(1244), - [sym_continue_statement] = STATE(1244), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1244), - [sym_nonlocal_statement] = STATE(1244), - [sym_exec_statement] = STATE(1244), - [sym_type_alias_statement] = STATE(1244), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [82] = { + [sym__simple_statements] = STATE(499), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -19618,64 +17069,64 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__newline] = ACTIONS(367), - [sym__indent] = ACTIONS(369), + [sym__newline] = ACTIONS(359), + [sym__indent] = ACTIONS(361), [sym__string_start] = ACTIONS(81), }, - [84] = { - [sym__simple_statements] = STATE(524), - [sym_import_statement] = STATE(1209), - [sym_future_import_statement] = STATE(1209), - [sym_import_from_statement] = STATE(1209), - [sym_print_statement] = STATE(1209), - [sym_assert_statement] = STATE(1209), - [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1209), - [sym_delete_statement] = STATE(1209), - [sym_raise_statement] = STATE(1209), - [sym_pass_statement] = STATE(1209), - [sym_break_statement] = STATE(1209), - [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1209), - [sym_nonlocal_statement] = STATE(1209), - [sym_exec_statement] = STATE(1209), - [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [83] = { + [sym__simple_statements] = STATE(564), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -19712,64 +17163,64 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__newline] = ACTIONS(371), - [sym__indent] = ACTIONS(373), + [sym__newline] = ACTIONS(363), + [sym__indent] = ACTIONS(365), [sym__string_start] = ACTIONS(81), }, - [85] = { - [sym__simple_statements] = STATE(316), - [sym_import_statement] = STATE(1238), - [sym_future_import_statement] = STATE(1238), - [sym_import_from_statement] = STATE(1238), - [sym_print_statement] = STATE(1238), - [sym_assert_statement] = STATE(1238), - [sym_expression_statement] = STATE(1238), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1238), - [sym_delete_statement] = STATE(1238), - [sym_raise_statement] = STATE(1238), - [sym_pass_statement] = STATE(1238), - [sym_break_statement] = STATE(1238), - [sym_continue_statement] = STATE(1238), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1238), - [sym_nonlocal_statement] = STATE(1238), - [sym_exec_statement] = STATE(1238), - [sym_type_alias_statement] = STATE(1238), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [84] = { + [sym__simple_statements] = STATE(589), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -19806,64 +17257,64 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__newline] = ACTIONS(375), - [sym__indent] = ACTIONS(377), + [sym__newline] = ACTIONS(367), + [sym__indent] = ACTIONS(369), [sym__string_start] = ACTIONS(81), }, - [86] = { - [sym__simple_statements] = STATE(532), + [85] = { + [sym__simple_statements] = STATE(552), [sym_import_statement] = STATE(1209), [sym_future_import_statement] = STATE(1209), [sym_import_from_statement] = STATE(1209), [sym_print_statement] = STATE(1209), [sym_assert_statement] = STATE(1209), [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), + [sym_named_expression] = STATE(974), [sym_return_statement] = STATE(1209), [sym_delete_statement] = STATE(1209), [sym_raise_statement] = STATE(1209), [sym_pass_statement] = STATE(1209), [sym_break_statement] = STATE(1209), [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), [sym_global_statement] = STATE(1209), [sym_nonlocal_statement] = STATE(1209), [sym_exec_statement] = STATE(1209), [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -19900,64 +17351,64 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__newline] = ACTIONS(379), - [sym__indent] = ACTIONS(381), + [sym__newline] = ACTIONS(371), + [sym__indent] = ACTIONS(373), [sym__string_start] = ACTIONS(81), }, - [87] = { - [sym__simple_statements] = STATE(547), - [sym_import_statement] = STATE(1209), - [sym_future_import_statement] = STATE(1209), - [sym_import_from_statement] = STATE(1209), - [sym_print_statement] = STATE(1209), - [sym_assert_statement] = STATE(1209), - [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1209), - [sym_delete_statement] = STATE(1209), - [sym_raise_statement] = STATE(1209), - [sym_pass_statement] = STATE(1209), - [sym_break_statement] = STATE(1209), - [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1209), - [sym_nonlocal_statement] = STATE(1209), - [sym_exec_statement] = STATE(1209), - [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [86] = { + [sym__simple_statements] = STATE(445), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -19994,64 +17445,158 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__newline] = ACTIONS(383), - [sym__indent] = ACTIONS(385), + [sym__newline] = ACTIONS(375), + [sym__indent] = ACTIONS(377), + [sym__string_start] = ACTIONS(81), + }, + [87] = { + [sym_chevron] = STATE(1184), + [sym_named_expression] = STATE(974), + [sym_expression] = STATE(1055), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_attribute] = STATE(795), + [sym_subscript] = STATE(795), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [sym_identifier] = ACTIONS(379), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(303), + [anon_sym_COMMA] = ACTIONS(280), + [anon_sym_STAR] = ACTIONS(276), + [anon_sym_print] = ACTIONS(381), + [anon_sym_GT_GT] = ACTIONS(383), + [anon_sym_COLON_EQ] = ACTIONS(287), + [anon_sym_if] = ACTIONS(276), + [anon_sym_COLON] = ACTIONS(289), + [anon_sym_async] = ACTIONS(381), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(381), + [anon_sym_PIPE] = ACTIONS(276), + [anon_sym_DASH] = ACTIONS(276), + [anon_sym_PLUS] = ACTIONS(276), + [anon_sym_LBRACK] = ACTIONS(303), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(276), + [anon_sym_EQ] = ACTIONS(289), + [anon_sym_exec] = ACTIONS(381), + [anon_sym_type] = ACTIONS(381), + [anon_sym_AT] = ACTIONS(276), + [anon_sym_not] = ACTIONS(276), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(276), + [anon_sym_SLASH_SLASH] = ACTIONS(276), + [anon_sym_AMP] = ACTIONS(276), + [anon_sym_CARET] = ACTIONS(276), + [anon_sym_LT_LT] = ACTIONS(276), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_PLUS_EQ] = ACTIONS(307), + [anon_sym_DASH_EQ] = ACTIONS(307), + [anon_sym_STAR_EQ] = ACTIONS(307), + [anon_sym_SLASH_EQ] = ACTIONS(307), + [anon_sym_AT_EQ] = ACTIONS(307), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(307), + [anon_sym_PERCENT_EQ] = ACTIONS(307), + [anon_sym_STAR_STAR_EQ] = ACTIONS(307), + [anon_sym_GT_GT_EQ] = ACTIONS(307), + [anon_sym_LT_LT_EQ] = ACTIONS(307), + [anon_sym_AMP_EQ] = ACTIONS(307), + [anon_sym_CARET_EQ] = ACTIONS(307), + [anon_sym_PIPE_EQ] = ACTIONS(307), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(385), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [anon_sym_SEMI] = ACTIONS(303), + [sym__newline] = ACTIONS(303), [sym__string_start] = ACTIONS(81), }, [88] = { - [sym__simple_statements] = STATE(401), - [sym_import_statement] = STATE(1209), - [sym_future_import_statement] = STATE(1209), - [sym_import_from_statement] = STATE(1209), - [sym_print_statement] = STATE(1209), - [sym_assert_statement] = STATE(1209), - [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1209), - [sym_delete_statement] = STATE(1209), - [sym_raise_statement] = STATE(1209), - [sym_pass_statement] = STATE(1209), - [sym_break_statement] = STATE(1209), - [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1209), - [sym_nonlocal_statement] = STATE(1209), - [sym_exec_statement] = STATE(1209), - [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(577), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -20093,59 +17638,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [89] = { - [sym__simple_statements] = STATE(502), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(976), + [sym_import_statement] = STATE(1207), + [sym_future_import_statement] = STATE(1207), + [sym_import_from_statement] = STATE(1207), + [sym_print_statement] = STATE(1207), + [sym_assert_statement] = STATE(1207), + [sym_expression_statement] = STATE(1207), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1207), + [sym_delete_statement] = STATE(1207), + [sym_raise_statement] = STATE(1207), + [sym_pass_statement] = STATE(1207), + [sym_break_statement] = STATE(1207), + [sym_continue_statement] = STATE(1207), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1207), + [sym_nonlocal_statement] = STATE(1207), + [sym_exec_statement] = STATE(1207), + [sym_type_alias_statement] = STATE(1207), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -20187,59 +17732,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [90] = { - [sym__simple_statements] = STATE(526), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(491), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -20281,59 +17826,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [91] = { - [sym__simple_statements] = STATE(527), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(587), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -20375,59 +17920,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [92] = { - [sym__simple_statements] = STATE(531), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(373), + [sym_import_statement] = STATE(1178), + [sym_future_import_statement] = STATE(1178), + [sym_import_from_statement] = STATE(1178), + [sym_print_statement] = STATE(1178), + [sym_assert_statement] = STATE(1178), + [sym_expression_statement] = STATE(1178), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1178), + [sym_delete_statement] = STATE(1178), + [sym_raise_statement] = STATE(1178), + [sym_pass_statement] = STATE(1178), + [sym_break_statement] = STATE(1178), + [sym_continue_statement] = STATE(1178), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1178), + [sym_nonlocal_statement] = STATE(1178), + [sym_exec_statement] = STATE(1178), + [sym_type_alias_statement] = STATE(1178), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -20469,59 +18014,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [93] = { - [sym__simple_statements] = STATE(268), - [sym_import_statement] = STATE(1209), - [sym_future_import_statement] = STATE(1209), - [sym_import_from_statement] = STATE(1209), - [sym_print_statement] = STATE(1209), - [sym_assert_statement] = STATE(1209), - [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1209), - [sym_delete_statement] = STATE(1209), - [sym_raise_statement] = STATE(1209), - [sym_pass_statement] = STATE(1209), - [sym_break_statement] = STATE(1209), - [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1209), - [sym_nonlocal_statement] = STATE(1209), - [sym_exec_statement] = STATE(1209), - [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(372), + [sym_import_statement] = STATE(1156), + [sym_future_import_statement] = STATE(1156), + [sym_import_from_statement] = STATE(1156), + [sym_print_statement] = STATE(1156), + [sym_assert_statement] = STATE(1156), + [sym_expression_statement] = STATE(1156), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1156), + [sym_delete_statement] = STATE(1156), + [sym_raise_statement] = STATE(1156), + [sym_pass_statement] = STATE(1156), + [sym_break_statement] = STATE(1156), + [sym_continue_statement] = STATE(1156), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1156), + [sym_nonlocal_statement] = STATE(1156), + [sym_exec_statement] = STATE(1156), + [sym_type_alias_statement] = STATE(1156), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -20563,59 +18108,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [94] = { - [sym__simple_statements] = STATE(538), - [sym_import_statement] = STATE(1209), - [sym_future_import_statement] = STATE(1209), - [sym_import_from_statement] = STATE(1209), - [sym_print_statement] = STATE(1209), - [sym_assert_statement] = STATE(1209), - [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1209), - [sym_delete_statement] = STATE(1209), - [sym_raise_statement] = STATE(1209), - [sym_pass_statement] = STATE(1209), - [sym_break_statement] = STATE(1209), - [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1209), - [sym_nonlocal_statement] = STATE(1209), - [sym_exec_statement] = STATE(1209), - [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(584), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -20657,59 +18202,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [95] = { - [sym__simple_statements] = STATE(594), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(438), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -20751,59 +18296,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [96] = { - [sym__simple_statements] = STATE(965), - [sym_import_statement] = STATE(1214), - [sym_future_import_statement] = STATE(1214), - [sym_import_from_statement] = STATE(1214), - [sym_print_statement] = STATE(1214), - [sym_assert_statement] = STATE(1214), - [sym_expression_statement] = STATE(1214), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1214), - [sym_delete_statement] = STATE(1214), - [sym_raise_statement] = STATE(1214), - [sym_pass_statement] = STATE(1214), - [sym_break_statement] = STATE(1214), - [sym_continue_statement] = STATE(1214), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1214), - [sym_nonlocal_statement] = STATE(1214), - [sym_exec_statement] = STATE(1214), - [sym_type_alias_statement] = STATE(1214), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(591), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -20845,59 +18390,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [97] = { - [sym__simple_statements] = STATE(464), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(515), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -20939,59 +18484,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [98] = { - [sym__simple_statements] = STATE(353), - [sym_import_statement] = STATE(1244), - [sym_future_import_statement] = STATE(1244), - [sym_import_from_statement] = STATE(1244), - [sym_print_statement] = STATE(1244), - [sym_assert_statement] = STATE(1244), - [sym_expression_statement] = STATE(1244), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1244), - [sym_delete_statement] = STATE(1244), - [sym_raise_statement] = STATE(1244), - [sym_pass_statement] = STATE(1244), - [sym_break_statement] = STATE(1244), - [sym_continue_statement] = STATE(1244), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1244), - [sym_nonlocal_statement] = STATE(1244), - [sym_exec_statement] = STATE(1244), - [sym_type_alias_statement] = STATE(1244), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(550), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -21033,59 +18578,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [99] = { - [sym__simple_statements] = STATE(542), - [sym_import_statement] = STATE(1209), - [sym_future_import_statement] = STATE(1209), - [sym_import_from_statement] = STATE(1209), - [sym_print_statement] = STATE(1209), - [sym_assert_statement] = STATE(1209), - [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1209), - [sym_delete_statement] = STATE(1209), - [sym_raise_statement] = STATE(1209), - [sym_pass_statement] = STATE(1209), - [sym_break_statement] = STATE(1209), - [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1209), - [sym_nonlocal_statement] = STATE(1209), - [sym_exec_statement] = STATE(1209), - [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(476), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -21127,59 +18672,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [100] = { - [sym__simple_statements] = STATE(331), - [sym_import_statement] = STATE(1248), - [sym_future_import_statement] = STATE(1248), - [sym_import_from_statement] = STATE(1248), - [sym_print_statement] = STATE(1248), - [sym_assert_statement] = STATE(1248), - [sym_expression_statement] = STATE(1248), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1248), - [sym_delete_statement] = STATE(1248), - [sym_raise_statement] = STATE(1248), - [sym_pass_statement] = STATE(1248), - [sym_break_statement] = STATE(1248), - [sym_continue_statement] = STATE(1248), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1248), - [sym_nonlocal_statement] = STATE(1248), - [sym_exec_statement] = STATE(1248), - [sym_type_alias_statement] = STATE(1248), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(348), + [sym_import_statement] = STATE(1149), + [sym_future_import_statement] = STATE(1149), + [sym_import_from_statement] = STATE(1149), + [sym_print_statement] = STATE(1149), + [sym_assert_statement] = STATE(1149), + [sym_expression_statement] = STATE(1149), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1149), + [sym_delete_statement] = STATE(1149), + [sym_raise_statement] = STATE(1149), + [sym_pass_statement] = STATE(1149), + [sym_break_statement] = STATE(1149), + [sym_continue_statement] = STATE(1149), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1149), + [sym_nonlocal_statement] = STATE(1149), + [sym_exec_statement] = STATE(1149), + [sym_type_alias_statement] = STATE(1149), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -21221,59 +18766,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [101] = { - [sym__simple_statements] = STATE(592), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(595), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -21315,59 +18860,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [102] = { - [sym__simple_statements] = STATE(492), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(509), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -21409,59 +18954,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [103] = { - [sym__simple_statements] = STATE(332), - [sym_import_statement] = STATE(1261), - [sym_future_import_statement] = STATE(1261), - [sym_import_from_statement] = STATE(1261), - [sym_print_statement] = STATE(1261), - [sym_assert_statement] = STATE(1261), - [sym_expression_statement] = STATE(1261), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1261), - [sym_delete_statement] = STATE(1261), - [sym_raise_statement] = STATE(1261), - [sym_pass_statement] = STATE(1261), - [sym_break_statement] = STATE(1261), - [sym_continue_statement] = STATE(1261), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1261), - [sym_nonlocal_statement] = STATE(1261), - [sym_exec_statement] = STATE(1261), - [sym_type_alias_statement] = STATE(1261), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(542), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -21503,59 +19048,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [104] = { - [sym__simple_statements] = STATE(544), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(488), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -21597,59 +19142,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [105] = { - [sym__simple_statements] = STATE(582), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(526), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -21691,59 +19236,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [106] = { - [sym__simple_statements] = STATE(493), + [sym__simple_statements] = STATE(544), [sym_import_statement] = STATE(1209), [sym_future_import_statement] = STATE(1209), [sym_import_from_statement] = STATE(1209), [sym_print_statement] = STATE(1209), [sym_assert_statement] = STATE(1209), [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), + [sym_named_expression] = STATE(974), [sym_return_statement] = STATE(1209), [sym_delete_statement] = STATE(1209), [sym_raise_statement] = STATE(1209), [sym_pass_statement] = STATE(1209), [sym_break_statement] = STATE(1209), [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), [sym_global_statement] = STATE(1209), [sym_nonlocal_statement] = STATE(1209), [sym_exec_statement] = STATE(1209), [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -21785,59 +19330,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [107] = { - [sym__simple_statements] = STATE(563), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(535), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -21879,59 +19424,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [108] = { - [sym__simple_statements] = STATE(580), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(402), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -21973,59 +19518,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [109] = { - [sym__simple_statements] = STATE(991), - [sym_import_statement] = STATE(1214), - [sym_future_import_statement] = STATE(1214), - [sym_import_from_statement] = STATE(1214), - [sym_print_statement] = STATE(1214), - [sym_assert_statement] = STATE(1214), - [sym_expression_statement] = STATE(1214), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1214), - [sym_delete_statement] = STATE(1214), - [sym_raise_statement] = STATE(1214), - [sym_pass_statement] = STATE(1214), - [sym_break_statement] = STATE(1214), - [sym_continue_statement] = STATE(1214), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1214), - [sym_nonlocal_statement] = STATE(1214), - [sym_exec_statement] = STATE(1214), - [sym_type_alias_statement] = STATE(1214), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(1004), + [sym_import_statement] = STATE(1207), + [sym_future_import_statement] = STATE(1207), + [sym_import_from_statement] = STATE(1207), + [sym_print_statement] = STATE(1207), + [sym_assert_statement] = STATE(1207), + [sym_expression_statement] = STATE(1207), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1207), + [sym_delete_statement] = STATE(1207), + [sym_raise_statement] = STATE(1207), + [sym_pass_statement] = STATE(1207), + [sym_break_statement] = STATE(1207), + [sym_continue_statement] = STATE(1207), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1207), + [sym_nonlocal_statement] = STATE(1207), + [sym_exec_statement] = STATE(1207), + [sym_type_alias_statement] = STATE(1207), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -22067,59 +19612,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [110] = { - [sym__simple_statements] = STATE(478), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(567), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -22161,59 +19706,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [111] = { - [sym__simple_statements] = STATE(272), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(363), + [sym_import_statement] = STATE(1156), + [sym_future_import_statement] = STATE(1156), + [sym_import_from_statement] = STATE(1156), + [sym_print_statement] = STATE(1156), + [sym_assert_statement] = STATE(1156), + [sym_expression_statement] = STATE(1156), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1156), + [sym_delete_statement] = STATE(1156), + [sym_raise_statement] = STATE(1156), + [sym_pass_statement] = STATE(1156), + [sym_break_statement] = STATE(1156), + [sym_continue_statement] = STATE(1156), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1156), + [sym_nonlocal_statement] = STATE(1156), + [sym_exec_statement] = STATE(1156), + [sym_type_alias_statement] = STATE(1156), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -22255,59 +19800,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [112] = { - [sym__simple_statements] = STATE(490), - [sym_import_statement] = STATE(1209), - [sym_future_import_statement] = STATE(1209), - [sym_import_from_statement] = STATE(1209), - [sym_print_statement] = STATE(1209), - [sym_assert_statement] = STATE(1209), - [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1209), - [sym_delete_statement] = STATE(1209), - [sym_raise_statement] = STATE(1209), - [sym_pass_statement] = STATE(1209), - [sym_break_statement] = STATE(1209), - [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1209), - [sym_nonlocal_statement] = STATE(1209), - [sym_exec_statement] = STATE(1209), - [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(529), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -22349,59 +19894,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [113] = { - [sym__simple_statements] = STATE(589), + [sym__simple_statements] = STATE(275), [sym_import_statement] = STATE(1209), [sym_future_import_statement] = STATE(1209), [sym_import_from_statement] = STATE(1209), [sym_print_statement] = STATE(1209), [sym_assert_statement] = STATE(1209), [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), + [sym_named_expression] = STATE(974), [sym_return_statement] = STATE(1209), [sym_delete_statement] = STATE(1209), [sym_raise_statement] = STATE(1209), [sym_pass_statement] = STATE(1209), [sym_break_statement] = STATE(1209), [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), [sym_global_statement] = STATE(1209), [sym_nonlocal_statement] = STATE(1209), [sym_exec_statement] = STATE(1209), [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -22443,59 +19988,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [114] = { - [sym__simple_statements] = STATE(388), - [sym_import_statement] = STATE(1209), - [sym_future_import_statement] = STATE(1209), - [sym_import_from_statement] = STATE(1209), - [sym_print_statement] = STATE(1209), - [sym_assert_statement] = STATE(1209), - [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1209), - [sym_delete_statement] = STATE(1209), - [sym_raise_statement] = STATE(1209), - [sym_pass_statement] = STATE(1209), - [sym_break_statement] = STATE(1209), - [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1209), - [sym_nonlocal_statement] = STATE(1209), - [sym_exec_statement] = STATE(1209), - [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(365), + [sym_import_statement] = STATE(1178), + [sym_future_import_statement] = STATE(1178), + [sym_import_from_statement] = STATE(1178), + [sym_print_statement] = STATE(1178), + [sym_assert_statement] = STATE(1178), + [sym_expression_statement] = STATE(1178), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1178), + [sym_delete_statement] = STATE(1178), + [sym_raise_statement] = STATE(1178), + [sym_pass_statement] = STATE(1178), + [sym_break_statement] = STATE(1178), + [sym_continue_statement] = STATE(1178), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1178), + [sym_nonlocal_statement] = STATE(1178), + [sym_exec_statement] = STATE(1178), + [sym_type_alias_statement] = STATE(1178), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -22537,59 +20082,153 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [115] = { - [sym__simple_statements] = STATE(572), + [sym__simple_statements] = STATE(575), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(495), + [sym__indent] = ACTIONS(497), + [sym__string_start] = ACTIONS(81), + }, + [116] = { + [sym__simple_statements] = STATE(492), [sym_import_statement] = STATE(1209), [sym_future_import_statement] = STATE(1209), [sym_import_from_statement] = STATE(1209), [sym_print_statement] = STATE(1209), [sym_assert_statement] = STATE(1209), [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), + [sym_named_expression] = STATE(974), [sym_return_statement] = STATE(1209), [sym_delete_statement] = STATE(1209), [sym_raise_statement] = STATE(1209), [sym_pass_statement] = STATE(1209), [sym_break_statement] = STATE(1209), [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), [sym_global_statement] = STATE(1209), [sym_nonlocal_statement] = STATE(1209), [sym_exec_statement] = STATE(1209), [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -22626,64 +20265,64 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__newline] = ACTIONS(495), - [sym__indent] = ACTIONS(497), + [sym__newline] = ACTIONS(499), + [sym__indent] = ACTIONS(501), [sym__string_start] = ACTIONS(81), }, - [116] = { - [sym__simple_statements] = STATE(485), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [117] = { + [sym__simple_statements] = STATE(556), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -22720,64 +20359,64 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__newline] = ACTIONS(499), - [sym__indent] = ACTIONS(501), + [sym__newline] = ACTIONS(503), + [sym__indent] = ACTIONS(505), [sym__string_start] = ACTIONS(81), }, - [117] = { - [sym__simple_statements] = STATE(501), + [118] = { + [sym__simple_statements] = STATE(495), [sym_import_statement] = STATE(1209), [sym_future_import_statement] = STATE(1209), [sym_import_from_statement] = STATE(1209), [sym_print_statement] = STATE(1209), [sym_assert_statement] = STATE(1209), [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), + [sym_named_expression] = STATE(974), [sym_return_statement] = STATE(1209), [sym_delete_statement] = STATE(1209), [sym_raise_statement] = STATE(1209), [sym_pass_statement] = STATE(1209), [sym_break_statement] = STATE(1209), [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), [sym_global_statement] = STATE(1209), [sym_nonlocal_statement] = STATE(1209), [sym_exec_statement] = STATE(1209), [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -22814,64 +20453,64 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__newline] = ACTIONS(503), - [sym__indent] = ACTIONS(505), + [sym__newline] = ACTIONS(507), + [sym__indent] = ACTIONS(509), [sym__string_start] = ACTIONS(81), }, - [118] = { - [sym__simple_statements] = STATE(430), - [sym_import_statement] = STATE(1209), - [sym_future_import_statement] = STATE(1209), - [sym_import_from_statement] = STATE(1209), - [sym_print_statement] = STATE(1209), - [sym_assert_statement] = STATE(1209), - [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1209), - [sym_delete_statement] = STATE(1209), - [sym_raise_statement] = STATE(1209), - [sym_pass_statement] = STATE(1209), - [sym_break_statement] = STATE(1209), - [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1209), - [sym_nonlocal_statement] = STATE(1209), - [sym_exec_statement] = STATE(1209), - [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [119] = { + [sym__simple_statements] = STATE(323), + [sym_import_statement] = STATE(1156), + [sym_future_import_statement] = STATE(1156), + [sym_import_from_statement] = STATE(1156), + [sym_print_statement] = STATE(1156), + [sym_assert_statement] = STATE(1156), + [sym_expression_statement] = STATE(1156), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1156), + [sym_delete_statement] = STATE(1156), + [sym_raise_statement] = STATE(1156), + [sym_pass_statement] = STATE(1156), + [sym_break_statement] = STATE(1156), + [sym_continue_statement] = STATE(1156), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1156), + [sym_nonlocal_statement] = STATE(1156), + [sym_exec_statement] = STATE(1156), + [sym_type_alias_statement] = STATE(1156), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -22908,64 +20547,64 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__newline] = ACTIONS(507), - [sym__indent] = ACTIONS(509), + [sym__newline] = ACTIONS(511), + [sym__indent] = ACTIONS(513), [sym__string_start] = ACTIONS(81), }, - [119] = { - [sym__simple_statements] = STATE(497), - [sym_import_statement] = STATE(1209), - [sym_future_import_statement] = STATE(1209), - [sym_import_from_statement] = STATE(1209), - [sym_print_statement] = STATE(1209), - [sym_assert_statement] = STATE(1209), - [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1209), - [sym_delete_statement] = STATE(1209), - [sym_raise_statement] = STATE(1209), - [sym_pass_statement] = STATE(1209), - [sym_break_statement] = STATE(1209), - [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1209), - [sym_nonlocal_statement] = STATE(1209), - [sym_exec_statement] = STATE(1209), - [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [120] = { + [sym__simple_statements] = STATE(439), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -23002,158 +20641,64 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__newline] = ACTIONS(511), - [sym__indent] = ACTIONS(513), + [sym__newline] = ACTIONS(515), + [sym__indent] = ACTIONS(517), [sym__string_start] = ACTIONS(81), }, - [120] = { - [sym__simple_statements] = STATE(553), + [121] = { + [sym__simple_statements] = STATE(561), [sym_import_statement] = STATE(1209), [sym_future_import_statement] = STATE(1209), [sym_import_from_statement] = STATE(1209), [sym_print_statement] = STATE(1209), [sym_assert_statement] = STATE(1209), [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), + [sym_named_expression] = STATE(974), [sym_return_statement] = STATE(1209), [sym_delete_statement] = STATE(1209), [sym_raise_statement] = STATE(1209), [sym_pass_statement] = STATE(1209), [sym_break_statement] = STATE(1209), [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), [sym_global_statement] = STATE(1209), [sym_nonlocal_statement] = STATE(1209), [sym_exec_statement] = STATE(1209), [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [sym_identifier] = ACTIONS(7), - [anon_sym_import] = ACTIONS(9), - [anon_sym_from] = ACTIONS(11), - [anon_sym_LPAREN] = ACTIONS(13), - [anon_sym_STAR] = ACTIONS(15), - [anon_sym_print] = ACTIONS(17), - [anon_sym_assert] = ACTIONS(19), - [anon_sym_return] = ACTIONS(21), - [anon_sym_del] = ACTIONS(23), - [anon_sym_raise] = ACTIONS(25), - [anon_sym_pass] = ACTIONS(27), - [anon_sym_break] = ACTIONS(29), - [anon_sym_continue] = ACTIONS(31), - [anon_sym_async] = ACTIONS(317), - [anon_sym_match] = ACTIONS(317), - [anon_sym_DASH] = ACTIONS(47), - [anon_sym_PLUS] = ACTIONS(47), - [anon_sym_LBRACK] = ACTIONS(49), - [anon_sym_LBRACE] = ACTIONS(51), - [anon_sym_STAR_STAR] = ACTIONS(53), - [anon_sym_global] = ACTIONS(57), - [anon_sym_nonlocal] = ACTIONS(59), - [anon_sym_exec] = ACTIONS(61), - [anon_sym_type] = ACTIONS(63), - [anon_sym_not] = ACTIONS(69), - [anon_sym_TILDE] = ACTIONS(47), - [anon_sym_lambda] = ACTIONS(71), - [anon_sym_yield] = ACTIONS(73), - [sym_ellipsis] = ACTIONS(75), - [sym_integer] = ACTIONS(77), - [sym_float] = ACTIONS(75), - [anon_sym_await] = ACTIONS(79), - [sym_true] = ACTIONS(77), - [sym_false] = ACTIONS(77), - [sym_none] = ACTIONS(77), - [sym_comment] = ACTIONS(3), - [sym__newline] = ACTIONS(515), - [sym__indent] = ACTIONS(517), - [sym__string_start] = ACTIONS(81), - }, - [121] = { - [sym__simple_statements] = STATE(486), - [sym_import_statement] = STATE(1209), - [sym_future_import_statement] = STATE(1209), - [sym_import_from_statement] = STATE(1209), - [sym_print_statement] = STATE(1209), - [sym_assert_statement] = STATE(1209), - [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1209), - [sym_delete_statement] = STATE(1209), - [sym_raise_statement] = STATE(1209), - [sym_pass_statement] = STATE(1209), - [sym_break_statement] = STATE(1209), - [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1209), - [sym_nonlocal_statement] = STATE(1209), - [sym_exec_statement] = STATE(1209), - [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -23195,59 +20740,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [122] = { - [sym__simple_statements] = STATE(571), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(482), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -23289,59 +20834,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [123] = { - [sym__simple_statements] = STATE(578), - [sym_import_statement] = STATE(1209), - [sym_future_import_statement] = STATE(1209), - [sym_import_from_statement] = STATE(1209), - [sym_print_statement] = STATE(1209), - [sym_assert_statement] = STATE(1209), - [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1209), - [sym_delete_statement] = STATE(1209), - [sym_raise_statement] = STATE(1209), - [sym_pass_statement] = STATE(1209), - [sym_break_statement] = STATE(1209), - [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1209), - [sym_nonlocal_statement] = STATE(1209), - [sym_exec_statement] = STATE(1209), - [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(522), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -23383,59 +20928,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [124] = { - [sym__simple_statements] = STATE(472), - [sym_import_statement] = STATE(1209), - [sym_future_import_statement] = STATE(1209), - [sym_import_from_statement] = STATE(1209), - [sym_print_statement] = STATE(1209), - [sym_assert_statement] = STATE(1209), - [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1209), - [sym_delete_statement] = STATE(1209), - [sym_raise_statement] = STATE(1209), - [sym_pass_statement] = STATE(1209), - [sym_break_statement] = STATE(1209), - [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1209), - [sym_nonlocal_statement] = STATE(1209), - [sym_exec_statement] = STATE(1209), - [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(518), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -23477,59 +21022,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [125] = { - [sym__simple_statements] = STATE(317), - [sym_import_statement] = STATE(1244), - [sym_future_import_statement] = STATE(1244), - [sym_import_from_statement] = STATE(1244), - [sym_print_statement] = STATE(1244), - [sym_assert_statement] = STATE(1244), - [sym_expression_statement] = STATE(1244), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1244), - [sym_delete_statement] = STATE(1244), - [sym_raise_statement] = STATE(1244), - [sym_pass_statement] = STATE(1244), - [sym_break_statement] = STATE(1244), - [sym_continue_statement] = STATE(1244), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1244), - [sym_nonlocal_statement] = STATE(1244), - [sym_exec_statement] = STATE(1244), - [sym_type_alias_statement] = STATE(1244), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(496), + [sym_import_statement] = STATE(1138), + [sym_future_import_statement] = STATE(1138), + [sym_import_from_statement] = STATE(1138), + [sym_print_statement] = STATE(1138), + [sym_assert_statement] = STATE(1138), + [sym_expression_statement] = STATE(1138), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1138), + [sym_delete_statement] = STATE(1138), + [sym_raise_statement] = STATE(1138), + [sym_pass_statement] = STATE(1138), + [sym_break_statement] = STATE(1138), + [sym_continue_statement] = STATE(1138), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1138), + [sym_nonlocal_statement] = STATE(1138), + [sym_exec_statement] = STATE(1138), + [sym_type_alias_statement] = STATE(1138), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -23571,59 +21116,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [126] = { - [sym__simple_statements] = STATE(384), - [sym_import_statement] = STATE(1238), - [sym_future_import_statement] = STATE(1238), - [sym_import_from_statement] = STATE(1238), - [sym_print_statement] = STATE(1238), - [sym_assert_statement] = STATE(1238), - [sym_expression_statement] = STATE(1238), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1238), - [sym_delete_statement] = STATE(1238), - [sym_raise_statement] = STATE(1238), - [sym_pass_statement] = STATE(1238), - [sym_break_statement] = STATE(1238), - [sym_continue_statement] = STATE(1238), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1238), - [sym_nonlocal_statement] = STATE(1238), - [sym_exec_statement] = STATE(1238), - [sym_type_alias_statement] = STATE(1238), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(543), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -23665,59 +21210,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [127] = { - [sym__simple_statements] = STATE(552), - [sym_import_statement] = STATE(1209), - [sym_future_import_statement] = STATE(1209), - [sym_import_from_statement] = STATE(1209), - [sym_print_statement] = STATE(1209), - [sym_assert_statement] = STATE(1209), - [sym_expression_statement] = STATE(1209), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1209), - [sym_delete_statement] = STATE(1209), - [sym_raise_statement] = STATE(1209), - [sym_pass_statement] = STATE(1209), - [sym_break_statement] = STATE(1209), - [sym_continue_statement] = STATE(1209), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1209), - [sym_nonlocal_statement] = STATE(1209), - [sym_exec_statement] = STATE(1209), - [sym_type_alias_statement] = STATE(1209), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(357), + [sym_import_statement] = STATE(1149), + [sym_future_import_statement] = STATE(1149), + [sym_import_from_statement] = STATE(1149), + [sym_print_statement] = STATE(1149), + [sym_assert_statement] = STATE(1149), + [sym_expression_statement] = STATE(1149), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1149), + [sym_delete_statement] = STATE(1149), + [sym_raise_statement] = STATE(1149), + [sym_pass_statement] = STATE(1149), + [sym_break_statement] = STATE(1149), + [sym_continue_statement] = STATE(1149), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1149), + [sym_nonlocal_statement] = STATE(1149), + [sym_exec_statement] = STATE(1149), + [sym_type_alias_statement] = STATE(1149), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -23759,59 +21304,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [128] = { - [sym__simple_statements] = STATE(487), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(419), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -23853,59 +21398,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [129] = { - [sym__simple_statements] = STATE(558), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(358), + [sym_import_statement] = STATE(1140), + [sym_future_import_statement] = STATE(1140), + [sym_import_from_statement] = STATE(1140), + [sym_print_statement] = STATE(1140), + [sym_assert_statement] = STATE(1140), + [sym_expression_statement] = STATE(1140), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1140), + [sym_delete_statement] = STATE(1140), + [sym_raise_statement] = STATE(1140), + [sym_pass_statement] = STATE(1140), + [sym_break_statement] = STATE(1140), + [sym_continue_statement] = STATE(1140), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1140), + [sym_nonlocal_statement] = STATE(1140), + [sym_exec_statement] = STATE(1140), + [sym_type_alias_statement] = STATE(1140), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -23947,59 +21492,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [130] = { - [sym__simple_statements] = STATE(421), - [sym_import_statement] = STATE(1319), - [sym_future_import_statement] = STATE(1319), - [sym_import_from_statement] = STATE(1319), - [sym_print_statement] = STATE(1319), - [sym_assert_statement] = STATE(1319), - [sym_expression_statement] = STATE(1319), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1319), - [sym_delete_statement] = STATE(1319), - [sym_raise_statement] = STATE(1319), - [sym_pass_statement] = STATE(1319), - [sym_break_statement] = STATE(1319), - [sym_continue_statement] = STATE(1319), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1319), - [sym_nonlocal_statement] = STATE(1319), - [sym_exec_statement] = STATE(1319), - [sym_type_alias_statement] = STATE(1319), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym__simple_statements] = STATE(520), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -24041,53 +21586,146 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [131] = { - [sym_named_expression] = STATE(1009), - [sym_expression] = STATE(976), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_attribute] = STATE(797), - [sym_subscript] = STATE(797), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [sym_identifier] = ACTIONS(331), + [sym_named_expression] = STATE(905), + [sym_expression] = STATE(903), + [sym_primary_expression] = STATE(630), + [sym_not_operator] = STATE(905), + [sym_boolean_operator] = STATE(905), + [sym_binary_operator] = STATE(622), + [sym_unary_operator] = STATE(622), + [sym_comparison_operator] = STATE(905), + [sym_lambda] = STATE(905), + [sym_attribute] = STATE(622), + [sym_subscript] = STATE(622), + [sym_call] = STATE(622), + [sym_list] = STATE(622), + [sym_set] = STATE(622), + [sym_tuple] = STATE(622), + [sym_dictionary] = STATE(622), + [sym_list_comprehension] = STATE(622), + [sym_dictionary_comprehension] = STATE(622), + [sym_set_comprehension] = STATE(622), + [sym_generator_expression] = STATE(622), + [sym_parenthesized_expression] = STATE(622), + [sym_conditional_expression] = STATE(905), + [sym_concatenated_string] = STATE(622), + [sym_string] = STATE(607), + [sym_await] = STATE(905), + [sym_identifier] = ACTIONS(274), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(278), + [anon_sym_RPAREN] = ACTIONS(559), + [anon_sym_COMMA] = ACTIONS(559), + [anon_sym_STAR] = ACTIONS(276), + [anon_sym_print] = ACTIONS(285), + [anon_sym_GT_GT] = ACTIONS(276), + [anon_sym_COLON_EQ] = ACTIONS(562), + [anon_sym_if] = ACTIONS(276), + [anon_sym_COLON] = ACTIONS(564), + [anon_sym_async] = ACTIONS(285), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(285), + [anon_sym_PIPE] = ACTIONS(276), + [anon_sym_DASH] = ACTIONS(291), + [anon_sym_PLUS] = ACTIONS(291), + [anon_sym_LBRACK] = ACTIONS(293), + [anon_sym_RBRACK] = ACTIONS(559), + [anon_sym_LBRACE] = ACTIONS(295), + [anon_sym_STAR_STAR] = ACTIONS(276), + [anon_sym_EQ] = ACTIONS(564), + [anon_sym_exec] = ACTIONS(285), + [anon_sym_type] = ACTIONS(285), + [anon_sym_AT] = ACTIONS(276), + [anon_sym_not] = ACTIONS(299), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(276), + [anon_sym_SLASH_SLASH] = ACTIONS(276), + [anon_sym_AMP] = ACTIONS(276), + [anon_sym_CARET] = ACTIONS(276), + [anon_sym_LT_LT] = ACTIONS(276), + [anon_sym_TILDE] = ACTIONS(301), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(305), + [anon_sym_PLUS_EQ] = ACTIONS(566), + [anon_sym_DASH_EQ] = ACTIONS(566), + [anon_sym_STAR_EQ] = ACTIONS(566), + [anon_sym_SLASH_EQ] = ACTIONS(566), + [anon_sym_AT_EQ] = ACTIONS(566), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(566), + [anon_sym_PERCENT_EQ] = ACTIONS(566), + [anon_sym_STAR_STAR_EQ] = ACTIONS(566), + [anon_sym_GT_GT_EQ] = ACTIONS(566), + [anon_sym_LT_LT_EQ] = ACTIONS(566), + [anon_sym_AMP_EQ] = ACTIONS(566), + [anon_sym_CARET_EQ] = ACTIONS(566), + [anon_sym_PIPE_EQ] = ACTIONS(566), + [sym_ellipsis] = ACTIONS(309), + [sym_integer] = ACTIONS(311), + [sym_float] = ACTIONS(309), + [anon_sym_await] = ACTIONS(313), + [sym_true] = ACTIONS(311), + [sym_false] = ACTIONS(311), + [sym_none] = ACTIONS(311), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(315), + }, + [132] = { + [sym_named_expression] = STATE(974), + [sym_expression] = STATE(1012), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_attribute] = STATE(795), + [sym_subscript] = STATE(795), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [sym_identifier] = ACTIONS(379), [anon_sym_DOT] = ACTIONS(276), - [anon_sym_LPAREN] = ACTIONS(559), + [anon_sym_LPAREN] = ACTIONS(568), [anon_sym_COMMA] = ACTIONS(280), [anon_sym_STAR] = ACTIONS(276), - [anon_sym_print] = ACTIONS(333), + [anon_sym_print] = ACTIONS(381), [anon_sym_GT_GT] = ACTIONS(276), [anon_sym_COLON_EQ] = ACTIONS(287), [anon_sym_if] = ACTIONS(276), [anon_sym_COLON] = ACTIONS(289), - [anon_sym_async] = ACTIONS(333), + [anon_sym_async] = ACTIONS(381), [anon_sym_in] = ACTIONS(276), - [anon_sym_match] = ACTIONS(333), + [anon_sym_match] = ACTIONS(381), [anon_sym_PIPE] = ACTIONS(276), - [anon_sym_DASH] = ACTIONS(561), - [anon_sym_PLUS] = ACTIONS(561), - [anon_sym_LBRACK] = ACTIONS(563), + [anon_sym_DASH] = ACTIONS(570), + [anon_sym_PLUS] = ACTIONS(570), + [anon_sym_LBRACK] = ACTIONS(572), [anon_sym_LBRACE] = ACTIONS(51), [anon_sym_STAR_STAR] = ACTIONS(276), [anon_sym_EQ] = ACTIONS(289), - [anon_sym_exec] = ACTIONS(333), - [anon_sym_type] = ACTIONS(333), + [anon_sym_exec] = ACTIONS(381), + [anon_sym_type] = ACTIONS(381), [anon_sym_AT] = ACTIONS(276), [anon_sym_not] = ACTIONS(69), [anon_sym_and] = ACTIONS(276), @@ -24124,161 +21762,68 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_ellipsis] = ACTIONS(75), [sym_integer] = ACTIONS(77), [sym_float] = ACTIONS(75), - [anon_sym_await] = ACTIONS(337), + [anon_sym_await] = ACTIONS(385), [sym_true] = ACTIONS(77), [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__semicolon] = ACTIONS(303), + [anon_sym_SEMI] = ACTIONS(303), [sym__newline] = ACTIONS(303), [sym__string_start] = ACTIONS(81), }, - [132] = { - [sym_named_expression] = STATE(900), - [sym_expression] = STATE(901), - [sym_primary_expression] = STATE(630), - [sym_not_operator] = STATE(900), - [sym_boolean_operator] = STATE(900), - [sym_binary_operator] = STATE(642), - [sym_unary_operator] = STATE(642), - [sym_comparison_operator] = STATE(900), - [sym_lambda] = STATE(900), - [sym_attribute] = STATE(642), - [sym_subscript] = STATE(642), - [sym_call] = STATE(642), - [sym_list] = STATE(642), - [sym_set] = STATE(642), - [sym_tuple] = STATE(642), - [sym_dictionary] = STATE(642), - [sym_list_comprehension] = STATE(642), - [sym_dictionary_comprehension] = STATE(642), - [sym_set_comprehension] = STATE(642), - [sym_generator_expression] = STATE(642), - [sym_parenthesized_expression] = STATE(642), - [sym_conditional_expression] = STATE(900), - [sym_concatenated_string] = STATE(642), - [sym_string] = STATE(600), - [sym_await] = STATE(900), - [sym_identifier] = ACTIONS(274), - [anon_sym_DOT] = ACTIONS(276), - [anon_sym_LPAREN] = ACTIONS(278), - [anon_sym_RPAREN] = ACTIONS(565), - [anon_sym_COMMA] = ACTIONS(565), - [anon_sym_STAR] = ACTIONS(276), - [anon_sym_print] = ACTIONS(285), - [anon_sym_GT_GT] = ACTIONS(276), - [anon_sym_COLON_EQ] = ACTIONS(568), - [anon_sym_if] = ACTIONS(276), - [anon_sym_COLON] = ACTIONS(570), - [anon_sym_async] = ACTIONS(285), - [anon_sym_in] = ACTIONS(276), - [anon_sym_match] = ACTIONS(285), - [anon_sym_PIPE] = ACTIONS(276), - [anon_sym_DASH] = ACTIONS(291), - [anon_sym_PLUS] = ACTIONS(291), - [anon_sym_LBRACK] = ACTIONS(293), - [anon_sym_RBRACK] = ACTIONS(565), - [anon_sym_LBRACE] = ACTIONS(295), - [anon_sym_STAR_STAR] = ACTIONS(276), - [anon_sym_EQ] = ACTIONS(570), - [anon_sym_exec] = ACTIONS(285), - [anon_sym_type] = ACTIONS(285), - [anon_sym_AT] = ACTIONS(276), - [anon_sym_not] = ACTIONS(299), - [anon_sym_and] = ACTIONS(276), - [anon_sym_or] = ACTIONS(276), - [anon_sym_SLASH] = ACTIONS(276), - [anon_sym_PERCENT] = ACTIONS(276), - [anon_sym_SLASH_SLASH] = ACTIONS(276), - [anon_sym_AMP] = ACTIONS(276), - [anon_sym_CARET] = ACTIONS(276), - [anon_sym_LT_LT] = ACTIONS(276), - [anon_sym_TILDE] = ACTIONS(301), - [anon_sym_LT] = ACTIONS(276), - [anon_sym_LT_EQ] = ACTIONS(303), - [anon_sym_EQ_EQ] = ACTIONS(303), - [anon_sym_BANG_EQ] = ACTIONS(303), - [anon_sym_GT_EQ] = ACTIONS(303), - [anon_sym_GT] = ACTIONS(276), - [anon_sym_LT_GT] = ACTIONS(303), - [anon_sym_is] = ACTIONS(276), - [anon_sym_lambda] = ACTIONS(305), - [anon_sym_PLUS_EQ] = ACTIONS(572), - [anon_sym_DASH_EQ] = ACTIONS(572), - [anon_sym_STAR_EQ] = ACTIONS(572), - [anon_sym_SLASH_EQ] = ACTIONS(572), - [anon_sym_AT_EQ] = ACTIONS(572), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(572), - [anon_sym_PERCENT_EQ] = ACTIONS(572), - [anon_sym_STAR_STAR_EQ] = ACTIONS(572), - [anon_sym_GT_GT_EQ] = ACTIONS(572), - [anon_sym_LT_LT_EQ] = ACTIONS(572), - [anon_sym_AMP_EQ] = ACTIONS(572), - [anon_sym_CARET_EQ] = ACTIONS(572), - [anon_sym_PIPE_EQ] = ACTIONS(572), - [sym_ellipsis] = ACTIONS(309), - [sym_integer] = ACTIONS(311), - [sym_float] = ACTIONS(309), - [anon_sym_await] = ACTIONS(313), - [sym_true] = ACTIONS(311), - [sym_false] = ACTIONS(311), - [sym_none] = ACTIONS(311), - [sym_comment] = ACTIONS(3), - [sym__string_start] = ACTIONS(315), - }, [133] = { - [sym_import_statement] = STATE(1351), - [sym_future_import_statement] = STATE(1351), - [sym_import_from_statement] = STATE(1351), - [sym_print_statement] = STATE(1351), - [sym_assert_statement] = STATE(1351), - [sym_expression_statement] = STATE(1351), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1351), - [sym_delete_statement] = STATE(1351), - [sym_raise_statement] = STATE(1351), - [sym_pass_statement] = STATE(1351), - [sym_break_statement] = STATE(1351), - [sym_continue_statement] = STATE(1351), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1351), - [sym_nonlocal_statement] = STATE(1351), - [sym_exec_statement] = STATE(1351), - [sym_type_alias_statement] = STATE(1351), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_import_statement] = STATE(1404), + [sym_future_import_statement] = STATE(1404), + [sym_import_from_statement] = STATE(1404), + [sym_print_statement] = STATE(1404), + [sym_assert_statement] = STATE(1404), + [sym_expression_statement] = STATE(1404), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1404), + [sym_delete_statement] = STATE(1404), + [sym_raise_statement] = STATE(1404), + [sym_pass_statement] = STATE(1404), + [sym_break_statement] = STATE(1404), + [sym_continue_statement] = STATE(1404), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1404), + [sym_nonlocal_statement] = STATE(1404), + [sym_exec_statement] = STATE(1404), + [sym_type_alias_statement] = STATE(1404), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -24319,58 +21864,58 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [134] = { - [sym_import_statement] = STATE(1351), - [sym_future_import_statement] = STATE(1351), - [sym_import_from_statement] = STATE(1351), - [sym_print_statement] = STATE(1351), - [sym_assert_statement] = STATE(1351), - [sym_expression_statement] = STATE(1351), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1351), - [sym_delete_statement] = STATE(1351), - [sym_raise_statement] = STATE(1351), - [sym_pass_statement] = STATE(1351), - [sym_break_statement] = STATE(1351), - [sym_continue_statement] = STATE(1351), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1351), - [sym_nonlocal_statement] = STATE(1351), - [sym_exec_statement] = STATE(1351), - [sym_type_alias_statement] = STATE(1351), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_import_statement] = STATE(1404), + [sym_future_import_statement] = STATE(1404), + [sym_import_from_statement] = STATE(1404), + [sym_print_statement] = STATE(1404), + [sym_assert_statement] = STATE(1404), + [sym_expression_statement] = STATE(1404), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1404), + [sym_delete_statement] = STATE(1404), + [sym_raise_statement] = STATE(1404), + [sym_pass_statement] = STATE(1404), + [sym_break_statement] = STATE(1404), + [sym_continue_statement] = STATE(1404), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1404), + [sym_nonlocal_statement] = STATE(1404), + [sym_exec_statement] = STATE(1404), + [sym_type_alias_statement] = STATE(1404), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -24411,58 +21956,58 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [135] = { - [sym_import_statement] = STATE(1351), - [sym_future_import_statement] = STATE(1351), - [sym_import_from_statement] = STATE(1351), - [sym_print_statement] = STATE(1351), - [sym_assert_statement] = STATE(1351), - [sym_expression_statement] = STATE(1351), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1351), - [sym_delete_statement] = STATE(1351), - [sym_raise_statement] = STATE(1351), - [sym_pass_statement] = STATE(1351), - [sym_break_statement] = STATE(1351), - [sym_continue_statement] = STATE(1351), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1351), - [sym_nonlocal_statement] = STATE(1351), - [sym_exec_statement] = STATE(1351), - [sym_type_alias_statement] = STATE(1351), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_import_statement] = STATE(1404), + [sym_future_import_statement] = STATE(1404), + [sym_import_from_statement] = STATE(1404), + [sym_print_statement] = STATE(1404), + [sym_assert_statement] = STATE(1404), + [sym_expression_statement] = STATE(1404), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1404), + [sym_delete_statement] = STATE(1404), + [sym_raise_statement] = STATE(1404), + [sym_pass_statement] = STATE(1404), + [sym_break_statement] = STATE(1404), + [sym_continue_statement] = STATE(1404), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1404), + [sym_nonlocal_statement] = STATE(1404), + [sym_exec_statement] = STATE(1404), + [sym_type_alias_statement] = STATE(1404), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -24503,58 +22048,58 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [136] = { - [sym_import_statement] = STATE(1351), - [sym_future_import_statement] = STATE(1351), - [sym_import_from_statement] = STATE(1351), - [sym_print_statement] = STATE(1351), - [sym_assert_statement] = STATE(1351), - [sym_expression_statement] = STATE(1351), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1351), - [sym_delete_statement] = STATE(1351), - [sym_raise_statement] = STATE(1351), - [sym_pass_statement] = STATE(1351), - [sym_break_statement] = STATE(1351), - [sym_continue_statement] = STATE(1351), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1351), - [sym_nonlocal_statement] = STATE(1351), - [sym_exec_statement] = STATE(1351), - [sym_type_alias_statement] = STATE(1351), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_import_statement] = STATE(1404), + [sym_future_import_statement] = STATE(1404), + [sym_import_from_statement] = STATE(1404), + [sym_print_statement] = STATE(1404), + [sym_assert_statement] = STATE(1404), + [sym_expression_statement] = STATE(1404), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1404), + [sym_delete_statement] = STATE(1404), + [sym_raise_statement] = STATE(1404), + [sym_pass_statement] = STATE(1404), + [sym_break_statement] = STATE(1404), + [sym_continue_statement] = STATE(1404), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1404), + [sym_nonlocal_statement] = STATE(1404), + [sym_exec_statement] = STATE(1404), + [sym_type_alias_statement] = STATE(1404), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -24595,58 +22140,58 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [137] = { - [sym_import_statement] = STATE(1351), - [sym_future_import_statement] = STATE(1351), - [sym_import_from_statement] = STATE(1351), - [sym_print_statement] = STATE(1351), - [sym_assert_statement] = STATE(1351), - [sym_expression_statement] = STATE(1351), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1351), - [sym_delete_statement] = STATE(1351), - [sym_raise_statement] = STATE(1351), - [sym_pass_statement] = STATE(1351), - [sym_break_statement] = STATE(1351), - [sym_continue_statement] = STATE(1351), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1351), - [sym_nonlocal_statement] = STATE(1351), - [sym_exec_statement] = STATE(1351), - [sym_type_alias_statement] = STATE(1351), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_import_statement] = STATE(1404), + [sym_future_import_statement] = STATE(1404), + [sym_import_from_statement] = STATE(1404), + [sym_print_statement] = STATE(1404), + [sym_assert_statement] = STATE(1404), + [sym_expression_statement] = STATE(1404), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1404), + [sym_delete_statement] = STATE(1404), + [sym_raise_statement] = STATE(1404), + [sym_pass_statement] = STATE(1404), + [sym_break_statement] = STATE(1404), + [sym_continue_statement] = STATE(1404), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1404), + [sym_nonlocal_statement] = STATE(1404), + [sym_exec_statement] = STATE(1404), + [sym_type_alias_statement] = STATE(1404), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -24687,58 +22232,58 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [138] = { - [sym_import_statement] = STATE(1351), - [sym_future_import_statement] = STATE(1351), - [sym_import_from_statement] = STATE(1351), - [sym_print_statement] = STATE(1351), - [sym_assert_statement] = STATE(1351), - [sym_expression_statement] = STATE(1351), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1351), - [sym_delete_statement] = STATE(1351), - [sym_raise_statement] = STATE(1351), - [sym_pass_statement] = STATE(1351), - [sym_break_statement] = STATE(1351), - [sym_continue_statement] = STATE(1351), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1351), - [sym_nonlocal_statement] = STATE(1351), - [sym_exec_statement] = STATE(1351), - [sym_type_alias_statement] = STATE(1351), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_import_statement] = STATE(1404), + [sym_future_import_statement] = STATE(1404), + [sym_import_from_statement] = STATE(1404), + [sym_print_statement] = STATE(1404), + [sym_assert_statement] = STATE(1404), + [sym_expression_statement] = STATE(1404), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1404), + [sym_delete_statement] = STATE(1404), + [sym_raise_statement] = STATE(1404), + [sym_pass_statement] = STATE(1404), + [sym_break_statement] = STATE(1404), + [sym_continue_statement] = STATE(1404), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1404), + [sym_nonlocal_statement] = STATE(1404), + [sym_exec_statement] = STATE(1404), + [sym_type_alias_statement] = STATE(1404), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -24779,58 +22324,58 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [139] = { - [sym_import_statement] = STATE(1351), - [sym_future_import_statement] = STATE(1351), - [sym_import_from_statement] = STATE(1351), - [sym_print_statement] = STATE(1351), - [sym_assert_statement] = STATE(1351), - [sym_expression_statement] = STATE(1351), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1351), - [sym_delete_statement] = STATE(1351), - [sym_raise_statement] = STATE(1351), - [sym_pass_statement] = STATE(1351), - [sym_break_statement] = STATE(1351), - [sym_continue_statement] = STATE(1351), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1351), - [sym_nonlocal_statement] = STATE(1351), - [sym_exec_statement] = STATE(1351), - [sym_type_alias_statement] = STATE(1351), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_import_statement] = STATE(1404), + [sym_future_import_statement] = STATE(1404), + [sym_import_from_statement] = STATE(1404), + [sym_print_statement] = STATE(1404), + [sym_assert_statement] = STATE(1404), + [sym_expression_statement] = STATE(1404), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1404), + [sym_delete_statement] = STATE(1404), + [sym_raise_statement] = STATE(1404), + [sym_pass_statement] = STATE(1404), + [sym_break_statement] = STATE(1404), + [sym_continue_statement] = STATE(1404), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1404), + [sym_nonlocal_statement] = STATE(1404), + [sym_exec_statement] = STATE(1404), + [sym_type_alias_statement] = STATE(1404), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -24871,58 +22416,58 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [140] = { - [sym_import_statement] = STATE(1351), - [sym_future_import_statement] = STATE(1351), - [sym_import_from_statement] = STATE(1351), - [sym_print_statement] = STATE(1351), - [sym_assert_statement] = STATE(1351), - [sym_expression_statement] = STATE(1351), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1351), - [sym_delete_statement] = STATE(1351), - [sym_raise_statement] = STATE(1351), - [sym_pass_statement] = STATE(1351), - [sym_break_statement] = STATE(1351), - [sym_continue_statement] = STATE(1351), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1351), - [sym_nonlocal_statement] = STATE(1351), - [sym_exec_statement] = STATE(1351), - [sym_type_alias_statement] = STATE(1351), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_import_statement] = STATE(1404), + [sym_future_import_statement] = STATE(1404), + [sym_import_from_statement] = STATE(1404), + [sym_print_statement] = STATE(1404), + [sym_assert_statement] = STATE(1404), + [sym_expression_statement] = STATE(1404), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1404), + [sym_delete_statement] = STATE(1404), + [sym_raise_statement] = STATE(1404), + [sym_pass_statement] = STATE(1404), + [sym_break_statement] = STATE(1404), + [sym_continue_statement] = STATE(1404), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1404), + [sym_nonlocal_statement] = STATE(1404), + [sym_exec_statement] = STATE(1404), + [sym_type_alias_statement] = STATE(1404), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -24963,58 +22508,58 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [141] = { - [sym_import_statement] = STATE(1351), - [sym_future_import_statement] = STATE(1351), - [sym_import_from_statement] = STATE(1351), - [sym_print_statement] = STATE(1351), - [sym_assert_statement] = STATE(1351), - [sym_expression_statement] = STATE(1351), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1351), - [sym_delete_statement] = STATE(1351), - [sym_raise_statement] = STATE(1351), - [sym_pass_statement] = STATE(1351), - [sym_break_statement] = STATE(1351), - [sym_continue_statement] = STATE(1351), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1351), - [sym_nonlocal_statement] = STATE(1351), - [sym_exec_statement] = STATE(1351), - [sym_type_alias_statement] = STATE(1351), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_import_statement] = STATE(1404), + [sym_future_import_statement] = STATE(1404), + [sym_import_from_statement] = STATE(1404), + [sym_print_statement] = STATE(1404), + [sym_assert_statement] = STATE(1404), + [sym_expression_statement] = STATE(1404), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1404), + [sym_delete_statement] = STATE(1404), + [sym_raise_statement] = STATE(1404), + [sym_pass_statement] = STATE(1404), + [sym_break_statement] = STATE(1404), + [sym_continue_statement] = STATE(1404), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1404), + [sym_nonlocal_statement] = STATE(1404), + [sym_exec_statement] = STATE(1404), + [sym_type_alias_statement] = STATE(1404), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -25055,58 +22600,58 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [142] = { - [sym_import_statement] = STATE(1351), - [sym_future_import_statement] = STATE(1351), - [sym_import_from_statement] = STATE(1351), - [sym_print_statement] = STATE(1351), - [sym_assert_statement] = STATE(1351), - [sym_expression_statement] = STATE(1351), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1351), - [sym_delete_statement] = STATE(1351), - [sym_raise_statement] = STATE(1351), - [sym_pass_statement] = STATE(1351), - [sym_break_statement] = STATE(1351), - [sym_continue_statement] = STATE(1351), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1351), - [sym_nonlocal_statement] = STATE(1351), - [sym_exec_statement] = STATE(1351), - [sym_type_alias_statement] = STATE(1351), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_import_statement] = STATE(1404), + [sym_future_import_statement] = STATE(1404), + [sym_import_from_statement] = STATE(1404), + [sym_print_statement] = STATE(1404), + [sym_assert_statement] = STATE(1404), + [sym_expression_statement] = STATE(1404), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1404), + [sym_delete_statement] = STATE(1404), + [sym_raise_statement] = STATE(1404), + [sym_pass_statement] = STATE(1404), + [sym_break_statement] = STATE(1404), + [sym_continue_statement] = STATE(1404), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1404), + [sym_nonlocal_statement] = STATE(1404), + [sym_exec_statement] = STATE(1404), + [sym_type_alias_statement] = STATE(1404), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -25147,58 +22692,58 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [143] = { - [sym_import_statement] = STATE(1351), - [sym_future_import_statement] = STATE(1351), - [sym_import_from_statement] = STATE(1351), - [sym_print_statement] = STATE(1351), - [sym_assert_statement] = STATE(1351), - [sym_expression_statement] = STATE(1351), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1351), - [sym_delete_statement] = STATE(1351), - [sym_raise_statement] = STATE(1351), - [sym_pass_statement] = STATE(1351), - [sym_break_statement] = STATE(1351), - [sym_continue_statement] = STATE(1351), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1351), - [sym_nonlocal_statement] = STATE(1351), - [sym_exec_statement] = STATE(1351), - [sym_type_alias_statement] = STATE(1351), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_import_statement] = STATE(1404), + [sym_future_import_statement] = STATE(1404), + [sym_import_from_statement] = STATE(1404), + [sym_print_statement] = STATE(1404), + [sym_assert_statement] = STATE(1404), + [sym_expression_statement] = STATE(1404), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1404), + [sym_delete_statement] = STATE(1404), + [sym_raise_statement] = STATE(1404), + [sym_pass_statement] = STATE(1404), + [sym_break_statement] = STATE(1404), + [sym_continue_statement] = STATE(1404), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1404), + [sym_nonlocal_statement] = STATE(1404), + [sym_exec_statement] = STATE(1404), + [sym_type_alias_statement] = STATE(1404), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -25239,58 +22784,58 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [144] = { - [sym_import_statement] = STATE(1351), - [sym_future_import_statement] = STATE(1351), - [sym_import_from_statement] = STATE(1351), - [sym_print_statement] = STATE(1351), - [sym_assert_statement] = STATE(1351), - [sym_expression_statement] = STATE(1351), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1351), - [sym_delete_statement] = STATE(1351), - [sym_raise_statement] = STATE(1351), - [sym_pass_statement] = STATE(1351), - [sym_break_statement] = STATE(1351), - [sym_continue_statement] = STATE(1351), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1351), - [sym_nonlocal_statement] = STATE(1351), - [sym_exec_statement] = STATE(1351), - [sym_type_alias_statement] = STATE(1351), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_import_statement] = STATE(1404), + [sym_future_import_statement] = STATE(1404), + [sym_import_from_statement] = STATE(1404), + [sym_print_statement] = STATE(1404), + [sym_assert_statement] = STATE(1404), + [sym_expression_statement] = STATE(1404), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1404), + [sym_delete_statement] = STATE(1404), + [sym_raise_statement] = STATE(1404), + [sym_pass_statement] = STATE(1404), + [sym_break_statement] = STATE(1404), + [sym_continue_statement] = STATE(1404), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1404), + [sym_nonlocal_statement] = STATE(1404), + [sym_exec_statement] = STATE(1404), + [sym_type_alias_statement] = STATE(1404), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -25331,58 +22876,58 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [145] = { - [sym_import_statement] = STATE(1351), - [sym_future_import_statement] = STATE(1351), - [sym_import_from_statement] = STATE(1351), - [sym_print_statement] = STATE(1351), - [sym_assert_statement] = STATE(1351), - [sym_expression_statement] = STATE(1351), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1351), - [sym_delete_statement] = STATE(1351), - [sym_raise_statement] = STATE(1351), - [sym_pass_statement] = STATE(1351), - [sym_break_statement] = STATE(1351), - [sym_continue_statement] = STATE(1351), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1351), - [sym_nonlocal_statement] = STATE(1351), - [sym_exec_statement] = STATE(1351), - [sym_type_alias_statement] = STATE(1351), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_import_statement] = STATE(1404), + [sym_future_import_statement] = STATE(1404), + [sym_import_from_statement] = STATE(1404), + [sym_print_statement] = STATE(1404), + [sym_assert_statement] = STATE(1404), + [sym_expression_statement] = STATE(1404), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1404), + [sym_delete_statement] = STATE(1404), + [sym_raise_statement] = STATE(1404), + [sym_pass_statement] = STATE(1404), + [sym_break_statement] = STATE(1404), + [sym_continue_statement] = STATE(1404), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1404), + [sym_nonlocal_statement] = STATE(1404), + [sym_exec_statement] = STATE(1404), + [sym_type_alias_statement] = STATE(1404), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -25423,58 +22968,58 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [146] = { - [sym_import_statement] = STATE(1351), - [sym_future_import_statement] = STATE(1351), - [sym_import_from_statement] = STATE(1351), - [sym_print_statement] = STATE(1351), - [sym_assert_statement] = STATE(1351), - [sym_expression_statement] = STATE(1351), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1351), - [sym_delete_statement] = STATE(1351), - [sym_raise_statement] = STATE(1351), - [sym_pass_statement] = STATE(1351), - [sym_break_statement] = STATE(1351), - [sym_continue_statement] = STATE(1351), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1351), - [sym_nonlocal_statement] = STATE(1351), - [sym_exec_statement] = STATE(1351), - [sym_type_alias_statement] = STATE(1351), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_import_statement] = STATE(1404), + [sym_future_import_statement] = STATE(1404), + [sym_import_from_statement] = STATE(1404), + [sym_print_statement] = STATE(1404), + [sym_assert_statement] = STATE(1404), + [sym_expression_statement] = STATE(1404), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1404), + [sym_delete_statement] = STATE(1404), + [sym_raise_statement] = STATE(1404), + [sym_pass_statement] = STATE(1404), + [sym_break_statement] = STATE(1404), + [sym_continue_statement] = STATE(1404), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1404), + [sym_nonlocal_statement] = STATE(1404), + [sym_exec_statement] = STATE(1404), + [sym_type_alias_statement] = STATE(1404), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -25515,58 +23060,58 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [147] = { - [sym_import_statement] = STATE(1351), - [sym_future_import_statement] = STATE(1351), - [sym_import_from_statement] = STATE(1351), - [sym_print_statement] = STATE(1351), - [sym_assert_statement] = STATE(1351), - [sym_expression_statement] = STATE(1351), - [sym_named_expression] = STATE(1009), - [sym_return_statement] = STATE(1351), - [sym_delete_statement] = STATE(1351), - [sym_raise_statement] = STATE(1351), - [sym_pass_statement] = STATE(1351), - [sym_break_statement] = STATE(1351), - [sym_continue_statement] = STATE(1351), - [sym_list_splat] = STATE(1360), - [sym_dictionary_splat] = STATE(1360), - [sym_global_statement] = STATE(1351), - [sym_nonlocal_statement] = STATE(1351), - [sym_exec_statement] = STATE(1351), - [sym_type_alias_statement] = STATE(1351), - [sym_expression_list] = STATE(1361), - [sym_pattern] = STATE(889), - [sym_tuple_pattern] = STATE(875), - [sym_list_pattern] = STATE(875), - [sym_list_splat_pattern] = STATE(875), - [sym_expression] = STATE(1019), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_assignment] = STATE(1361), - [sym_augmented_assignment] = STATE(1361), - [sym_pattern_list] = STATE(897), - [sym_yield] = STATE(1361), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), + [sym_import_statement] = STATE(1404), + [sym_future_import_statement] = STATE(1404), + [sym_import_from_statement] = STATE(1404), + [sym_print_statement] = STATE(1404), + [sym_assert_statement] = STATE(1404), + [sym_expression_statement] = STATE(1404), + [sym_named_expression] = STATE(974), + [sym_return_statement] = STATE(1404), + [sym_delete_statement] = STATE(1404), + [sym_raise_statement] = STATE(1404), + [sym_pass_statement] = STATE(1404), + [sym_break_statement] = STATE(1404), + [sym_continue_statement] = STATE(1404), + [sym_list_splat] = STATE(1397), + [sym_dictionary_splat] = STATE(1397), + [sym_global_statement] = STATE(1404), + [sym_nonlocal_statement] = STATE(1404), + [sym_exec_statement] = STATE(1404), + [sym_type_alias_statement] = STATE(1404), + [sym_expression_list] = STATE(1396), + [sym_pattern] = STATE(887), + [sym_tuple_pattern] = STATE(878), + [sym_list_pattern] = STATE(878), + [sym_list_splat_pattern] = STATE(878), + [sym_expression] = STATE(1037), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_assignment] = STATE(1396), + [sym_augmented_assignment] = STATE(1396), + [sym_pattern_list] = STATE(898), + [sym_yield] = STATE(1396), + [sym_attribute] = STATE(444), + [sym_subscript] = STATE(444), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -25606,31 +23151,31 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [148] = { - [sym_named_expression] = STATE(900), - [sym_expression] = STATE(901), + [sym_named_expression] = STATE(905), + [sym_expression] = STATE(903), [sym_primary_expression] = STATE(630), - [sym_not_operator] = STATE(900), - [sym_boolean_operator] = STATE(900), - [sym_binary_operator] = STATE(642), - [sym_unary_operator] = STATE(642), - [sym_comparison_operator] = STATE(900), - [sym_lambda] = STATE(900), - [sym_attribute] = STATE(642), - [sym_subscript] = STATE(642), - [sym_call] = STATE(642), - [sym_list] = STATE(642), - [sym_set] = STATE(642), - [sym_tuple] = STATE(642), - [sym_dictionary] = STATE(642), - [sym_list_comprehension] = STATE(642), - [sym_dictionary_comprehension] = STATE(642), - [sym_set_comprehension] = STATE(642), - [sym_generator_expression] = STATE(642), - [sym_parenthesized_expression] = STATE(642), - [sym_conditional_expression] = STATE(900), - [sym_concatenated_string] = STATE(642), - [sym_string] = STATE(600), - [sym_await] = STATE(900), + [sym_not_operator] = STATE(905), + [sym_boolean_operator] = STATE(905), + [sym_binary_operator] = STATE(622), + [sym_unary_operator] = STATE(622), + [sym_comparison_operator] = STATE(905), + [sym_lambda] = STATE(905), + [sym_attribute] = STATE(622), + [sym_subscript] = STATE(622), + [sym_call] = STATE(622), + [sym_list] = STATE(622), + [sym_set] = STATE(622), + [sym_tuple] = STATE(622), + [sym_dictionary] = STATE(622), + [sym_list_comprehension] = STATE(622), + [sym_dictionary_comprehension] = STATE(622), + [sym_set_comprehension] = STATE(622), + [sym_generator_expression] = STATE(622), + [sym_parenthesized_expression] = STATE(622), + [sym_conditional_expression] = STATE(905), + [sym_concatenated_string] = STATE(622), + [sym_string] = STATE(607), + [sym_await] = STATE(905), [sym_identifier] = ACTIONS(274), [anon_sym_DOT] = ACTIONS(276), [anon_sym_LPAREN] = ACTIONS(278), @@ -25639,7 +23184,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_STAR] = ACTIONS(276), [anon_sym_print] = ACTIONS(285), [anon_sym_GT_GT] = ACTIONS(303), - [anon_sym_COLON_EQ] = ACTIONS(568), + [anon_sym_COLON_EQ] = ACTIONS(562), [anon_sym_if] = ACTIONS(276), [anon_sym_COLON] = ACTIONS(276), [anon_sym_else] = ACTIONS(276), @@ -25689,31 +23234,31 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(315), }, [149] = { - [sym_named_expression] = STATE(900), - [sym_expression] = STATE(901), - [sym_primary_expression] = STATE(643), - [sym_not_operator] = STATE(900), - [sym_boolean_operator] = STATE(900), - [sym_binary_operator] = STATE(642), - [sym_unary_operator] = STATE(642), - [sym_comparison_operator] = STATE(900), - [sym_lambda] = STATE(900), - [sym_attribute] = STATE(642), - [sym_subscript] = STATE(642), - [sym_call] = STATE(642), - [sym_list] = STATE(642), - [sym_set] = STATE(642), - [sym_tuple] = STATE(642), - [sym_dictionary] = STATE(642), - [sym_list_comprehension] = STATE(642), - [sym_dictionary_comprehension] = STATE(642), - [sym_set_comprehension] = STATE(642), - [sym_generator_expression] = STATE(642), - [sym_parenthesized_expression] = STATE(642), - [sym_conditional_expression] = STATE(900), - [sym_concatenated_string] = STATE(642), - [sym_string] = STATE(600), - [sym_await] = STATE(900), + [sym_named_expression] = STATE(905), + [sym_expression] = STATE(903), + [sym_primary_expression] = STATE(621), + [sym_not_operator] = STATE(905), + [sym_boolean_operator] = STATE(905), + [sym_binary_operator] = STATE(622), + [sym_unary_operator] = STATE(622), + [sym_comparison_operator] = STATE(905), + [sym_lambda] = STATE(905), + [sym_attribute] = STATE(622), + [sym_subscript] = STATE(622), + [sym_call] = STATE(622), + [sym_list] = STATE(622), + [sym_set] = STATE(622), + [sym_tuple] = STATE(622), + [sym_dictionary] = STATE(622), + [sym_list_comprehension] = STATE(622), + [sym_dictionary_comprehension] = STATE(622), + [sym_set_comprehension] = STATE(622), + [sym_generator_expression] = STATE(622), + [sym_parenthesized_expression] = STATE(622), + [sym_conditional_expression] = STATE(905), + [sym_concatenated_string] = STATE(622), + [sym_string] = STATE(607), + [sym_await] = STATE(905), [sym_identifier] = ACTIONS(602), [anon_sym_DOT] = ACTIONS(276), [anon_sym_LPAREN] = ACTIONS(604), @@ -25771,53 +23316,53 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(315), }, [150] = { - [sym_named_expression] = STATE(1009), - [sym_expression] = STATE(976), - [sym_primary_expression] = STATE(684), - [sym_not_operator] = STATE(1009), - [sym_boolean_operator] = STATE(1009), - [sym_binary_operator] = STATE(797), - [sym_unary_operator] = STATE(797), - [sym_comparison_operator] = STATE(1009), - [sym_lambda] = STATE(1009), - [sym_attribute] = STATE(797), - [sym_subscript] = STATE(797), - [sym_call] = STATE(797), - [sym_list] = STATE(797), - [sym_set] = STATE(797), - [sym_tuple] = STATE(797), - [sym_dictionary] = STATE(797), - [sym_list_comprehension] = STATE(797), - [sym_dictionary_comprehension] = STATE(797), - [sym_set_comprehension] = STATE(797), - [sym_generator_expression] = STATE(797), - [sym_parenthesized_expression] = STATE(797), - [sym_conditional_expression] = STATE(1009), - [sym_concatenated_string] = STATE(797), - [sym_string] = STATE(713), - [sym_await] = STATE(1009), - [sym_identifier] = ACTIONS(331), + [sym_named_expression] = STATE(974), + [sym_expression] = STATE(1012), + [sym_primary_expression] = STATE(710), + [sym_not_operator] = STATE(974), + [sym_boolean_operator] = STATE(974), + [sym_binary_operator] = STATE(795), + [sym_unary_operator] = STATE(795), + [sym_comparison_operator] = STATE(974), + [sym_lambda] = STATE(974), + [sym_attribute] = STATE(795), + [sym_subscript] = STATE(795), + [sym_call] = STATE(795), + [sym_list] = STATE(795), + [sym_set] = STATE(795), + [sym_tuple] = STATE(795), + [sym_dictionary] = STATE(795), + [sym_list_comprehension] = STATE(795), + [sym_dictionary_comprehension] = STATE(795), + [sym_set_comprehension] = STATE(795), + [sym_generator_expression] = STATE(795), + [sym_parenthesized_expression] = STATE(795), + [sym_conditional_expression] = STATE(974), + [sym_concatenated_string] = STATE(795), + [sym_string] = STATE(683), + [sym_await] = STATE(974), + [sym_identifier] = ACTIONS(379), [anon_sym_DOT] = ACTIONS(276), [anon_sym_from] = ACTIONS(276), - [anon_sym_LPAREN] = ACTIONS(559), + [anon_sym_LPAREN] = ACTIONS(568), [anon_sym_COMMA] = ACTIONS(303), [anon_sym_STAR] = ACTIONS(276), - [anon_sym_print] = ACTIONS(333), + [anon_sym_print] = ACTIONS(381), [anon_sym_GT_GT] = ACTIONS(303), [anon_sym_COLON_EQ] = ACTIONS(287), [anon_sym_if] = ACTIONS(276), - [anon_sym_async] = ACTIONS(333), + [anon_sym_async] = ACTIONS(381), [anon_sym_in] = ACTIONS(276), - [anon_sym_match] = ACTIONS(333), + [anon_sym_match] = ACTIONS(381), [anon_sym_PIPE] = ACTIONS(303), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), - [anon_sym_LBRACK] = ACTIONS(563), + [anon_sym_LBRACK] = ACTIONS(572), [anon_sym_LBRACE] = ACTIONS(51), [anon_sym_STAR_STAR] = ACTIONS(303), [anon_sym_EQ] = ACTIONS(276), - [anon_sym_exec] = ACTIONS(333), - [anon_sym_type] = ACTIONS(333), + [anon_sym_exec] = ACTIONS(381), + [anon_sym_type] = ACTIONS(381), [anon_sym_AT] = ACTIONS(303), [anon_sym_not] = ACTIONS(69), [anon_sym_and] = ACTIONS(276), @@ -25841,46 +23386,46 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_ellipsis] = ACTIONS(75), [sym_integer] = ACTIONS(77), [sym_float] = ACTIONS(75), - [anon_sym_await] = ACTIONS(337), + [anon_sym_await] = ACTIONS(385), [sym_true] = ACTIONS(77), [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__semicolon] = ACTIONS(303), + [anon_sym_SEMI] = ACTIONS(303), [sym__newline] = ACTIONS(303), [sym__string_start] = ACTIONS(81), }, [151] = { - [sym_named_expression] = STATE(900), - [sym_expression] = STATE(901), - [sym_primary_expression] = STATE(643), - [sym_not_operator] = STATE(900), - [sym_boolean_operator] = STATE(900), - [sym_binary_operator] = STATE(642), - [sym_unary_operator] = STATE(642), - [sym_comparison_operator] = STATE(900), - [sym_lambda] = STATE(900), - [sym_attribute] = STATE(642), - [sym_subscript] = STATE(642), - [sym_call] = STATE(642), - [sym_list] = STATE(642), - [sym_set] = STATE(642), - [sym_tuple] = STATE(642), - [sym_dictionary] = STATE(642), - [sym_list_comprehension] = STATE(642), - [sym_dictionary_comprehension] = STATE(642), - [sym_set_comprehension] = STATE(642), - [sym_generator_expression] = STATE(642), - [sym_parenthesized_expression] = STATE(642), - [sym_conditional_expression] = STATE(900), - [sym_concatenated_string] = STATE(642), - [sym_string] = STATE(600), - [sym_await] = STATE(900), + [sym_named_expression] = STATE(905), + [sym_expression] = STATE(903), + [sym_primary_expression] = STATE(621), + [sym_not_operator] = STATE(905), + [sym_boolean_operator] = STATE(905), + [sym_binary_operator] = STATE(622), + [sym_unary_operator] = STATE(622), + [sym_comparison_operator] = STATE(905), + [sym_lambda] = STATE(905), + [sym_attribute] = STATE(622), + [sym_subscript] = STATE(622), + [sym_call] = STATE(622), + [sym_list] = STATE(622), + [sym_set] = STATE(622), + [sym_tuple] = STATE(622), + [sym_dictionary] = STATE(622), + [sym_list_comprehension] = STATE(622), + [sym_dictionary_comprehension] = STATE(622), + [sym_set_comprehension] = STATE(622), + [sym_generator_expression] = STATE(622), + [sym_parenthesized_expression] = STATE(622), + [sym_conditional_expression] = STATE(905), + [sym_concatenated_string] = STATE(622), + [sym_string] = STATE(607), + [sym_await] = STATE(905), [sym_identifier] = ACTIONS(602), [anon_sym_DOT] = ACTIONS(276), [anon_sym_LPAREN] = ACTIONS(604), - [anon_sym_RPAREN] = ACTIONS(303), - [anon_sym_COMMA] = ACTIONS(303), + [anon_sym_RPAREN] = ACTIONS(280), + [anon_sym_COMMA] = ACTIONS(280), [anon_sym_STAR] = ACTIONS(276), [anon_sym_print] = ACTIONS(606), [anon_sym_GT_GT] = ACTIONS(303), @@ -25894,9 +23439,9 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_DASH] = ACTIONS(610), [anon_sym_PLUS] = ACTIONS(610), [anon_sym_LBRACK] = ACTIONS(612), + [anon_sym_RBRACK] = ACTIONS(280), [anon_sym_LBRACE] = ACTIONS(295), [anon_sym_STAR_STAR] = ACTIONS(303), - [anon_sym_EQ] = ACTIONS(620), [anon_sym_exec] = ACTIONS(606), [anon_sym_type] = ACTIONS(606), [anon_sym_AT] = ACTIONS(303), @@ -25930,36 +23475,36 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(315), }, [152] = { - [sym_named_expression] = STATE(900), - [sym_expression] = STATE(901), - [sym_primary_expression] = STATE(643), - [sym_not_operator] = STATE(900), - [sym_boolean_operator] = STATE(900), - [sym_binary_operator] = STATE(642), - [sym_unary_operator] = STATE(642), - [sym_comparison_operator] = STATE(900), - [sym_lambda] = STATE(900), - [sym_attribute] = STATE(642), - [sym_subscript] = STATE(642), - [sym_call] = STATE(642), - [sym_list] = STATE(642), - [sym_set] = STATE(642), - [sym_tuple] = STATE(642), - [sym_dictionary] = STATE(642), - [sym_list_comprehension] = STATE(642), - [sym_dictionary_comprehension] = STATE(642), - [sym_set_comprehension] = STATE(642), - [sym_generator_expression] = STATE(642), - [sym_parenthesized_expression] = STATE(642), - [sym_conditional_expression] = STATE(900), - [sym_concatenated_string] = STATE(642), - [sym_string] = STATE(600), - [sym_await] = STATE(900), + [sym_named_expression] = STATE(905), + [sym_expression] = STATE(903), + [sym_primary_expression] = STATE(621), + [sym_not_operator] = STATE(905), + [sym_boolean_operator] = STATE(905), + [sym_binary_operator] = STATE(622), + [sym_unary_operator] = STATE(622), + [sym_comparison_operator] = STATE(905), + [sym_lambda] = STATE(905), + [sym_attribute] = STATE(622), + [sym_subscript] = STATE(622), + [sym_call] = STATE(622), + [sym_list] = STATE(622), + [sym_set] = STATE(622), + [sym_tuple] = STATE(622), + [sym_dictionary] = STATE(622), + [sym_list_comprehension] = STATE(622), + [sym_dictionary_comprehension] = STATE(622), + [sym_set_comprehension] = STATE(622), + [sym_generator_expression] = STATE(622), + [sym_parenthesized_expression] = STATE(622), + [sym_conditional_expression] = STATE(905), + [sym_concatenated_string] = STATE(622), + [sym_string] = STATE(607), + [sym_await] = STATE(905), [sym_identifier] = ACTIONS(602), [anon_sym_DOT] = ACTIONS(276), [anon_sym_LPAREN] = ACTIONS(604), - [anon_sym_RPAREN] = ACTIONS(280), - [anon_sym_COMMA] = ACTIONS(280), + [anon_sym_RPAREN] = ACTIONS(303), + [anon_sym_COMMA] = ACTIONS(303), [anon_sym_STAR] = ACTIONS(276), [anon_sym_print] = ACTIONS(606), [anon_sym_GT_GT] = ACTIONS(303), @@ -25973,9 +23518,9 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_DASH] = ACTIONS(610), [anon_sym_PLUS] = ACTIONS(610), [anon_sym_LBRACK] = ACTIONS(612), - [anon_sym_RBRACK] = ACTIONS(280), [anon_sym_LBRACE] = ACTIONS(295), [anon_sym_STAR_STAR] = ACTIONS(303), + [anon_sym_EQ] = ACTIONS(620), [anon_sym_exec] = ACTIONS(606), [anon_sym_type] = ACTIONS(606), [anon_sym_AT] = ACTIONS(303), @@ -26009,31 +23554,31 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(315), }, [153] = { - [sym_named_expression] = STATE(1015), - [sym_expression] = STATE(1042), + [sym_named_expression] = STATE(1053), + [sym_expression] = STATE(1054), [sym_primary_expression] = STATE(740), - [sym_not_operator] = STATE(1015), - [sym_boolean_operator] = STATE(1015), - [sym_binary_operator] = STATE(811), - [sym_unary_operator] = STATE(811), - [sym_comparison_operator] = STATE(1015), - [sym_lambda] = STATE(1015), - [sym_attribute] = STATE(811), - [sym_subscript] = STATE(811), - [sym_call] = STATE(811), - [sym_list] = STATE(811), - [sym_set] = STATE(811), - [sym_tuple] = STATE(811), - [sym_dictionary] = STATE(811), - [sym_list_comprehension] = STATE(811), - [sym_dictionary_comprehension] = STATE(811), - [sym_set_comprehension] = STATE(811), - [sym_generator_expression] = STATE(811), - [sym_parenthesized_expression] = STATE(811), - [sym_conditional_expression] = STATE(1015), - [sym_concatenated_string] = STATE(811), - [sym_string] = STATE(742), - [sym_await] = STATE(1015), + [sym_not_operator] = STATE(1053), + [sym_boolean_operator] = STATE(1053), + [sym_binary_operator] = STATE(813), + [sym_unary_operator] = STATE(813), + [sym_comparison_operator] = STATE(1053), + [sym_lambda] = STATE(1053), + [sym_attribute] = STATE(813), + [sym_subscript] = STATE(813), + [sym_call] = STATE(813), + [sym_list] = STATE(813), + [sym_set] = STATE(813), + [sym_tuple] = STATE(813), + [sym_dictionary] = STATE(813), + [sym_list_comprehension] = STATE(813), + [sym_dictionary_comprehension] = STATE(813), + [sym_set_comprehension] = STATE(813), + [sym_generator_expression] = STATE(813), + [sym_parenthesized_expression] = STATE(813), + [sym_conditional_expression] = STATE(1053), + [sym_concatenated_string] = STATE(813), + [sym_string] = STATE(739), + [sym_await] = STATE(1053), [sym_identifier] = ACTIONS(622), [anon_sym_DOT] = ACTIONS(276), [anon_sym_LPAREN] = ACTIONS(624), @@ -26088,31 +23633,31 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(646), }, [154] = { - [sym_named_expression] = STATE(900), - [sym_expression] = STATE(901), + [sym_named_expression] = STATE(905), + [sym_expression] = STATE(903), [sym_primary_expression] = STATE(630), - [sym_not_operator] = STATE(900), - [sym_boolean_operator] = STATE(900), - [sym_binary_operator] = STATE(642), - [sym_unary_operator] = STATE(642), - [sym_comparison_operator] = STATE(900), - [sym_lambda] = STATE(900), - [sym_attribute] = STATE(642), - [sym_subscript] = STATE(642), - [sym_call] = STATE(642), - [sym_list] = STATE(642), - [sym_set] = STATE(642), - [sym_tuple] = STATE(642), - [sym_dictionary] = STATE(642), - [sym_list_comprehension] = STATE(642), - [sym_dictionary_comprehension] = STATE(642), - [sym_set_comprehension] = STATE(642), - [sym_generator_expression] = STATE(642), - [sym_parenthesized_expression] = STATE(642), - [sym_conditional_expression] = STATE(900), - [sym_concatenated_string] = STATE(642), - [sym_string] = STATE(600), - [sym_await] = STATE(900), + [sym_not_operator] = STATE(905), + [sym_boolean_operator] = STATE(905), + [sym_binary_operator] = STATE(622), + [sym_unary_operator] = STATE(622), + [sym_comparison_operator] = STATE(905), + [sym_lambda] = STATE(905), + [sym_attribute] = STATE(622), + [sym_subscript] = STATE(622), + [sym_call] = STATE(622), + [sym_list] = STATE(622), + [sym_set] = STATE(622), + [sym_tuple] = STATE(622), + [sym_dictionary] = STATE(622), + [sym_list_comprehension] = STATE(622), + [sym_dictionary_comprehension] = STATE(622), + [sym_set_comprehension] = STATE(622), + [sym_generator_expression] = STATE(622), + [sym_parenthesized_expression] = STATE(622), + [sym_conditional_expression] = STATE(905), + [sym_concatenated_string] = STATE(622), + [sym_string] = STATE(607), + [sym_await] = STATE(905), [sym_identifier] = ACTIONS(274), [anon_sym_DOT] = ACTIONS(276), [anon_sym_LPAREN] = ACTIONS(278), @@ -26121,7 +23666,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_STAR] = ACTIONS(276), [anon_sym_print] = ACTIONS(285), [anon_sym_GT_GT] = ACTIONS(303), - [anon_sym_COLON_EQ] = ACTIONS(568), + [anon_sym_COLON_EQ] = ACTIONS(562), [anon_sym_if] = ACTIONS(276), [anon_sym_async] = ACTIONS(285), [anon_sym_in] = ACTIONS(276), @@ -26193,30 +23738,30 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(81), 1, sym__string_start, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + STATE(683), 1, sym_string, - STATE(889), 1, + STATE(710), 1, + sym_primary_expression, + STATE(887), 1, sym_pattern, - STATE(897), 1, + STATE(898), 1, sym_pattern_list, - STATE(1034), 1, + STATE(1022), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, sym_float, - STATE(431), 2, + STATE(444), 2, sym_attribute, sym_subscript, - STATE(1360), 2, + STATE(1397), 2, sym_list_splat, sym_dictionary_splat, ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(875), 3, + STATE(878), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, @@ -26231,13 +23776,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1369), 5, + STATE(1362), 5, sym_expression_list, sym_assignment, sym_augmented_assignment, sym__right_hand_side, sym_yield, - STATE(1009), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -26245,7 +23790,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 13, + STATE(795), 13, sym_binary_operator, sym_unary_operator, sym_call, @@ -26284,30 +23829,30 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(81), 1, sym__string_start, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + STATE(683), 1, sym_string, - STATE(889), 1, + STATE(710), 1, + sym_primary_expression, + STATE(887), 1, sym_pattern, - STATE(897), 1, + STATE(898), 1, sym_pattern_list, - STATE(1034), 1, + STATE(1022), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, sym_float, - STATE(431), 2, + STATE(444), 2, sym_attribute, sym_subscript, - STATE(1360), 2, + STATE(1397), 2, sym_list_splat, sym_dictionary_splat, ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(875), 3, + STATE(878), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, @@ -26322,13 +23867,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1391), 5, + STATE(1409), 5, sym_expression_list, sym_assignment, sym_augmented_assignment, sym__right_hand_side, sym_yield, - STATE(1009), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -26336,7 +23881,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 13, + STATE(795), 13, sym_binary_operator, sym_unary_operator, sym_call, @@ -26375,30 +23920,30 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(81), 1, sym__string_start, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + STATE(683), 1, sym_string, - STATE(889), 1, + STATE(710), 1, + sym_primary_expression, + STATE(887), 1, sym_pattern, - STATE(897), 1, + STATE(898), 1, sym_pattern_list, - STATE(1034), 1, + STATE(1022), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, sym_float, - STATE(431), 2, + STATE(444), 2, sym_attribute, sym_subscript, - STATE(1360), 2, + STATE(1397), 2, sym_list_splat, sym_dictionary_splat, ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(875), 3, + STATE(878), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, @@ -26413,13 +23958,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1386), 5, + STATE(1411), 5, sym_expression_list, sym_assignment, sym_augmented_assignment, sym__right_hand_side, sym_yield, - STATE(1009), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -26427,7 +23972,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 13, + STATE(795), 13, sym_binary_operator, sym_unary_operator, sym_call, @@ -26466,18 +24011,18 @@ static const uint16_t ts_small_parse_table[] = { sym__string_start, ACTIONS(648), 1, anon_sym_from, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(929), 1, + STATE(928), 1, sym_expression, - STATE(1041), 1, + STATE(1043), 1, sym_expression_list, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1366), 2, + STATE(1373), 2, sym_list_splat, sym_dictionary_splat, ACTIONS(301), 3, @@ -26503,7 +24048,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACE, anon_sym_EQ, sym_type_conversion, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -26511,7 +24056,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -26527,7 +24072,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [464] = 27, + [464] = 28, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, @@ -26543,307 +24088,43 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(654), 1, anon_sym_LPAREN, ACTIONS(656), 1, + anon_sym_RPAREN, + ACTIONS(658), 1, anon_sym_STAR, - ACTIONS(660), 1, - anon_sym_LBRACK, ACTIONS(662), 1, - anon_sym_RBRACK, - ACTIONS(664), 1, - anon_sym_yield, - ACTIONS(666), 1, - anon_sym_await, - STATE(600), 1, - sym_string, - STATE(643), 1, - sym_primary_expression, - STATE(932), 1, - sym_expression, - STATE(1146), 1, - sym_pattern, - STATE(1497), 1, - sym__patterns, - STATE(1503), 1, - sym__collection_elements, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - STATE(806), 2, - sym_attribute, - sym_subscript, - ACTIONS(610), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - STATE(875), 3, - sym_tuple_pattern, - sym_list_pattern, - sym_list_splat_pattern, - STATE(1100), 3, - sym_list_splat, - sym_parenthesized_list_splat, - sym_yield, - ACTIONS(311), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(658), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(900), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(642), 13, - sym_binary_operator, - sym_unary_operator, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [579] = 27, - ACTIONS(3), 1, - sym_comment, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(614), 1, - anon_sym_not, - ACTIONS(616), 1, - anon_sym_lambda, - ACTIONS(652), 1, - sym_identifier, - ACTIONS(654), 1, - anon_sym_LPAREN, - ACTIONS(656), 1, - anon_sym_STAR, - ACTIONS(660), 1, - anon_sym_LBRACK, - ACTIONS(664), 1, - anon_sym_yield, - ACTIONS(666), 1, - anon_sym_await, - ACTIONS(668), 1, - anon_sym_RBRACK, - STATE(600), 1, - sym_string, - STATE(643), 1, - sym_primary_expression, - STATE(941), 1, - sym_expression, - STATE(1146), 1, - sym_pattern, - STATE(1467), 1, - sym__collection_elements, - STATE(1497), 1, - sym__patterns, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - STATE(806), 2, - sym_attribute, - sym_subscript, - ACTIONS(610), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - STATE(875), 3, - sym_tuple_pattern, - sym_list_pattern, - sym_list_splat_pattern, - STATE(1100), 3, - sym_list_splat, - sym_parenthesized_list_splat, - sym_yield, - ACTIONS(311), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(658), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(900), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(642), 13, - sym_binary_operator, - sym_unary_operator, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [694] = 27, - ACTIONS(3), 1, - sym_comment, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(614), 1, - anon_sym_not, - ACTIONS(616), 1, - anon_sym_lambda, - ACTIONS(652), 1, - sym_identifier, - ACTIONS(654), 1, - anon_sym_LPAREN, - ACTIONS(656), 1, - anon_sym_STAR, - ACTIONS(660), 1, anon_sym_LBRACK, ACTIONS(664), 1, anon_sym_yield, ACTIONS(666), 1, anon_sym_await, - ACTIONS(670), 1, - anon_sym_RBRACK, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(621), 1, sym_primary_expression, - STATE(941), 1, - sym_expression, - STATE(1146), 1, - sym_pattern, - STATE(1467), 1, - sym__collection_elements, - STATE(1497), 1, - sym__patterns, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - STATE(806), 2, - sym_attribute, - sym_subscript, - ACTIONS(610), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - STATE(875), 3, - sym_tuple_pattern, - sym_list_pattern, - sym_list_splat_pattern, - STATE(1100), 3, - sym_list_splat, - sym_parenthesized_list_splat, - sym_yield, - ACTIONS(311), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(658), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(900), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(642), 13, - sym_binary_operator, - sym_unary_operator, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [809] = 28, - ACTIONS(3), 1, - sym_comment, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(614), 1, - anon_sym_not, - ACTIONS(616), 1, - anon_sym_lambda, - ACTIONS(652), 1, - sym_identifier, - ACTIONS(654), 1, - anon_sym_LPAREN, - ACTIONS(656), 1, - anon_sym_STAR, - ACTIONS(660), 1, - anon_sym_LBRACK, - ACTIONS(664), 1, - anon_sym_yield, - ACTIONS(666), 1, - anon_sym_await, - ACTIONS(672), 1, - anon_sym_RPAREN, - STATE(600), 1, - sym_string, - STATE(643), 1, - sym_primary_expression, - STATE(930), 1, + STATE(947), 1, sym_expression, - STATE(1146), 1, + STATE(1167), 1, sym_pattern, STATE(1219), 1, sym_yield, - STATE(1434), 1, - sym__patterns, - STATE(1484), 1, + STATE(1445), 1, sym__collection_elements, + STATE(1446), 1, + sym__patterns, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(806), 2, + STATE(797), 2, sym_attribute, sym_subscript, - STATE(1100), 2, + STATE(1118), 2, sym_list_splat, sym_parenthesized_list_splat, ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(875), 3, + STATE(878), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, @@ -26852,13 +24133,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(658), 5, + ACTIONS(660), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -26866,7 +24147,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 13, + STATE(622), 13, sym_binary_operator, sym_unary_operator, sym_call, @@ -26880,7 +24161,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [926] = 29, + [581] = 28, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, @@ -26895,45 +24176,44 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(654), 1, anon_sym_LPAREN, - ACTIONS(656), 1, + ACTIONS(658), 1, anon_sym_STAR, - ACTIONS(660), 1, + ACTIONS(662), 1, anon_sym_LBRACK, ACTIONS(664), 1, anon_sym_yield, ACTIONS(666), 1, anon_sym_await, - ACTIONS(674), 1, + ACTIONS(668), 1, anon_sym_RPAREN, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(621), 1, sym_primary_expression, - STATE(930), 1, + STATE(950), 1, sym_expression, - STATE(1146), 1, + STATE(1167), 1, sym_pattern, - STATE(1219), 1, + STATE(1279), 1, sym_yield, - STATE(1301), 1, - sym_parenthesized_list_splat, - STATE(1303), 1, - sym_list_splat, - STATE(1434), 1, - sym__patterns, - STATE(1484), 1, + STATE(1440), 1, sym__collection_elements, + STATE(1446), 1, + sym__patterns, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(806), 2, + STATE(797), 2, sym_attribute, sym_subscript, + STATE(1118), 2, + sym_list_splat, + sym_parenthesized_list_splat, ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(875), 3, + STATE(878), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, @@ -26942,13 +24222,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(658), 5, + ACTIONS(660), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -26956,7 +24236,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 13, + STATE(622), 13, sym_binary_operator, sym_unary_operator, sym_call, @@ -26970,7 +24250,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [1045] = 28, + [698] = 27, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, @@ -26985,59 +24265,58 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(654), 1, anon_sym_LPAREN, - ACTIONS(656), 1, + ACTIONS(658), 1, anon_sym_STAR, - ACTIONS(660), 1, + ACTIONS(662), 1, anon_sym_LBRACK, ACTIONS(664), 1, anon_sym_yield, ACTIONS(666), 1, anon_sym_await, - ACTIONS(676), 1, - anon_sym_RPAREN, - STATE(600), 1, + ACTIONS(670), 1, + anon_sym_RBRACK, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(621), 1, sym_primary_expression, - STATE(931), 1, + STATE(944), 1, sym_expression, - STATE(1146), 1, + STATE(1167), 1, sym_pattern, - STATE(1251), 1, - sym_yield, - STATE(1431), 1, - sym__collection_elements, - STATE(1434), 1, + STATE(1429), 1, sym__patterns, + STATE(1528), 1, + sym__collection_elements, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(806), 2, + STATE(797), 2, sym_attribute, sym_subscript, - STATE(1100), 2, - sym_list_splat, - sym_parenthesized_list_splat, ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(875), 3, + STATE(878), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, + STATE(1118), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(658), 5, + ACTIONS(660), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -27045,7 +24324,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 13, + STATE(622), 13, sym_binary_operator, sym_unary_operator, sym_call, @@ -27059,135 +24338,58 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [1162] = 20, + [813] = 27, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(301), 1, - anon_sym_TILDE, ACTIONS(315), 1, sym__string_start, - ACTIONS(678), 1, - sym_identifier, - ACTIONS(680), 1, - anon_sym_LPAREN, - ACTIONS(682), 1, - anon_sym_STAR, - ACTIONS(688), 1, - anon_sym_in, - ACTIONS(690), 1, - anon_sym_LBRACK, - STATE(600), 1, - sym_string, - STATE(876), 1, - sym_pattern, - STATE(882), 1, - sym_primary_expression, - ACTIONS(291), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - STATE(770), 2, - sym_attribute, - sym_subscript, - STATE(875), 3, - sym_tuple_pattern, - sym_list_pattern, - sym_list_splat_pattern, - ACTIONS(311), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(684), 6, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - anon_sym_await, - STATE(642), 13, - sym_binary_operator, - sym_unary_operator, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - ACTIONS(686), 15, - anon_sym_COLON, - anon_sym_EQ, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - [1262] = 27, - ACTIONS(3), 1, - sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(283), 1, - anon_sym_STAR, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(602), 1, - sym_identifier, - ACTIONS(612), 1, - anon_sym_LBRACK, ACTIONS(614), 1, anon_sym_not, ACTIONS(616), 1, anon_sym_lambda, - ACTIONS(618), 1, - anon_sym_await, + ACTIONS(652), 1, + sym_identifier, + ACTIONS(654), 1, + anon_sym_LPAREN, + ACTIONS(658), 1, + anon_sym_STAR, + ACTIONS(662), 1, + anon_sym_LBRACK, ACTIONS(664), 1, anon_sym_yield, - ACTIONS(692), 1, - anon_sym_LPAREN, - ACTIONS(694), 1, - anon_sym_COMMA, - ACTIONS(696), 1, - anon_sym_RBRACE, - STATE(600), 1, + ACTIONS(666), 1, + anon_sym_await, + ACTIONS(672), 1, + anon_sym_RBRACK, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(621), 1, sym_primary_expression, - STATE(907), 1, + STATE(953), 1, sym_expression, - STATE(1052), 1, - sym_pair, - STATE(1327), 1, - sym_dictionary_splat, - STATE(1513), 1, + STATE(1167), 1, + sym_pattern, + STATE(1412), 1, sym__collection_elements, + STATE(1429), 1, + sym__patterns, ACTIONS(309), 2, sym_ellipsis, sym_float, + STATE(797), 2, + sym_attribute, + sym_subscript, ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1100), 3, + STATE(878), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + STATE(1118), 3, sym_list_splat, sym_parenthesized_list_splat, sym_yield, @@ -27196,13 +24398,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(606), 5, + ACTIONS(660), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -27210,11 +24412,9 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 13, sym_binary_operator, sym_unary_operator, - sym_attribute, - sym_subscript, sym_call, sym_list, sym_set, @@ -27226,65 +24426,75 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [1376] = 22, + [928] = 29, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(274), 1, - sym_identifier, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(283), 1, - anon_sym_STAR, - ACTIONS(293), 1, - anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(299), 1, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(614), 1, anon_sym_not, - ACTIONS(305), 1, + ACTIONS(616), 1, anon_sym_lambda, - ACTIONS(313), 1, + ACTIONS(652), 1, + sym_identifier, + ACTIONS(654), 1, + anon_sym_LPAREN, + ACTIONS(658), 1, + anon_sym_STAR, + ACTIONS(662), 1, + anon_sym_LBRACK, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(666), 1, anon_sym_await, - ACTIONS(315), 1, - sym__string_start, - STATE(600), 1, + ACTIONS(674), 1, + anon_sym_RPAREN, + STATE(607), 1, sym_string, - STATE(630), 1, + STATE(621), 1, sym_primary_expression, - STATE(933), 1, + STATE(947), 1, sym_expression, + STATE(1167), 1, + sym_pattern, + STATE(1219), 1, + sym_yield, + STATE(1320), 1, + sym_parenthesized_list_splat, + STATE(1321), 1, + sym_list_splat, + STATE(1445), 1, + sym__collection_elements, + STATE(1446), 1, + sym__patterns, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1023), 2, - sym_list_splat, - sym_dictionary_splat, - ACTIONS(301), 3, + STATE(797), 2, + sym_attribute, + sym_subscript, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, + STATE(878), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(285), 5, + ACTIONS(660), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - ACTIONS(698), 7, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_RBRACK, - anon_sym_RBRACE, - anon_sym_EQ, - sym_type_conversion, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -27292,11 +24502,9 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 13, sym_binary_operator, sym_unary_operator, - sym_attribute, - sym_subscript, sym_call, sym_list, sym_set, @@ -27308,65 +24516,73 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [1480] = 22, + [1047] = 27, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(274), 1, - sym_identifier, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(283), 1, - anon_sym_STAR, - ACTIONS(293), 1, - anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(299), 1, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(614), 1, anon_sym_not, - ACTIONS(305), 1, + ACTIONS(616), 1, anon_sym_lambda, - ACTIONS(313), 1, + ACTIONS(652), 1, + sym_identifier, + ACTIONS(654), 1, + anon_sym_LPAREN, + ACTIONS(658), 1, + anon_sym_STAR, + ACTIONS(662), 1, + anon_sym_LBRACK, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(666), 1, anon_sym_await, - ACTIONS(315), 1, - sym__string_start, - STATE(600), 1, + ACTIONS(676), 1, + anon_sym_RBRACK, + STATE(607), 1, sym_string, - STATE(630), 1, + STATE(621), 1, sym_primary_expression, - STATE(933), 1, + STATE(944), 1, sym_expression, + STATE(1167), 1, + sym_pattern, + STATE(1429), 1, + sym__patterns, + STATE(1528), 1, + sym__collection_elements, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1023), 2, - sym_list_splat, - sym_dictionary_splat, - ACTIONS(301), 3, + STATE(797), 2, + sym_attribute, + sym_subscript, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, + STATE(878), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + STATE(1118), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(285), 5, + ACTIONS(660), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - ACTIONS(700), 7, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_RBRACK, - anon_sym_RBRACE, - anon_sym_EQ, - sym_type_conversion, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -27374,11 +24590,9 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 13, sym_binary_operator, sym_unary_operator, - sym_attribute, - sym_subscript, sym_call, sym_list, sym_set, @@ -27390,7 +24604,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [1584] = 27, + [1162] = 27, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, @@ -27413,23 +24627,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(664), 1, anon_sym_yield, - ACTIONS(692), 1, + ACTIONS(678), 1, anon_sym_LPAREN, - ACTIONS(702), 1, + ACTIONS(680), 1, anon_sym_COMMA, - ACTIONS(704), 1, + ACTIONS(682), 1, anon_sym_RBRACE, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(621), 1, sym_primary_expression, - STATE(911), 1, + STATE(913), 1, sym_expression, - STATE(1038), 1, + STATE(1039), 1, sym_pair, - STATE(1225), 1, + STATE(1265), 1, sym_dictionary_splat, - STATE(1460), 1, + STATE(1426), 1, sym__collection_elements, ACTIONS(309), 2, sym_ellipsis, @@ -27438,7 +24652,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1100), 3, + STATE(1118), 3, sym_list_splat, sym_parenthesized_list_splat, sym_yield, @@ -27453,7 +24667,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -27461,7 +24675,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -27477,7 +24691,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [1698] = 27, + [1276] = 27, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, @@ -27500,23 +24714,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(664), 1, anon_sym_yield, - ACTIONS(692), 1, + ACTIONS(678), 1, anon_sym_LPAREN, - ACTIONS(706), 1, + ACTIONS(684), 1, anon_sym_COMMA, - ACTIONS(708), 1, + ACTIONS(686), 1, anon_sym_RBRACE, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(621), 1, sym_primary_expression, - STATE(918), 1, + STATE(929), 1, sym_expression, - STATE(1049), 1, + STATE(1050), 1, sym_pair, - STATE(1311), 1, + STATE(1294), 1, sym_dictionary_splat, - STATE(1461), 1, + STATE(1439), 1, sym__collection_elements, ACTIONS(309), 2, sym_ellipsis, @@ -27525,7 +24739,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1100), 3, + STATE(1118), 3, sym_list_splat, sym_parenthesized_list_splat, sym_yield, @@ -27540,7 +24754,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -27548,7 +24762,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -27564,7 +24778,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [1812] = 22, + [1390] = 22, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, @@ -27587,16 +24801,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(933), 1, + STATE(941), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1023), 2, + STATE(1052), 2, sym_list_splat, sym_dictionary_splat, ACTIONS(301), 3, @@ -27614,7 +24828,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - ACTIONS(700), 7, + ACTIONS(688), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -27622,7 +24836,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACE, anon_sym_EQ, sym_type_conversion, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -27630,7 +24844,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -27646,7 +24860,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [1916] = 20, + [1494] = 20, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, @@ -27655,21 +24869,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, ACTIONS(315), 1, sym__string_start, - ACTIONS(678), 1, + ACTIONS(690), 1, sym_identifier, - ACTIONS(680), 1, + ACTIONS(692), 1, anon_sym_LPAREN, - ACTIONS(682), 1, + ACTIONS(694), 1, anon_sym_STAR, - ACTIONS(690), 1, - anon_sym_LBRACK, - ACTIONS(712), 1, + ACTIONS(700), 1, anon_sym_in, - STATE(600), 1, + ACTIONS(702), 1, + anon_sym_LBRACK, + STATE(607), 1, sym_string, - STATE(876), 1, + STATE(877), 1, sym_pattern, - STATE(882), 1, + STATE(883), 1, sym_primary_expression, ACTIONS(291), 2, anon_sym_DASH, @@ -27680,7 +24894,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(770), 2, sym_attribute, sym_subscript, - STATE(875), 3, + STATE(878), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, @@ -27689,14 +24903,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(684), 6, + ACTIONS(696), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 13, + STATE(622), 13, sym_binary_operator, sym_unary_operator, sym_call, @@ -27710,7 +24924,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - ACTIONS(710), 15, + ACTIONS(698), 15, anon_sym_COLON, anon_sym_EQ, anon_sym_PLUS_EQ, @@ -27726,77 +24940,59 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_EQ, anon_sym_CARET_EQ, anon_sym_PIPE_EQ, - [2016] = 25, + [1594] = 20, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, anon_sym_LBRACE, + ACTIONS(301), 1, + anon_sym_TILDE, ACTIONS(315), 1, sym__string_start, - ACTIONS(602), 1, + ACTIONS(690), 1, sym_identifier, - ACTIONS(612), 1, - anon_sym_LBRACK, - ACTIONS(614), 1, - anon_sym_not, - ACTIONS(616), 1, - anon_sym_lambda, - ACTIONS(618), 1, - anon_sym_await, - ACTIONS(664), 1, - anon_sym_yield, ACTIONS(692), 1, anon_sym_LPAREN, - ACTIONS(714), 1, - anon_sym_RPAREN, - ACTIONS(716), 1, + ACTIONS(694), 1, anon_sym_STAR, - STATE(600), 1, + ACTIONS(702), 1, + anon_sym_LBRACK, + ACTIONS(706), 1, + anon_sym_in, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(877), 1, + sym_pattern, + STATE(883), 1, sym_primary_expression, - STATE(915), 1, - sym_expression, - STATE(1268), 1, - sym_with_item, - STATE(1313), 1, - sym_yield, - STATE(1475), 1, - sym__collection_elements, + ACTIONS(291), 2, + anon_sym_DASH, + anon_sym_PLUS, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1100), 2, - sym_list_splat, - sym_parenthesized_list_splat, - ACTIONS(610), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, + STATE(770), 2, + sym_attribute, + sym_subscript, + STATE(878), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(606), 5, + ACTIONS(696), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(642), 15, + anon_sym_await, + STATE(622), 13, sym_binary_operator, sym_unary_operator, - sym_attribute, - sym_subscript, sym_call, sym_list, sym_set, @@ -27808,11 +25004,33 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [2123] = 22, + ACTIONS(704), 15, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [1694] = 22, ACTIONS(3), 1, sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, ACTIONS(274), 1, sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, ACTIONS(293), 1, anon_sym_LBRACK, ACTIONS(295), 1, @@ -27825,33 +25043,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - ACTIONS(664), 1, - anon_sym_yield, - ACTIONS(716), 1, - anon_sym_STAR, - ACTIONS(718), 1, - anon_sym_LPAREN, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1053), 1, + STATE(941), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, + STATE(1052), 2, + sym_list_splat, + sym_dictionary_splat, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(720), 3, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_RBRACE, - STATE(1166), 3, - sym_list_splat, - sym_parenthesized_list_splat, - sym_yield, ACTIONS(311), 4, sym_integer, sym_true, @@ -27863,7 +25070,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + ACTIONS(708), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -27871,7 +25086,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -27887,11 +25102,17 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [2224] = 22, + [1798] = 22, ACTIONS(3), 1, sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, ACTIONS(274), 1, sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, ACTIONS(293), 1, anon_sym_LBRACK, ACTIONS(295), 1, @@ -27904,33 +25125,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - ACTIONS(664), 1, - anon_sym_yield, - ACTIONS(716), 1, - anon_sym_STAR, - ACTIONS(718), 1, - anon_sym_LPAREN, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1053), 1, + STATE(941), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, + STATE(1052), 2, + sym_list_splat, + sym_dictionary_splat, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(720), 3, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_RBRACE, - STATE(1166), 3, - sym_list_splat, - sym_parenthesized_list_splat, - sym_yield, ACTIONS(311), 4, sym_integer, sym_true, @@ -27942,7 +25152,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + ACTIONS(688), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -27950,7 +25168,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -27966,64 +25184,70 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [2325] = 24, + [1902] = 27, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, ACTIONS(283), 1, anon_sym_STAR, - ACTIONS(293), 1, - anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(299), 1, - anon_sym_not, - ACTIONS(305), 1, - anon_sym_lambda, ACTIONS(315), 1, sym__string_start, - ACTIONS(718), 1, - anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(602), 1, sym_identifier, - ACTIONS(724), 1, - anon_sym_RPAREN, - ACTIONS(726), 1, - anon_sym_COMMA, - ACTIONS(730), 1, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, anon_sym_await, - STATE(600), 1, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(678), 1, + anon_sym_LPAREN, + ACTIONS(710), 1, + anon_sym_COMMA, + ACTIONS(712), 1, + anon_sym_RBRACE, + STATE(607), 1, sym_string, - STATE(630), 1, + STATE(621), 1, sym_primary_expression, - STATE(1071), 1, + STATE(932), 1, sym_expression, - STATE(1256), 1, - sym_parenthesized_list_splat, + STATE(1023), 1, + sym_pair, + STATE(1226), 1, + sym_dictionary_splat, + STATE(1522), 1, + sym__collection_elements, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1255), 3, + STATE(1118), 3, sym_list_splat, - sym_dictionary_splat, - sym_keyword_argument, + sym_parenthesized_list_splat, + sym_yield, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(728), 5, + ACTIONS(606), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -28031,7 +25255,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28047,7 +25271,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [2430] = 24, + [2016] = 24, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, @@ -28064,23 +25288,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_not, ACTIONS(616), 1, anon_sym_lambda, - ACTIONS(692), 1, + ACTIONS(678), 1, anon_sym_LPAREN, - ACTIONS(724), 1, + ACTIONS(714), 1, + sym_identifier, + ACTIONS(716), 1, anon_sym_RPAREN, - ACTIONS(726), 1, + ACTIONS(718), 1, anon_sym_COMMA, - ACTIONS(732), 1, - sym_identifier, - ACTIONS(736), 1, + ACTIONS(722), 1, anon_sym_await, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(621), 1, sym_primary_expression, - STATE(953), 1, + STATE(942), 1, sym_expression, - STATE(1256), 1, + STATE(1262), 1, sym_parenthesized_list_splat, ACTIONS(309), 2, sym_ellipsis, @@ -28089,7 +25313,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1255), 3, + STATE(1261), 3, sym_list_splat, sym_dictionary_splat, sym_keyword_argument, @@ -28098,13 +25322,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(734), 5, + ACTIONS(720), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -28112,7 +25336,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28128,63 +25352,64 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [2535] = 23, + [2121] = 24, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, - ACTIONS(274), 1, - sym_identifier, - ACTIONS(278), 1, - anon_sym_LPAREN, ACTIONS(283), 1, anon_sym_STAR, - ACTIONS(293), 1, - anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(299), 1, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, anon_sym_not, - ACTIONS(305), 1, + ACTIONS(616), 1, anon_sym_lambda, - ACTIONS(313), 1, + ACTIONS(678), 1, + anon_sym_LPAREN, + ACTIONS(714), 1, + sym_identifier, + ACTIONS(722), 1, anon_sym_await, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(664), 1, - anon_sym_yield, - STATE(600), 1, + ACTIONS(724), 1, + anon_sym_RPAREN, + ACTIONS(726), 1, + anon_sym_COMMA, + STATE(607), 1, sym_string, - STATE(630), 1, + STATE(621), 1, sym_primary_expression, - STATE(960), 1, + STATE(948), 1, sym_expression, + STATE(1216), 1, + sym_parenthesized_list_splat, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1366), 2, - sym_list_splat, - sym_dictionary_splat, - ACTIONS(301), 3, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1120), 3, - sym_expression_list, - sym_yield, - sym__f_expression, + STATE(1218), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(285), 5, + ACTIONS(720), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -28192,7 +25417,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28208,64 +25433,62 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [2638] = 24, + [2226] = 22, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(283), 1, - anon_sym_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(293), 1, + anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(612), 1, - anon_sym_LBRACK, - ACTIONS(614), 1, + ACTIONS(299), 1, anon_sym_not, - ACTIONS(616), 1, + ACTIONS(305), 1, anon_sym_lambda, - ACTIONS(692), 1, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(728), 1, anon_sym_LPAREN, ACTIONS(732), 1, - sym_identifier, - ACTIONS(736), 1, - anon_sym_await, - ACTIONS(738), 1, - anon_sym_RPAREN, - ACTIONS(740), 1, - anon_sym_COMMA, - STATE(600), 1, + anon_sym_STAR, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(630), 1, sym_primary_expression, - STATE(940), 1, + STATE(1044), 1, sym_expression, - STATE(1328), 1, - sym_parenthesized_list_splat, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1239), 3, + ACTIONS(730), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + STATE(1137), 3, sym_list_splat, - sym_dictionary_splat, - sym_keyword_argument, + sym_parenthesized_list_splat, + sym_yield, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(734), 5, + ACTIONS(285), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -28273,7 +25496,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28289,64 +25512,62 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [2743] = 24, + [2327] = 22, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(69), 1, + ACTIONS(299), 1, anon_sym_not, - ACTIONS(71), 1, + ACTIONS(305), 1, anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(283), 1, - anon_sym_STAR, - ACTIONS(331), 1, - sym_identifier, - ACTIONS(337), 1, + ACTIONS(313), 1, anon_sym_await, - ACTIONS(559), 1, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(728), 1, anon_sym_LPAREN, - ACTIONS(563), 1, - anon_sym_LBRACK, - ACTIONS(742), 1, - anon_sym_from, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + ACTIONS(732), 1, + anon_sym_STAR, + STATE(607), 1, sym_string, - STATE(1014), 1, + STATE(630), 1, + sym_primary_expression, + STATE(1044), 1, sym_expression, - STATE(1348), 1, - sym_expression_list, - ACTIONS(75), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(650), 2, - sym__newline, - sym__semicolon, - STATE(1360), 2, - sym_list_splat, - sym_dictionary_splat, - ACTIONS(47), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(730), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + STATE(1137), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(285), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -28354,7 +25575,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28370,7 +25591,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [2848] = 24, + [2428] = 24, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -28385,31 +25606,31 @@ static const uint16_t ts_small_parse_table[] = { sym__string_start, ACTIONS(283), 1, anon_sym_STAR, - ACTIONS(331), 1, + ACTIONS(379), 1, sym_identifier, - ACTIONS(337), 1, + ACTIONS(385), 1, anon_sym_await, - ACTIONS(559), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - ACTIONS(744), 1, + ACTIONS(734), 1, anon_sym_from, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + STATE(683), 1, sym_string, - STATE(982), 1, + STATE(710), 1, + sym_primary_expression, + STATE(969), 1, sym_expression, - STATE(1288), 1, + STATE(1253), 1, sym_expression_list, ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(746), 2, + ACTIONS(736), 2, sym__newline, - sym__semicolon, - STATE(1360), 2, + anon_sym_SEMI, + STATE(1397), 2, sym_list_splat, sym_dictionary_splat, ACTIONS(47), 3, @@ -28421,13 +25642,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -28435,7 +25656,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28451,7 +25672,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [2953] = 22, + [2533] = 22, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -28470,15 +25691,15 @@ static const uint16_t ts_small_parse_table[] = { sym__string_start, ACTIONS(664), 1, anon_sym_yield, - ACTIONS(716), 1, - anon_sym_STAR, - ACTIONS(718), 1, + ACTIONS(728), 1, anon_sym_LPAREN, - STATE(600), 1, + ACTIONS(732), 1, + anon_sym_STAR, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1053), 1, + STATE(1044), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -28487,11 +25708,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(748), 3, + ACTIONS(738), 3, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_RBRACE, - STATE(1166), 3, + STATE(1137), 3, sym_list_splat, sym_parenthesized_list_splat, sym_yield, @@ -28506,7 +25727,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -28514,7 +25735,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28530,15 +25751,11 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [3054] = 23, + [2634] = 24, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, - ACTIONS(274), 1, - sym_identifier, - ACTIONS(278), 1, - anon_sym_LPAREN, ACTIONS(283), 1, anon_sym_STAR, ACTIONS(293), 1, @@ -28549,44 +25766,49 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_not, ACTIONS(305), 1, anon_sym_lambda, - ACTIONS(313), 1, - anon_sym_await, ACTIONS(315), 1, sym__string_start, - ACTIONS(664), 1, - anon_sym_yield, - STATE(600), 1, + ACTIONS(716), 1, + anon_sym_RPAREN, + ACTIONS(718), 1, + anon_sym_COMMA, + ACTIONS(728), 1, + anon_sym_LPAREN, + ACTIONS(740), 1, + sym_identifier, + ACTIONS(744), 1, + anon_sym_await, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(960), 1, + STATE(1086), 1, sym_expression, + STATE(1262), 1, + sym_parenthesized_list_splat, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1366), 2, - sym_list_splat, - sym_dictionary_splat, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1097), 3, - sym_expression_list, - sym_yield, - sym__f_expression, + STATE(1261), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(285), 5, + ACTIONS(742), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -28594,7 +25816,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28610,7 +25832,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [3157] = 24, + [2739] = 24, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, @@ -28627,23 +25849,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_not, ACTIONS(616), 1, anon_sym_lambda, - ACTIONS(692), 1, + ACTIONS(678), 1, anon_sym_LPAREN, - ACTIONS(732), 1, + ACTIONS(714), 1, sym_identifier, - ACTIONS(736), 1, + ACTIONS(722), 1, anon_sym_await, - ACTIONS(750), 1, + ACTIONS(746), 1, anon_sym_RPAREN, - ACTIONS(752), 1, + ACTIONS(748), 1, anon_sym_COMMA, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(621), 1, sym_primary_expression, - STATE(946), 1, + STATE(945), 1, sym_expression, - STATE(1297), 1, + STATE(1229), 1, sym_parenthesized_list_splat, ACTIONS(309), 2, sym_ellipsis, @@ -28652,7 +25874,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1298), 3, + STATE(1231), 3, sym_list_splat, sym_dictionary_splat, sym_keyword_argument, @@ -28661,13 +25883,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(734), 5, + ACTIONS(720), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -28675,7 +25897,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28691,60 +25913,63 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [3262] = 21, + [2844] = 23, ACTIONS(3), 1, sym_comment, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(602), 1, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, sym_identifier, - ACTIONS(604), 1, + ACTIONS(278), 1, anon_sym_LPAREN, - ACTIONS(612), 1, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, anon_sym_LBRACK, - ACTIONS(614), 1, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, anon_sym_not, - ACTIONS(618), 1, - anon_sym_await, - ACTIONS(758), 1, + ACTIONS(305), 1, anon_sym_lambda, - STATE(600), 1, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(664), 1, + anon_sym_yield, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(630), 1, sym_primary_expression, - STATE(962), 1, + STATE(961), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1018), 2, - sym__expression_within_for_in_clause, - sym_lambda_within_for_in_clause, - ACTIONS(610), 3, + STATE(1373), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(754), 3, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_RBRACE, - ACTIONS(756), 3, - anon_sym_if, - anon_sym_async, - anon_sym_for, + STATE(1119), 3, + sym_expression_list, + sym_yield, + sym__f_expression, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(606), 4, + ACTIONS(285), 5, anon_sym_print, + anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -28752,7 +25977,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28768,62 +25993,64 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [3360] = 23, + [2947] = 24, ACTIONS(3), 1, sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, ACTIONS(53), 1, anon_sym_STAR_STAR, - ACTIONS(283), 1, - anon_sym_STAR, - ACTIONS(293), 1, - anon_sym_LBRACK, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(299), 1, + ACTIONS(69), 1, anon_sym_not, - ACTIONS(305), 1, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(315), 1, + ACTIONS(81), 1, sym__string_start, - ACTIONS(718), 1, - anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(379), 1, sym_identifier, - ACTIONS(730), 1, + ACTIONS(385), 1, anon_sym_await, - ACTIONS(760), 1, - anon_sym_RPAREN, - STATE(600), 1, + ACTIONS(568), 1, + anon_sym_LPAREN, + ACTIONS(572), 1, + anon_sym_LBRACK, + ACTIONS(750), 1, + anon_sym_from, + STATE(683), 1, sym_string, - STATE(630), 1, + STATE(710), 1, sym_primary_expression, - STATE(1124), 1, + STATE(1035), 1, sym_expression, - STATE(1379), 1, - sym_parenthesized_list_splat, - ACTIONS(309), 2, + STATE(1348), 1, + sym_expression_list, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(650), 2, + sym__newline, + anon_sym_SEMI, + STATE(1397), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1373), 3, - sym_list_splat, - sym_dictionary_splat, - sym_keyword_argument, - ACTIONS(311), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(728), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -28831,7 +26058,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28847,7 +26074,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [3462] = 23, + [3052] = 25, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, @@ -28866,31 +26093,34 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(664), 1, anon_sym_yield, - ACTIONS(692), 1, + ACTIONS(678), 1, anon_sym_LPAREN, - ACTIONS(716), 1, + ACTIONS(732), 1, anon_sym_STAR, - ACTIONS(762), 1, - anon_sym_RBRACK, - STATE(600), 1, + ACTIONS(752), 1, + anon_sym_RPAREN, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(621), 1, sym_primary_expression, - STATE(941), 1, + STATE(911), 1, sym_expression, - STATE(1467), 1, + STATE(1280), 1, + sym_yield, + STATE(1300), 1, + sym_with_item, + STATE(1432), 1, sym__collection_elements, ACTIONS(309), 2, sym_ellipsis, sym_float, + STATE(1118), 2, + sym_list_splat, + sym_parenthesized_list_splat, ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1100), 3, - sym_list_splat, - sym_parenthesized_list_splat, - sym_yield, ACTIONS(311), 4, sym_integer, sym_true, @@ -28902,7 +26132,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -28910,7 +26140,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28926,63 +26156,63 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [3564] = 24, + [3159] = 23, ACTIONS(3), 1, sym_comment, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(602), 1, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, sym_identifier, - ACTIONS(612), 1, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, anon_sym_LBRACK, - ACTIONS(614), 1, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, anon_sym_not, - ACTIONS(616), 1, + ACTIONS(305), 1, anon_sym_lambda, - ACTIONS(618), 1, + ACTIONS(313), 1, anon_sym_await, + ACTIONS(315), 1, + sym__string_start, ACTIONS(664), 1, anon_sym_yield, - ACTIONS(692), 1, - anon_sym_LPAREN, - ACTIONS(714), 1, - anon_sym_RPAREN, - ACTIONS(716), 1, - anon_sym_STAR, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(630), 1, sym_primary_expression, - STATE(930), 1, + STATE(961), 1, sym_expression, - STATE(1219), 1, - sym_yield, - STATE(1484), 1, - sym__collection_elements, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1100), 2, + STATE(1373), 2, sym_list_splat, - sym_parenthesized_list_splat, - ACTIONS(610), 3, + sym_dictionary_splat, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, + STATE(1100), 3, + sym_expression_list, + sym_yield, + sym__f_expression, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(606), 5, + ACTIONS(285), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -28990,7 +26220,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29006,62 +26236,60 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [3668] = 23, + [3262] = 21, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(283), 1, - anon_sym_STAR, - ACTIONS(293), 1, - anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(299), 1, - anon_sym_not, - ACTIONS(305), 1, - anon_sym_lambda, ACTIONS(315), 1, sym__string_start, - ACTIONS(718), 1, - anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(602), 1, sym_identifier, - ACTIONS(730), 1, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, anon_sym_await, - ACTIONS(764), 1, - anon_sym_RPAREN, - STATE(600), 1, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(607), 1, sym_string, - STATE(630), 1, + STATE(621), 1, sym_primary_expression, - STATE(1124), 1, + STATE(963), 1, sym_expression, - STATE(1379), 1, - sym_parenthesized_list_splat, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + STATE(1045), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1373), 3, - sym_list_splat, - sym_dictionary_splat, - sym_keyword_argument, + ACTIONS(754), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + ACTIONS(756), 3, + anon_sym_if, + anon_sym_async, + anon_sym_for, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(728), 5, + ACTIONS(606), 4, anon_sym_print, - anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -29069,7 +26297,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29085,62 +26313,62 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [3770] = 23, + [3360] = 23, ACTIONS(3), 1, sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, ACTIONS(315), 1, sym__string_start, - ACTIONS(602), 1, + ACTIONS(728), 1, + anon_sym_LPAREN, + ACTIONS(740), 1, sym_identifier, - ACTIONS(612), 1, - anon_sym_LBRACK, - ACTIONS(614), 1, - anon_sym_not, - ACTIONS(616), 1, - anon_sym_lambda, - ACTIONS(618), 1, + ACTIONS(744), 1, anon_sym_await, - ACTIONS(664), 1, - anon_sym_yield, - ACTIONS(692), 1, - anon_sym_LPAREN, - ACTIONS(716), 1, - anon_sym_STAR, - ACTIONS(766), 1, - anon_sym_RBRACK, - STATE(600), 1, + ACTIONS(760), 1, + anon_sym_RPAREN, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(630), 1, sym_primary_expression, - STATE(941), 1, + STATE(1115), 1, sym_expression, - STATE(1467), 1, - sym__collection_elements, + STATE(1366), 1, + sym_parenthesized_list_splat, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1100), 3, + STATE(1363), 3, sym_list_splat, - sym_parenthesized_list_splat, - sym_yield, + sym_dictionary_splat, + sym_keyword_argument, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(606), 5, + ACTIONS(742), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -29148,7 +26376,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29164,62 +26392,62 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [3872] = 23, + [3462] = 23, ACTIONS(3), 1, sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, ACTIONS(315), 1, sym__string_start, - ACTIONS(602), 1, + ACTIONS(728), 1, + anon_sym_LPAREN, + ACTIONS(740), 1, sym_identifier, - ACTIONS(612), 1, - anon_sym_LBRACK, - ACTIONS(614), 1, - anon_sym_not, - ACTIONS(616), 1, - anon_sym_lambda, - ACTIONS(618), 1, + ACTIONS(744), 1, anon_sym_await, - ACTIONS(664), 1, - anon_sym_yield, - ACTIONS(692), 1, - anon_sym_LPAREN, - ACTIONS(716), 1, - anon_sym_STAR, - ACTIONS(768), 1, - anon_sym_RBRACK, - STATE(600), 1, + ACTIONS(762), 1, + anon_sym_RPAREN, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(630), 1, sym_primary_expression, - STATE(932), 1, + STATE(1115), 1, sym_expression, - STATE(1503), 1, - sym__collection_elements, + STATE(1366), 1, + sym_parenthesized_list_splat, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1100), 3, + STATE(1363), 3, sym_list_splat, - sym_parenthesized_list_splat, - sym_yield, + sym_dictionary_splat, + sym_keyword_argument, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(606), 5, + ACTIONS(742), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -29227,7 +26455,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29243,7 +26471,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [3974] = 21, + [3564] = 24, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, @@ -29252,51 +26480,54 @@ static const uint16_t ts_small_parse_table[] = { sym__string_start, ACTIONS(602), 1, sym_identifier, - ACTIONS(604), 1, - anon_sym_LPAREN, ACTIONS(612), 1, anon_sym_LBRACK, ACTIONS(614), 1, anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, ACTIONS(618), 1, anon_sym_await, - ACTIONS(758), 1, - anon_sym_lambda, - STATE(600), 1, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(678), 1, + anon_sym_LPAREN, + ACTIONS(732), 1, + anon_sym_STAR, + ACTIONS(752), 1, + anon_sym_RPAREN, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(621), 1, sym_primary_expression, - STATE(962), 1, + STATE(940), 1, sym_expression, + STATE(1280), 1, + sym_yield, + STATE(1432), 1, + sym__collection_elements, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1018), 2, - sym__expression_within_for_in_clause, - sym_lambda_within_for_in_clause, + STATE(1118), 2, + sym_list_splat, + sym_parenthesized_list_splat, ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(770), 3, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_RBRACE, - ACTIONS(772), 3, - anon_sym_if, - anon_sym_async, - anon_sym_for, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(606), 4, + ACTIONS(606), 5, anon_sym_print, + anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -29304,7 +26535,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29320,7 +26551,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [4072] = 24, + [3668] = 23, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, @@ -29339,32 +26570,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(664), 1, anon_sym_yield, - ACTIONS(692), 1, + ACTIONS(678), 1, anon_sym_LPAREN, - ACTIONS(716), 1, + ACTIONS(732), 1, anon_sym_STAR, - ACTIONS(774), 1, - anon_sym_RPAREN, - STATE(600), 1, + ACTIONS(764), 1, + anon_sym_RBRACK, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(621), 1, sym_primary_expression, - STATE(931), 1, + STATE(954), 1, sym_expression, - STATE(1251), 1, - sym_yield, - STATE(1431), 1, + STATE(1428), 1, sym__collection_elements, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1100), 2, - sym_list_splat, - sym_parenthesized_list_splat, ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, + STATE(1118), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, ACTIONS(311), 4, sym_integer, sym_true, @@ -29376,7 +26606,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -29384,7 +26614,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29400,7 +26630,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [4176] = 23, + [3770] = 23, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, @@ -29417,21 +26647,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(315), 1, sym__string_start, - ACTIONS(718), 1, + ACTIONS(728), 1, anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(740), 1, sym_identifier, - ACTIONS(730), 1, + ACTIONS(744), 1, anon_sym_await, - ACTIONS(776), 1, + ACTIONS(766), 1, anon_sym_RPAREN, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1124), 1, + STATE(1115), 1, sym_expression, - STATE(1379), 1, + STATE(1366), 1, sym_parenthesized_list_splat, ACTIONS(309), 2, sym_ellipsis, @@ -29440,7 +26670,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1373), 3, + STATE(1363), 3, sym_list_splat, sym_dictionary_splat, sym_keyword_argument, @@ -29449,13 +26679,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(728), 5, + ACTIONS(742), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -29463,7 +26693,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29479,44 +26709,44 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [4278] = 23, + [3872] = 23, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, anon_sym_LBRACE, + ACTIONS(53), 1, + anon_sym_STAR_STAR, ACTIONS(69), 1, anon_sym_not, ACTIONS(71), 1, anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(331), 1, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(379), 1, sym_identifier, - ACTIONS(337), 1, + ACTIONS(385), 1, anon_sym_await, - ACTIONS(559), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - ACTIONS(778), 1, - anon_sym_from, - ACTIONS(780), 1, - anon_sym_STAR, - ACTIONS(782), 1, - anon_sym_STAR_STAR, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + STATE(683), 1, sym_string, + STATE(710), 1, + sym_primary_expression, STATE(1036), 1, sym_expression, + STATE(1383), 1, + sym_expression_list, ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(700), 2, + ACTIONS(768), 2, sym__newline, - sym__semicolon, - STATE(1187), 2, + anon_sym_SEMI, + STATE(1397), 2, sym_list_splat, sym_dictionary_splat, ACTIONS(47), 3, @@ -29528,13 +26758,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -29542,7 +26772,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29558,62 +26788,62 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [4380] = 23, + [3974] = 23, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(283), 1, - anon_sym_STAR, - ACTIONS(293), 1, - anon_sym_LBRACK, - ACTIONS(295), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(299), 1, + ACTIONS(69), 1, anon_sym_not, - ACTIONS(305), 1, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(315), 1, + ACTIONS(81), 1, sym__string_start, - ACTIONS(718), 1, - anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(379), 1, sym_identifier, - ACTIONS(730), 1, + ACTIONS(385), 1, anon_sym_await, - ACTIONS(784), 1, - anon_sym_RPAREN, - STATE(600), 1, + ACTIONS(568), 1, + anon_sym_LPAREN, + ACTIONS(572), 1, + anon_sym_LBRACK, + ACTIONS(770), 1, + anon_sym_from, + ACTIONS(772), 1, + anon_sym_STAR, + ACTIONS(774), 1, + anon_sym_STAR_STAR, + STATE(683), 1, sym_string, - STATE(630), 1, + STATE(710), 1, sym_primary_expression, - STATE(1124), 1, + STATE(1019), 1, sym_expression, - STATE(1379), 1, - sym_parenthesized_list_splat, - ACTIONS(309), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(688), 2, + sym__newline, + anon_sym_SEMI, + STATE(1212), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1373), 3, - sym_list_splat, - sym_dictionary_splat, - sym_keyword_argument, - ACTIONS(311), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(728), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -29621,7 +26851,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29637,7 +26867,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [4482] = 23, + [4076] = 23, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, @@ -29654,21 +26884,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(315), 1, sym__string_start, - ACTIONS(718), 1, + ACTIONS(728), 1, anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(740), 1, sym_identifier, - ACTIONS(730), 1, + ACTIONS(744), 1, anon_sym_await, - ACTIONS(786), 1, + ACTIONS(776), 1, anon_sym_RPAREN, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1124), 1, + STATE(1115), 1, sym_expression, - STATE(1379), 1, + STATE(1366), 1, sym_parenthesized_list_splat, ACTIONS(309), 2, sym_ellipsis, @@ -29677,7 +26907,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1373), 3, + STATE(1363), 3, sym_list_splat, sym_dictionary_splat, sym_keyword_argument, @@ -29686,13 +26916,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(728), 5, + ACTIONS(742), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -29700,7 +26930,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29716,62 +26946,63 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [4584] = 23, + [4178] = 24, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(283), 1, - anon_sym_STAR, - ACTIONS(293), 1, - anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(299), 1, - anon_sym_not, - ACTIONS(305), 1, - anon_sym_lambda, ACTIONS(315), 1, sym__string_start, - ACTIONS(718), 1, - anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(602), 1, sym_identifier, - ACTIONS(730), 1, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, anon_sym_await, - ACTIONS(788), 1, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(678), 1, + anon_sym_LPAREN, + ACTIONS(732), 1, + anon_sym_STAR, + ACTIONS(778), 1, anon_sym_RPAREN, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(630), 1, + STATE(621), 1, sym_primary_expression, - STATE(1124), 1, + STATE(950), 1, sym_expression, - STATE(1379), 1, - sym_parenthesized_list_splat, + STATE(1279), 1, + sym_yield, + STATE(1440), 1, + sym__collection_elements, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + STATE(1118), 2, + sym_list_splat, + sym_parenthesized_list_splat, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1373), 3, - sym_list_splat, - sym_dictionary_splat, - sym_keyword_argument, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(728), 5, + ACTIONS(606), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -29779,7 +27010,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29795,62 +27026,60 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [4686] = 23, + [4282] = 21, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(283), 1, - anon_sym_STAR, - ACTIONS(293), 1, - anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(299), 1, - anon_sym_not, - ACTIONS(305), 1, - anon_sym_lambda, ACTIONS(315), 1, sym__string_start, - ACTIONS(718), 1, - anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(602), 1, sym_identifier, - ACTIONS(730), 1, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, anon_sym_await, - ACTIONS(790), 1, - anon_sym_RPAREN, - STATE(600), 1, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(607), 1, sym_string, - STATE(630), 1, + STATE(621), 1, sym_primary_expression, - STATE(1124), 1, + STATE(963), 1, sym_expression, - STATE(1379), 1, - sym_parenthesized_list_splat, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + STATE(1045), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1373), 3, - sym_list_splat, - sym_dictionary_splat, - sym_keyword_argument, + ACTIONS(780), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + ACTIONS(782), 3, + anon_sym_if, + anon_sym_async, + anon_sym_for, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(728), 5, + ACTIONS(606), 4, anon_sym_print, - anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -29858,7 +27087,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29874,64 +27103,62 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [4788] = 25, + [4380] = 23, ACTIONS(3), 1, sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, ACTIONS(315), 1, sym__string_start, - ACTIONS(602), 1, + ACTIONS(728), 1, + anon_sym_LPAREN, + ACTIONS(740), 1, sym_identifier, - ACTIONS(612), 1, - anon_sym_LBRACK, - ACTIONS(614), 1, - anon_sym_not, - ACTIONS(616), 1, - anon_sym_lambda, - ACTIONS(618), 1, + ACTIONS(744), 1, anon_sym_await, - ACTIONS(664), 1, - anon_sym_yield, - ACTIONS(692), 1, - anon_sym_LPAREN, - ACTIONS(716), 1, - anon_sym_STAR, - ACTIONS(792), 1, + ACTIONS(784), 1, anon_sym_RPAREN, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(630), 1, sym_primary_expression, - STATE(930), 1, + STATE(1115), 1, sym_expression, - STATE(1219), 1, - sym_yield, - STATE(1301), 1, + STATE(1366), 1, sym_parenthesized_list_splat, - STATE(1303), 1, - sym_list_splat, - STATE(1484), 1, - sym__collection_elements, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, + STATE(1363), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(606), 5, + ACTIONS(742), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -29939,7 +27166,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29955,44 +27182,44 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [4894] = 23, + [4482] = 23, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(53), 1, - anon_sym_STAR_STAR, ACTIONS(69), 1, anon_sym_not, ACTIONS(71), 1, anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(283), 1, - anon_sym_STAR, - ACTIONS(331), 1, + ACTIONS(379), 1, sym_identifier, - ACTIONS(337), 1, + ACTIONS(385), 1, anon_sym_await, - ACTIONS(559), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + ACTIONS(770), 1, + anon_sym_from, + ACTIONS(772), 1, + anon_sym_STAR, + ACTIONS(774), 1, + anon_sym_STAR_STAR, + STATE(683), 1, sym_string, - STATE(1045), 1, + STATE(710), 1, + sym_primary_expression, + STATE(1019), 1, sym_expression, - STATE(1394), 1, - sym_expression_list, ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(794), 2, + ACTIONS(688), 2, sym__newline, - sym__semicolon, - STATE(1360), 2, + anon_sym_SEMI, + STATE(1212), 2, sym_list_splat, sym_dictionary_splat, ACTIONS(47), 3, @@ -30004,13 +27231,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -30018,7 +27245,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -30034,60 +27261,62 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [4996] = 21, + [4584] = 23, ACTIONS(3), 1, sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, ACTIONS(315), 1, sym__string_start, - ACTIONS(602), 1, - sym_identifier, - ACTIONS(604), 1, + ACTIONS(728), 1, anon_sym_LPAREN, - ACTIONS(612), 1, - anon_sym_LBRACK, - ACTIONS(614), 1, - anon_sym_not, - ACTIONS(618), 1, + ACTIONS(740), 1, + sym_identifier, + ACTIONS(744), 1, anon_sym_await, - ACTIONS(758), 1, - anon_sym_lambda, - STATE(600), 1, + ACTIONS(786), 1, + anon_sym_RPAREN, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(630), 1, sym_primary_expression, - STATE(962), 1, + STATE(1115), 1, sym_expression, + STATE(1366), 1, + sym_parenthesized_list_splat, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1018), 2, - sym__expression_within_for_in_clause, - sym_lambda_within_for_in_clause, - ACTIONS(610), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(796), 3, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_RBRACE, - ACTIONS(798), 3, - anon_sym_if, - anon_sym_async, - anon_sym_for, + STATE(1363), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(606), 4, + ACTIONS(742), 5, anon_sym_print, + anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -30095,7 +27324,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -30111,7 +27340,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [5094] = 23, + [4686] = 23, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, @@ -30128,21 +27357,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(315), 1, sym__string_start, - ACTIONS(718), 1, + ACTIONS(728), 1, anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(740), 1, sym_identifier, - ACTIONS(730), 1, + ACTIONS(744), 1, anon_sym_await, - ACTIONS(800), 1, + ACTIONS(788), 1, anon_sym_RPAREN, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1124), 1, + STATE(1115), 1, sym_expression, - STATE(1379), 1, + STATE(1366), 1, sym_parenthesized_list_splat, ACTIONS(309), 2, sym_ellipsis, @@ -30151,7 +27380,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1373), 3, + STATE(1363), 3, sym_list_splat, sym_dictionary_splat, sym_keyword_argument, @@ -30160,13 +27389,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(728), 5, + ACTIONS(742), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -30174,7 +27403,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -30190,7 +27419,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [5196] = 24, + [4788] = 25, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, @@ -30209,28 +27438,29 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(664), 1, anon_sym_yield, - ACTIONS(692), 1, + ACTIONS(678), 1, anon_sym_LPAREN, - ACTIONS(716), 1, + ACTIONS(732), 1, anon_sym_STAR, - ACTIONS(792), 1, + ACTIONS(752), 1, anon_sym_RPAREN, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(621), 1, sym_primary_expression, - STATE(930), 1, + STATE(947), 1, sym_expression, STATE(1219), 1, sym_yield, - STATE(1484), 1, + STATE(1320), 1, + sym_parenthesized_list_splat, + STATE(1321), 1, + sym_list_splat, + STATE(1445), 1, sym__collection_elements, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1100), 2, - sym_list_splat, - sym_parenthesized_list_splat, ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, @@ -30246,7 +27476,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -30254,7 +27484,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -30270,7 +27500,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [5300] = 23, + [4894] = 23, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -30281,33 +27511,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(331), 1, + ACTIONS(379), 1, sym_identifier, - ACTIONS(337), 1, + ACTIONS(385), 1, anon_sym_await, - ACTIONS(559), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - ACTIONS(778), 1, - anon_sym_from, - ACTIONS(780), 1, + ACTIONS(772), 1, anon_sym_STAR, - ACTIONS(782), 1, + ACTIONS(774), 1, anon_sym_STAR_STAR, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + ACTIONS(790), 1, + anon_sym_from, + STATE(683), 1, sym_string, - STATE(1036), 1, + STATE(710), 1, + sym_primary_expression, + STATE(1019), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(700), 2, + ACTIONS(708), 2, sym__newline, - sym__semicolon, - STATE(1187), 2, + anon_sym_SEMI, + STATE(1212), 2, sym_list_splat, sym_dictionary_splat, ACTIONS(47), 3, @@ -30319,13 +27549,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -30333,7 +27563,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -30349,7 +27579,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [5402] = 23, + [4996] = 23, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, @@ -30366,21 +27596,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(315), 1, sym__string_start, - ACTIONS(718), 1, + ACTIONS(728), 1, anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(740), 1, sym_identifier, - ACTIONS(730), 1, + ACTIONS(744), 1, anon_sym_await, - ACTIONS(802), 1, + ACTIONS(792), 1, anon_sym_RPAREN, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1124), 1, + STATE(1115), 1, sym_expression, - STATE(1379), 1, + STATE(1366), 1, sym_parenthesized_list_splat, ACTIONS(309), 2, sym_ellipsis, @@ -30389,7 +27619,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1373), 3, + STATE(1363), 3, sym_list_splat, sym_dictionary_splat, sym_keyword_argument, @@ -30398,13 +27628,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(728), 5, + ACTIONS(742), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -30412,7 +27642,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -30428,62 +27658,62 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [5504] = 23, + [5098] = 23, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(283), 1, - anon_sym_STAR, - ACTIONS(293), 1, - anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(299), 1, - anon_sym_not, - ACTIONS(305), 1, - anon_sym_lambda, ACTIONS(315), 1, sym__string_start, - ACTIONS(718), 1, - anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(602), 1, sym_identifier, - ACTIONS(730), 1, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, anon_sym_await, - ACTIONS(804), 1, - anon_sym_RPAREN, - STATE(600), 1, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(678), 1, + anon_sym_LPAREN, + ACTIONS(732), 1, + anon_sym_STAR, + ACTIONS(794), 1, + anon_sym_RBRACK, + STATE(607), 1, sym_string, - STATE(630), 1, + STATE(621), 1, sym_primary_expression, - STATE(1124), 1, + STATE(944), 1, sym_expression, - STATE(1379), 1, - sym_parenthesized_list_splat, + STATE(1528), 1, + sym__collection_elements, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1373), 3, + STATE(1118), 3, sym_list_splat, - sym_dictionary_splat, - sym_keyword_argument, + sym_parenthesized_list_splat, + sym_yield, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(728), 5, + ACTIONS(606), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -30491,7 +27721,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -30507,7 +27737,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [5606] = 23, + [5200] = 23, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, @@ -30524,21 +27754,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(315), 1, sym__string_start, - ACTIONS(718), 1, + ACTIONS(728), 1, anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(740), 1, sym_identifier, - ACTIONS(730), 1, + ACTIONS(744), 1, anon_sym_await, - ACTIONS(806), 1, + ACTIONS(796), 1, anon_sym_RPAREN, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1124), 1, + STATE(1115), 1, sym_expression, - STATE(1379), 1, + STATE(1366), 1, sym_parenthesized_list_splat, ACTIONS(309), 2, sym_ellipsis, @@ -30547,7 +27777,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1373), 3, + STATE(1363), 3, sym_list_splat, sym_dictionary_splat, sym_keyword_argument, @@ -30556,13 +27786,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(728), 5, + ACTIONS(742), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -30570,7 +27800,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -30586,7 +27816,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [5708] = 23, + [5302] = 23, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, @@ -30603,21 +27833,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(315), 1, sym__string_start, - ACTIONS(718), 1, + ACTIONS(728), 1, anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(740), 1, sym_identifier, - ACTIONS(730), 1, + ACTIONS(744), 1, anon_sym_await, - ACTIONS(808), 1, + ACTIONS(798), 1, anon_sym_RPAREN, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1124), 1, + STATE(1115), 1, sym_expression, - STATE(1379), 1, + STATE(1366), 1, sym_parenthesized_list_splat, ACTIONS(309), 2, sym_ellipsis, @@ -30626,7 +27856,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1373), 3, + STATE(1363), 3, sym_list_splat, sym_dictionary_splat, sym_keyword_argument, @@ -30635,13 +27865,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(728), 5, + ACTIONS(742), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -30649,7 +27879,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -30665,62 +27895,62 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [5810] = 23, + [5404] = 23, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(69), 1, + ACTIONS(299), 1, anon_sym_not, - ACTIONS(71), 1, + ACTIONS(305), 1, anon_sym_lambda, - ACTIONS(81), 1, + ACTIONS(315), 1, sym__string_start, - ACTIONS(331), 1, + ACTIONS(728), 1, + anon_sym_LPAREN, + ACTIONS(740), 1, sym_identifier, - ACTIONS(337), 1, + ACTIONS(744), 1, anon_sym_await, - ACTIONS(559), 1, - anon_sym_LPAREN, - ACTIONS(563), 1, - anon_sym_LBRACK, - ACTIONS(780), 1, - anon_sym_STAR, - ACTIONS(782), 1, - anon_sym_STAR_STAR, - ACTIONS(810), 1, - anon_sym_from, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + ACTIONS(800), 1, + anon_sym_RPAREN, + STATE(607), 1, sym_string, - STATE(1036), 1, + STATE(630), 1, + sym_primary_expression, + STATE(1115), 1, sym_expression, - ACTIONS(75), 2, + STATE(1366), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(698), 2, - sym__newline, - sym__semicolon, - STATE(1187), 2, - sym_list_splat, - sym_dictionary_splat, - ACTIONS(47), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + STATE(1363), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(742), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -30728,7 +27958,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -30744,64 +27974,62 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [5912] = 25, + [5506] = 23, ACTIONS(3), 1, sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, ACTIONS(315), 1, sym__string_start, - ACTIONS(602), 1, + ACTIONS(728), 1, + anon_sym_LPAREN, + ACTIONS(740), 1, sym_identifier, - ACTIONS(612), 1, - anon_sym_LBRACK, - ACTIONS(614), 1, - anon_sym_not, - ACTIONS(616), 1, - anon_sym_lambda, - ACTIONS(618), 1, + ACTIONS(744), 1, anon_sym_await, - ACTIONS(664), 1, - anon_sym_yield, - ACTIONS(692), 1, - anon_sym_LPAREN, - ACTIONS(714), 1, + ACTIONS(802), 1, anon_sym_RPAREN, - ACTIONS(716), 1, - anon_sym_STAR, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(630), 1, sym_primary_expression, - STATE(930), 1, + STATE(1115), 1, sym_expression, - STATE(1219), 1, - sym_yield, - STATE(1301), 1, + STATE(1366), 1, sym_parenthesized_list_splat, - STATE(1303), 1, - sym_list_splat, - STATE(1484), 1, - sym__collection_elements, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, + STATE(1363), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(606), 5, + ACTIONS(742), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -30809,7 +28037,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -30825,63 +28053,62 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [6018] = 24, + [5608] = 23, ACTIONS(3), 1, sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, ACTIONS(315), 1, sym__string_start, - ACTIONS(602), 1, + ACTIONS(728), 1, + anon_sym_LPAREN, + ACTIONS(740), 1, sym_identifier, - ACTIONS(612), 1, - anon_sym_LBRACK, - ACTIONS(614), 1, - anon_sym_not, - ACTIONS(616), 1, - anon_sym_lambda, - ACTIONS(618), 1, + ACTIONS(744), 1, anon_sym_await, - ACTIONS(664), 1, - anon_sym_yield, - ACTIONS(692), 1, - anon_sym_LPAREN, - ACTIONS(714), 1, + ACTIONS(804), 1, anon_sym_RPAREN, - ACTIONS(716), 1, - anon_sym_STAR, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(630), 1, sym_primary_expression, - STATE(945), 1, + STATE(1115), 1, sym_expression, - STATE(1313), 1, - sym_yield, - STATE(1475), 1, - sym__collection_elements, + STATE(1366), 1, + sym_parenthesized_list_splat, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1100), 2, - sym_list_splat, - sym_parenthesized_list_splat, - ACTIONS(610), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, + STATE(1363), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(606), 5, + ACTIONS(742), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -30889,7 +28116,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -30905,7 +28132,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [6122] = 21, + [5710] = 24, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, @@ -30914,51 +28141,54 @@ static const uint16_t ts_small_parse_table[] = { sym__string_start, ACTIONS(602), 1, sym_identifier, - ACTIONS(604), 1, - anon_sym_LPAREN, ACTIONS(612), 1, anon_sym_LBRACK, ACTIONS(614), 1, anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, ACTIONS(618), 1, anon_sym_await, - ACTIONS(758), 1, - anon_sym_lambda, - STATE(600), 1, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(678), 1, + anon_sym_LPAREN, + ACTIONS(732), 1, + anon_sym_STAR, + ACTIONS(806), 1, + anon_sym_RPAREN, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(621), 1, sym_primary_expression, - STATE(962), 1, + STATE(947), 1, sym_expression, + STATE(1219), 1, + sym_yield, + STATE(1445), 1, + sym__collection_elements, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1018), 2, - sym__expression_within_for_in_clause, - sym_lambda_within_for_in_clause, + STATE(1118), 2, + sym_list_splat, + sym_parenthesized_list_splat, ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(812), 3, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_RBRACE, - ACTIONS(814), 3, - anon_sym_if, - anon_sym_async, - anon_sym_for, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(606), 4, + ACTIONS(606), 5, anon_sym_print, + anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -30966,7 +28196,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -30982,7 +28212,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [6220] = 23, + [5814] = 23, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, @@ -30999,21 +28229,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(315), 1, sym__string_start, - ACTIONS(718), 1, + ACTIONS(728), 1, anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(740), 1, sym_identifier, - ACTIONS(730), 1, + ACTIONS(744), 1, anon_sym_await, - ACTIONS(816), 1, + ACTIONS(808), 1, anon_sym_RPAREN, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1124), 1, + STATE(1115), 1, sym_expression, - STATE(1379), 1, + STATE(1366), 1, sym_parenthesized_list_splat, ACTIONS(309), 2, sym_ellipsis, @@ -31022,7 +28252,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1373), 3, + STATE(1363), 3, sym_list_splat, sym_dictionary_splat, sym_keyword_argument, @@ -31031,13 +28261,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(728), 5, + ACTIONS(742), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -31045,7 +28275,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -31061,62 +28291,60 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [6322] = 23, + [5916] = 21, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(283), 1, - anon_sym_STAR, - ACTIONS(293), 1, - anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(299), 1, - anon_sym_not, - ACTIONS(305), 1, - anon_sym_lambda, ACTIONS(315), 1, sym__string_start, - ACTIONS(718), 1, - anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(602), 1, sym_identifier, - ACTIONS(730), 1, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, anon_sym_await, - ACTIONS(818), 1, - anon_sym_RPAREN, - STATE(600), 1, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(607), 1, sym_string, - STATE(630), 1, + STATE(621), 1, sym_primary_expression, - STATE(1124), 1, + STATE(963), 1, sym_expression, - STATE(1379), 1, - sym_parenthesized_list_splat, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + STATE(1045), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1373), 3, - sym_list_splat, - sym_dictionary_splat, - sym_keyword_argument, + ACTIONS(810), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + ACTIONS(812), 3, + anon_sym_if, + anon_sym_async, + anon_sym_for, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(728), 5, + ACTIONS(606), 4, anon_sym_print, - anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -31124,7 +28352,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -31140,62 +28368,62 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [6424] = 23, + [6014] = 23, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(283), 1, - anon_sym_STAR, - ACTIONS(293), 1, - anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(299), 1, - anon_sym_not, - ACTIONS(305), 1, - anon_sym_lambda, ACTIONS(315), 1, sym__string_start, - ACTIONS(718), 1, - anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(602), 1, sym_identifier, - ACTIONS(730), 1, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, anon_sym_await, - ACTIONS(820), 1, - anon_sym_RPAREN, - STATE(600), 1, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(678), 1, + anon_sym_LPAREN, + ACTIONS(732), 1, + anon_sym_STAR, + ACTIONS(814), 1, + anon_sym_RBRACK, + STATE(607), 1, sym_string, - STATE(630), 1, + STATE(621), 1, sym_primary_expression, - STATE(1124), 1, + STATE(953), 1, sym_expression, - STATE(1379), 1, - sym_parenthesized_list_splat, + STATE(1412), 1, + sym__collection_elements, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1373), 3, + STATE(1118), 3, sym_list_splat, - sym_dictionary_splat, - sym_keyword_argument, + sym_parenthesized_list_splat, + sym_yield, ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(728), 5, + ACTIONS(606), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -31203,7 +28431,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -31219,7 +28447,86 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [6526] = 23, + [6116] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(728), 1, + anon_sym_LPAREN, + ACTIONS(740), 1, + sym_identifier, + ACTIONS(744), 1, + anon_sym_await, + ACTIONS(816), 1, + anon_sym_RPAREN, + STATE(607), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1115), 1, + sym_expression, + STATE(1366), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1363), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(742), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(905), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(622), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [6218] = 25, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, @@ -31238,19 +28545,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(664), 1, anon_sym_yield, - ACTIONS(692), 1, + ACTIONS(678), 1, anon_sym_LPAREN, - ACTIONS(716), 1, + ACTIONS(732), 1, anon_sym_STAR, - ACTIONS(766), 1, - anon_sym_RBRACK, - STATE(600), 1, + ACTIONS(806), 1, + anon_sym_RPAREN, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(621), 1, sym_primary_expression, - STATE(935), 1, + STATE(947), 1, sym_expression, - STATE(1473), 1, + STATE(1219), 1, + sym_yield, + STATE(1320), 1, + sym_parenthesized_list_splat, + STATE(1321), 1, + sym_list_splat, + STATE(1445), 1, sym__collection_elements, ACTIONS(309), 2, sym_ellipsis, @@ -31259,10 +28572,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1100), 3, - sym_list_splat, - sym_parenthesized_list_splat, - sym_yield, ACTIONS(311), 4, sym_integer, sym_true, @@ -31274,7 +28583,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -31282,7 +28591,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -31298,184 +28607,246 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [6628] = 3, + [6324] = 24, ACTIONS(3), 1, sym_comment, - ACTIONS(824), 17, - anon_sym_as, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(678), 1, + anon_sym_LPAREN, + ACTIONS(732), 1, anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_PIPE, + ACTIONS(752), 1, + anon_sym_RPAREN, + STATE(607), 1, + sym_string, + STATE(621), 1, + sym_primary_expression, + STATE(947), 1, + sym_expression, + STATE(1219), 1, + sym_yield, + STATE(1445), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1118), 2, + sym_list_splat, + sym_parenthesized_list_splat, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_EQ, - anon_sym_AT, - anon_sym_SLASH, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT, - anon_sym_GT, - ACTIONS(822), 36, - anon_sym_DOT, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_if, - anon_sym_COLON, - anon_sym_else, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, anon_sym_async, - anon_sym_for, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_RBRACE, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - sym_type_conversion, - [6689] = 3, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(905), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(622), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [6428] = 21, ACTIONS(3), 1, sym_comment, - ACTIONS(828), 17, - anon_sym_as, - anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_PIPE, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(607), 1, + sym_string, + STATE(621), 1, + sym_primary_expression, + STATE(963), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1045), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_EQ, - anon_sym_AT, - anon_sym_SLASH, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT, - anon_sym_GT, - ACTIONS(826), 36, - anon_sym_DOT, - anon_sym_LPAREN, + anon_sym_TILDE, + ACTIONS(818), 3, anon_sym_RPAREN, - anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_RBRACE, + ACTIONS(820), 3, anon_sym_if, - anon_sym_COLON, - anon_sym_else, anon_sym_async, anon_sym_for, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_RBRACE, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - sym_type_conversion, - [6750] = 3, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 4, + anon_sym_print, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(905), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(622), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [6526] = 23, ACTIONS(3), 1, sym_comment, - ACTIONS(832), 17, - anon_sym_as, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(678), 1, + anon_sym_LPAREN, + ACTIONS(732), 1, anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_PIPE, + ACTIONS(764), 1, + anon_sym_RBRACK, + STATE(607), 1, + sym_string, + STATE(621), 1, + sym_primary_expression, + STATE(944), 1, + sym_expression, + STATE(1528), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_EQ, - anon_sym_AT, - anon_sym_SLASH, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT, - anon_sym_GT, - ACTIONS(830), 36, - anon_sym_DOT, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_if, - anon_sym_COLON, - anon_sym_else, + anon_sym_TILDE, + STATE(1118), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, anon_sym_async, - anon_sym_for, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_RBRACE, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - sym_type_conversion, - [6811] = 3, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(905), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(622), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [6628] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(832), 17, + ACTIONS(824), 17, anon_sym_as, anon_sym_STAR, anon_sym_GT_GT, @@ -31493,7 +28864,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT, anon_sym_LT, anon_sym_GT, - ACTIONS(830), 36, + ACTIONS(822), 36, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -31530,7 +28901,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET_EQ, anon_sym_PIPE_EQ, sym_type_conversion, - [6872] = 22, + [6689] = 22, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, @@ -31547,19 +28918,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(315), 1, sym__string_start, - ACTIONS(718), 1, + ACTIONS(728), 1, anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(740), 1, sym_identifier, - ACTIONS(730), 1, + ACTIONS(744), 1, anon_sym_await, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1124), 1, + STATE(1115), 1, sym_expression, - STATE(1379), 1, + STATE(1366), 1, sym_parenthesized_list_splat, ACTIONS(309), 2, sym_ellipsis, @@ -31568,7 +28939,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1373), 3, + STATE(1363), 3, sym_list_splat, sym_dictionary_splat, sym_keyword_argument, @@ -31577,13 +28948,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(728), 5, + ACTIONS(742), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -31591,7 +28962,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -31607,10 +28978,10 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [6971] = 3, + [6788] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(836), 17, + ACTIONS(828), 17, anon_sym_as, anon_sym_STAR, anon_sym_GT_GT, @@ -31628,7 +28999,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT, anon_sym_LT, anon_sym_GT, - ACTIONS(834), 36, + ACTIONS(826), 36, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -31665,7 +29036,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET_EQ, anon_sym_PIPE_EQ, sym_type_conversion, - [7032] = 22, + [6849] = 22, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -31684,17 +29055,17 @@ static const uint16_t ts_small_parse_table[] = { sym__string_start, ACTIONS(664), 1, anon_sym_yield, - ACTIONS(716), 1, - anon_sym_STAR, - ACTIONS(718), 1, + ACTIONS(728), 1, anon_sym_LPAREN, - ACTIONS(720), 1, + ACTIONS(730), 1, anon_sym_RPAREN, - STATE(600), 1, + ACTIONS(732), 1, + anon_sym_STAR, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1053), 1, + STATE(1044), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -31703,7 +29074,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1166), 3, + STATE(1137), 3, sym_list_splat, sym_parenthesized_list_splat, sym_yield, @@ -31718,7 +29089,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -31726,7 +29097,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -31742,7 +29113,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [7131] = 22, + [6948] = 22, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -31761,17 +29132,17 @@ static const uint16_t ts_small_parse_table[] = { sym__string_start, ACTIONS(664), 1, anon_sym_yield, - ACTIONS(716), 1, - anon_sym_STAR, - ACTIONS(718), 1, + ACTIONS(728), 1, anon_sym_LPAREN, - ACTIONS(720), 1, + ACTIONS(730), 1, anon_sym_RPAREN, - STATE(600), 1, + ACTIONS(732), 1, + anon_sym_STAR, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1053), 1, + STATE(1044), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -31780,7 +29151,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1166), 3, + STATE(1137), 3, sym_list_splat, sym_parenthesized_list_splat, sym_yield, @@ -31795,7 +29166,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -31803,7 +29174,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -31819,10 +29190,10 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [7230] = 3, + [7047] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(824), 17, + ACTIONS(832), 17, anon_sym_as, anon_sym_STAR, anon_sym_GT_GT, @@ -31840,7 +29211,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT, anon_sym_LT, anon_sym_GT, - ACTIONS(822), 36, + ACTIONS(830), 36, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -31877,10 +29248,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET_EQ, anon_sym_PIPE_EQ, sym_type_conversion, - [7291] = 3, + [7108] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(840), 17, + ACTIONS(832), 17, anon_sym_as, anon_sym_STAR, anon_sym_GT_GT, @@ -31898,7 +29269,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT, anon_sym_LT, anon_sym_GT, - ACTIONS(838), 36, + ACTIONS(830), 36, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -31935,86 +29306,197 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET_EQ, anon_sym_PIPE_EQ, sym_type_conversion, - [7352] = 9, + [7169] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(846), 1, - anon_sym_else, - ACTIONS(848), 1, - anon_sym_except, - ACTIONS(850), 1, - anon_sym_finally, - STATE(440), 1, - sym_else_clause, - STATE(504), 1, - sym_finally_clause, - STATE(271), 2, - sym_except_clause, - aux_sym_try_statement_repeat1, - ACTIONS(842), 12, - sym__string_start, - ts_builtin_sym_end, - anon_sym_LPAREN, + ACTIONS(836), 17, + anon_sym_as, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, anon_sym_DASH, anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_LBRACE, anon_sym_STAR_STAR, + anon_sym_EQ, anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(844), 33, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(834), 36, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, anon_sym_if, + anon_sym_COLON, + anon_sym_else, anon_sym_async, anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_with, - anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, anon_sym_not, - anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [7424] = 9, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym_type_conversion, + [7230] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(840), 17, + anon_sym_as, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(838), 36, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym_type_conversion, + [7291] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(828), 17, + anon_sym_as, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(826), 36, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym_type_conversion, + [7352] = 9, ACTIONS(3), 1, sym_comment, - ACTIONS(852), 1, + ACTIONS(846), 1, anon_sym_else, - ACTIONS(854), 1, + ACTIONS(848), 1, anon_sym_except_STAR, - ACTIONS(856), 1, + ACTIONS(850), 1, anon_sym_finally, - STATE(413), 1, + STATE(386), 1, sym_else_clause, - STATE(520), 1, + STATE(539), 1, sym_finally_clause, - STATE(267), 2, + STATE(271), 2, sym_except_group_clause, aux_sym_try_statement_repeat2, - ACTIONS(842), 12, + ACTIONS(844), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -32027,7 +29509,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(844), 33, + ACTIONS(842), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -32061,11 +29543,17 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [7496] = 21, + [7424] = 22, ACTIONS(3), 1, sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, ACTIONS(274), 1, sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, ACTIONS(293), 1, anon_sym_LBRACK, ACTIONS(295), 1, @@ -32078,29 +29566,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - ACTIONS(664), 1, - anon_sym_yield, - ACTIONS(716), 1, - anon_sym_STAR, - ACTIONS(718), 1, - anon_sym_LPAREN, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1053), 1, + STATE(1074), 1, sym_expression, + STATE(1472), 1, + sym_expression_list, ACTIONS(309), 2, sym_ellipsis, sym_float, + STATE(1373), 2, + sym_list_splat, + sym_dictionary_splat, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1166), 3, - sym_list_splat, - sym_parenthesized_list_splat, - sym_yield, ACTIONS(311), 4, sym_integer, sym_true, @@ -32112,7 +29595,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -32120,7 +29603,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -32136,7 +29619,70 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [7592] = 22, + [7522] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + ACTIONS(850), 1, + anon_sym_finally, + ACTIONS(856), 1, + anon_sym_except, + STATE(455), 1, + sym_else_clause, + STATE(504), 1, + sym_finally_clause, + STATE(268), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + ACTIONS(854), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(852), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [7594] = 22, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -32151,26 +29697,26 @@ static const uint16_t ts_small_parse_table[] = { sym__string_start, ACTIONS(283), 1, anon_sym_STAR, - ACTIONS(331), 1, + ACTIONS(379), 1, sym_identifier, - ACTIONS(337), 1, + ACTIONS(385), 1, anon_sym_await, - ACTIONS(559), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + STATE(683), 1, sym_string, - STATE(1046), 1, + STATE(710), 1, + sym_primary_expression, + STATE(1021), 1, sym_expression, - STATE(1389), 1, + STATE(1390), 1, sym_expression_list, ACTIONS(75), 2, sym_ellipsis, sym_float, - STATE(1360), 2, + STATE(1397), 2, sym_list_splat, sym_dictionary_splat, ACTIONS(47), 3, @@ -32182,13 +29728,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -32196,7 +29742,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -32212,23 +29758,23 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [7690] = 9, + [7692] = 9, ACTIONS(3), 1, sym_comment, - ACTIONS(852), 1, + ACTIONS(846), 1, anon_sym_else, - ACTIONS(856), 1, + ACTIONS(848), 1, + anon_sym_except_STAR, + ACTIONS(850), 1, anon_sym_finally, - ACTIONS(862), 1, - anon_sym_except, - STATE(454), 1, + STATE(455), 1, sym_else_clause, - STATE(588), 1, + STATE(504), 1, sym_finally_clause, - STATE(266), 2, - sym_except_clause, - aux_sym_try_statement_repeat1, - ACTIONS(860), 12, + STATE(271), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(854), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -32241,7 +29787,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(858), 33, + ACTIONS(852), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -32275,101 +29821,214 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [7762] = 22, + [7764] = 9, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(274), 1, - sym_identifier, - ACTIONS(278), 1, + ACTIONS(858), 1, + anon_sym_else, + ACTIONS(860), 1, + anon_sym_except, + ACTIONS(862), 1, + anon_sym_finally, + STATE(395), 1, + sym_else_clause, + STATE(507), 1, + sym_finally_clause, + STATE(282), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + ACTIONS(854), 12, + sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, - ACTIONS(283), 1, - anon_sym_STAR, - ACTIONS(293), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LBRACK, - ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(299), 1, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(852), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, anon_sym_not, - ACTIONS(305), 1, anon_sym_lambda, - ACTIONS(313), 1, + anon_sym_yield, + sym_integer, + sym_identifier, anon_sym_await, - ACTIONS(315), 1, + sym_true, + sym_false, + sym_none, + [7836] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(858), 1, + anon_sym_else, + ACTIONS(862), 1, + anon_sym_finally, + ACTIONS(864), 1, + anon_sym_except_STAR, + STATE(395), 1, + sym_else_clause, + STATE(507), 1, + sym_finally_clause, + STATE(283), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(854), 12, sym__string_start, - STATE(600), 1, - sym_string, - STATE(630), 1, - sym_primary_expression, - STATE(1070), 1, - sym_expression, - STATE(1472), 1, - sym_expression_list, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - STATE(1366), 2, - sym_list_splat, - sym_dictionary_splat, - ACTIONS(301), 3, + ts_builtin_sym_end, + anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, anon_sym_TILDE, - ACTIONS(311), 4, + sym_ellipsis, + sym_float, + ACTIONS(852), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, sym_integer, + sym_identifier, + anon_sym_await, sym_true, sym_false, sym_none, - ACTIONS(285), 5, + [7908] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(858), 1, + anon_sym_else, + ACTIONS(862), 1, + anon_sym_finally, + ACTIONS(864), 1, + anon_sym_except_STAR, + STATE(456), 1, + sym_else_clause, + STATE(524), 1, + sym_finally_clause, + STATE(283), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(844), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(842), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, anon_sym_exec, anon_sym_type, - STATE(900), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(642), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [7860] = 9, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [7980] = 9, ACTIONS(3), 1, sym_comment, - ACTIONS(852), 1, + ACTIONS(858), 1, anon_sym_else, - ACTIONS(854), 1, - anon_sym_except_STAR, - ACTIONS(856), 1, + ACTIONS(860), 1, + anon_sym_except, + ACTIONS(862), 1, anon_sym_finally, - STATE(454), 1, + STATE(456), 1, sym_else_clause, - STATE(588), 1, + STATE(524), 1, sym_finally_clause, - STATE(267), 2, - sym_except_group_clause, - aux_sym_try_statement_repeat2, - ACTIONS(860), 12, - sym__dedent, + STATE(282), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + ACTIONS(844), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -32380,7 +30039,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(858), 33, + ACTIONS(842), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -32414,17 +30073,11 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [7932] = 22, + [8052] = 21, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, ACTIONS(274), 1, sym_identifier, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(283), 1, - anon_sym_STAR, ACTIONS(293), 1, anon_sym_LBRACK, ACTIONS(295), 1, @@ -32437,24 +30090,29 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(728), 1, + anon_sym_LPAREN, + ACTIONS(732), 1, + anon_sym_STAR, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1085), 1, + STATE(1044), 1, sym_expression, - STATE(1518), 1, - sym_expression_list, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1366), 2, - sym_list_splat, - sym_dictionary_splat, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, + STATE(1137), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, ACTIONS(311), 4, sym_integer, sym_true, @@ -32466,7 +30124,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -32474,7 +30132,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -32490,7 +30148,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [8030] = 22, + [8148] = 22, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, @@ -32513,18 +30171,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1059), 1, + STATE(1079), 1, sym_expression, - STATE(1507), 1, + STATE(1500), 1, sym_expression_list, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1366), 2, + STATE(1373), 2, sym_list_splat, sym_dictionary_splat, ACTIONS(301), 3, @@ -32542,7 +30200,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -32550,7 +30208,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -32566,143 +30224,89 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [8128] = 9, + [8246] = 22, ACTIONS(3), 1, sym_comment, - ACTIONS(846), 1, - anon_sym_else, - ACTIONS(850), 1, - anon_sym_finally, - ACTIONS(864), 1, - anon_sym_except_STAR, - STATE(467), 1, - sym_else_clause, - STATE(523), 1, - sym_finally_clause, - STATE(270), 2, - sym_except_group_clause, - aux_sym_try_statement_repeat2, - ACTIONS(860), 12, - sym__string_start, - ts_builtin_sym_end, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, anon_sym_LBRACK, + ACTIONS(295), 1, anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(858), 33, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, - anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_with, - anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, + ACTIONS(299), 1, anon_sym_not, + ACTIONS(305), 1, anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, + ACTIONS(313), 1, anon_sym_await, - sym_true, - sym_false, - sym_none, - [8200] = 9, - ACTIONS(3), 1, - sym_comment, - ACTIONS(846), 1, - anon_sym_else, - ACTIONS(848), 1, - anon_sym_except, - ACTIONS(850), 1, - anon_sym_finally, - STATE(467), 1, - sym_else_clause, - STATE(523), 1, - sym_finally_clause, - STATE(271), 2, - sym_except_clause, - aux_sym_try_statement_repeat1, - ACTIONS(860), 12, + ACTIONS(315), 1, sym__string_start, - ts_builtin_sym_end, - anon_sym_LPAREN, + STATE(607), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1080), 1, + sym_expression, + STATE(1479), 1, + sym_expression_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1373), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(858), 33, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_with, anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, anon_sym_exec, anon_sym_type, - anon_sym_class, - anon_sym_not, - anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [8272] = 22, + STATE(905), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(622), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [8344] = 22, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, ACTIONS(274), 1, sym_identifier, ACTIONS(278), 1, anon_sym_LPAREN, - ACTIONS(283), 1, - anon_sym_STAR, ACTIONS(293), 1, anon_sym_LBRACK, ACTIONS(295), 1, @@ -32715,20 +30319,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + ACTIONS(732), 1, + anon_sym_STAR, + ACTIONS(866), 1, + anon_sym_COLON, + ACTIONS(868), 1, + anon_sym_RBRACK, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1075), 1, + STATE(1073), 1, sym_expression, - STATE(1465), 1, - sym_expression_list, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1366), 2, + STATE(1369), 2, sym_list_splat, - sym_dictionary_splat, + sym_slice, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, @@ -32744,7 +30352,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -32752,7 +30360,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -32768,86 +30376,99 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [8370] = 9, + [8442] = 22, ACTIONS(3), 1, sym_comment, - ACTIONS(846), 1, - anon_sym_else, - ACTIONS(850), 1, - anon_sym_finally, - ACTIONS(864), 1, - anon_sym_except_STAR, - STATE(440), 1, - sym_else_clause, - STATE(504), 1, - sym_finally_clause, - STATE(270), 2, - sym_except_group_clause, - aux_sym_try_statement_repeat2, - ACTIONS(842), 12, - sym__string_start, - ts_builtin_sym_end, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(293), 1, anon_sym_LBRACK, + ACTIONS(295), 1, anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(732), 1, + anon_sym_STAR, + ACTIONS(866), 1, + anon_sym_COLON, + ACTIONS(870), 1, + anon_sym_RBRACK, + STATE(607), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1073), 1, + sym_expression, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(844), 33, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, + STATE(1369), 2, + sym_list_splat, + sym_slice, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_with, anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, anon_sym_exec, anon_sym_type, - anon_sym_class, - anon_sym_not, - anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [8442] = 9, + STATE(905), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(622), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [8540] = 9, ACTIONS(3), 1, sym_comment, - ACTIONS(852), 1, + ACTIONS(846), 1, anon_sym_else, - ACTIONS(856), 1, + ACTIONS(850), 1, anon_sym_finally, - ACTIONS(862), 1, + ACTIONS(856), 1, anon_sym_except, - STATE(413), 1, + STATE(386), 1, sym_else_clause, - STATE(520), 1, + STATE(539), 1, sym_finally_clause, - STATE(266), 2, + STATE(268), 2, sym_except_clause, aux_sym_try_statement_repeat1, - ACTIONS(842), 12, + ACTIONS(844), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -32860,7 +30481,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(844), 33, + ACTIONS(842), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -32894,11 +30515,9 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [8514] = 21, + [8612] = 22, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, ACTIONS(274), 1, sym_identifier, ACTIONS(278), 1, @@ -32915,20 +30534,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, + ACTIONS(732), 1, + anon_sym_STAR, ACTIONS(866), 1, - anon_sym_RBRACE, - STATE(600), 1, + anon_sym_COLON, + ACTIONS(872), 1, + anon_sym_RBRACK, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1145), 1, + STATE(1073), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1384), 2, - sym_dictionary_splat, - sym_pair, + STATE(1369), 2, + sym_list_splat, + sym_slice, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, @@ -32944,7 +30567,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -32952,7 +30575,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -32968,11 +30591,9 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [8609] = 21, + [8710] = 22, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, ACTIONS(274), 1, sym_identifier, ACTIONS(278), 1, @@ -32989,20 +30610,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - ACTIONS(868), 1, - anon_sym_RBRACE, - STATE(600), 1, + ACTIONS(732), 1, + anon_sym_STAR, + ACTIONS(866), 1, + anon_sym_COLON, + ACTIONS(874), 1, + anon_sym_RBRACK, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1145), 1, + STATE(1073), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1384), 2, - sym_dictionary_splat, - sym_pair, + STATE(1369), 2, + sym_list_splat, + sym_slice, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, @@ -33018,7 +30643,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -33026,7 +30651,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -33042,57 +30667,59 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [8704] = 21, + [8808] = 22, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(69), 1, + ACTIONS(299), 1, anon_sym_not, - ACTIONS(71), 1, + ACTIONS(305), 1, anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(331), 1, - sym_identifier, - ACTIONS(337), 1, + ACTIONS(313), 1, anon_sym_await, - ACTIONS(559), 1, - anon_sym_LPAREN, - ACTIONS(563), 1, - anon_sym_LBRACK, - ACTIONS(780), 1, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(732), 1, anon_sym_STAR, - ACTIONS(782), 1, - anon_sym_STAR_STAR, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + ACTIONS(866), 1, + anon_sym_COLON, + ACTIONS(876), 1, + anon_sym_RBRACK, + STATE(607), 1, sym_string, - STATE(1036), 1, + STATE(630), 1, + sym_primary_expression, + STATE(1073), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1187), 2, + STATE(1369), 2, sym_list_splat, - sym_dictionary_splat, - ACTIONS(47), 3, + sym_slice, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(285), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -33100,7 +30727,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -33116,17 +30743,13 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [8799] = 21, + [8906] = 22, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, ACTIONS(274), 1, sym_identifier, ACTIONS(278), 1, anon_sym_LPAREN, - ACTIONS(283), 1, - anon_sym_STAR, ACTIONS(293), 1, anon_sym_LBRACK, ACTIONS(295), 1, @@ -33139,18 +30762,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + ACTIONS(732), 1, + anon_sym_STAR, + ACTIONS(866), 1, + anon_sym_COLON, + ACTIONS(878), 1, + anon_sym_RBRACK, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(933), 1, + STATE(1073), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1023), 2, + STATE(1369), 2, sym_list_splat, - sym_dictionary_splat, + sym_slice, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, @@ -33166,7 +30795,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -33174,7 +30803,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -33190,7 +30819,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [8894] = 21, + [9004] = 22, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, @@ -33199,6 +30828,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(278), 1, anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, ACTIONS(293), 1, anon_sym_LBRACK, ACTIONS(295), 1, @@ -33211,20 +30842,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - ACTIONS(870), 1, - anon_sym_RBRACE, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1145), 1, + STATE(1062), 1, sym_expression, + STATE(1455), 1, + sym_expression_list, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1384), 2, + STATE(1373), 2, + sym_list_splat, sym_dictionary_splat, - sym_pair, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, @@ -33240,7 +30871,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -33248,7 +30879,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -33264,74 +30895,9 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [8989] = 10, + [9102] = 22, ACTIONS(3), 1, sym_comment, - ACTIONS(280), 1, - anon_sym_COMMA, - ACTIONS(287), 1, - anon_sym_COLON_EQ, - ACTIONS(872), 1, - anon_sym_for, - ACTIONS(874), 1, - anon_sym_with, - ACTIONS(876), 1, - anon_sym_def, - ACTIONS(289), 2, - anon_sym_COLON, - anon_sym_EQ, - ACTIONS(307), 13, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - ACTIONS(276), 15, - anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_SLASH, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT, - anon_sym_GT, - ACTIONS(303), 16, - sym__newline, - anon_sym_DOT, - anon_sym_LPAREN, - anon_sym_if, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - sym__semicolon, - [9062] = 21, - ACTIONS(3), 1, - sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, ACTIONS(274), 1, sym_identifier, ACTIONS(278), 1, @@ -33348,20 +30914,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - ACTIONS(878), 1, - anon_sym_RBRACE, - STATE(600), 1, + ACTIONS(732), 1, + anon_sym_STAR, + ACTIONS(866), 1, + anon_sym_COLON, + ACTIONS(880), 1, + anon_sym_RBRACK, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1145), 1, + STATE(1073), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1384), 2, - sym_dictionary_splat, - sym_pair, + STATE(1369), 2, + sym_list_splat, + sym_slice, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, @@ -33377,7 +30947,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -33385,7 +30955,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -33401,11 +30971,9 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [9157] = 21, + [9200] = 22, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, ACTIONS(274), 1, sym_identifier, ACTIONS(278), 1, @@ -33422,20 +30990,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - ACTIONS(880), 1, - anon_sym_RBRACE, - STATE(600), 1, + ACTIONS(732), 1, + anon_sym_STAR, + ACTIONS(866), 1, + anon_sym_COLON, + ACTIONS(882), 1, + anon_sym_RBRACK, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1145), 1, + STATE(1073), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1384), 2, - sym_dictionary_splat, - sym_pair, + STATE(1369), 2, + sym_list_splat, + sym_slice, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, @@ -33451,7 +31023,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -33459,7 +31031,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -33475,11 +31047,9 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [9252] = 21, + [9298] = 22, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, ACTIONS(274), 1, sym_identifier, ACTIONS(278), 1, @@ -33496,20 +31066,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - ACTIONS(882), 1, - anon_sym_RBRACE, - STATE(600), 1, + ACTIONS(732), 1, + anon_sym_STAR, + ACTIONS(866), 1, + anon_sym_COLON, + ACTIONS(884), 1, + anon_sym_RBRACK, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1145), 1, + STATE(1073), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1384), 2, - sym_dictionary_splat, - sym_pair, + STATE(1369), 2, + sym_list_splat, + sym_slice, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, @@ -33525,7 +31099,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -33533,7 +31107,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -33549,11 +31123,9 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [9347] = 21, + [9396] = 21, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, ACTIONS(274), 1, sym_identifier, ACTIONS(278), 1, @@ -33570,20 +31142,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - ACTIONS(884), 1, - anon_sym_RBRACE, - STATE(600), 1, + ACTIONS(732), 1, + anon_sym_STAR, + ACTIONS(866), 1, + anon_sym_COLON, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1145), 1, + STATE(1024), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1384), 2, - sym_dictionary_splat, - sym_pair, + STATE(1228), 2, + sym_list_splat, + sym_slice, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, @@ -33599,7 +31173,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -33607,7 +31181,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -33623,7 +31197,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [9442] = 21, + [9491] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, @@ -33646,16 +31220,16 @@ static const uint16_t ts_small_parse_table[] = { sym__string_start, ACTIONS(886), 1, anon_sym_RBRACE, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1145), 1, + STATE(1131), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1384), 2, + STATE(1379), 2, sym_dictionary_splat, sym_pair, ACTIONS(301), 3, @@ -33673,7 +31247,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -33681,7 +31255,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -33697,11 +31271,83 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [9537] = 21, + [9586] = 21, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(379), 1, + sym_identifier, + ACTIONS(385), 1, + anon_sym_await, + ACTIONS(568), 1, + anon_sym_LPAREN, + ACTIONS(572), 1, + anon_sym_LBRACK, + ACTIONS(772), 1, + anon_sym_STAR, + ACTIONS(774), 1, anon_sym_STAR_STAR, + STATE(683), 1, + sym_string, + STATE(710), 1, + sym_primary_expression, + STATE(1019), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + STATE(1212), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(381), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(974), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(795), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [9681] = 21, + ACTIONS(3), 1, + sym_comment, ACTIONS(274), 1, sym_identifier, ACTIONS(278), 1, @@ -33718,20 +31364,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - ACTIONS(888), 1, - anon_sym_RBRACE, - STATE(600), 1, + ACTIONS(732), 1, + anon_sym_STAR, + ACTIONS(866), 1, + anon_sym_COLON, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1145), 1, + STATE(1073), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1384), 2, - sym_dictionary_splat, - sym_pair, + STATE(1369), 2, + sym_list_splat, + sym_slice, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, @@ -33747,7 +31395,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -33755,7 +31403,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -33771,76 +31419,17 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [9632] = 10, + [9776] = 21, ACTIONS(3), 1, sym_comment, - ACTIONS(280), 1, - anon_sym_COMMA, - ACTIONS(287), 1, - anon_sym_COLON_EQ, - ACTIONS(890), 1, - anon_sym_for, - ACTIONS(892), 1, - anon_sym_with, - ACTIONS(894), 1, - anon_sym_def, - ACTIONS(289), 2, - anon_sym_COLON, - anon_sym_EQ, - ACTIONS(307), 13, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - ACTIONS(276), 15, - anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(53), 1, anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_SLASH, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT, - anon_sym_GT, - ACTIONS(303), 16, - sym__newline, - anon_sym_DOT, - anon_sym_LPAREN, - anon_sym_if, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - sym__semicolon, - [9705] = 21, - ACTIONS(3), 1, - sym_comment, ACTIONS(274), 1, sym_identifier, ACTIONS(278), 1, anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, ACTIONS(293), 1, anon_sym_LBRACK, ACTIONS(295), 1, @@ -33853,21 +31442,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - ACTIONS(896), 1, - anon_sym_COLON, - ACTIONS(898), 1, - anon_sym_RBRACK, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1086), 1, + STATE(941), 1, sym_expression, - STATE(1398), 1, - sym_slice, ACTIONS(309), 2, sym_ellipsis, sym_float, + STATE(1052), 2, + sym_list_splat, + sym_dictionary_splat, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, @@ -33883,7 +31469,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -33891,7 +31477,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -33907,7 +31493,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [9799] = 21, + [9871] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -33926,21 +31512,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - ACTIONS(896), 1, + ACTIONS(732), 1, + anon_sym_STAR, + ACTIONS(866), 1, anon_sym_COLON, - ACTIONS(900), 1, - anon_sym_RBRACK, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1086), 1, + STATE(1025), 1, sym_expression, - STATE(1398), 1, - sym_slice, ACTIONS(309), 2, sym_ellipsis, sym_float, + STATE(1224), 2, + sym_list_splat, + sym_slice, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, @@ -33956,7 +31543,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -33964,7 +31551,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -33980,9 +31567,11 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [9893] = 21, + [9966] = 21, ACTIONS(3), 1, sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, ACTIONS(274), 1, sym_identifier, ACTIONS(278), 1, @@ -33999,21 +31588,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - ACTIONS(896), 1, - anon_sym_COLON, - ACTIONS(902), 1, - anon_sym_RBRACK, - STATE(600), 1, + ACTIONS(888), 1, + anon_sym_RBRACE, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1086), 1, + STATE(1131), 1, sym_expression, - STATE(1398), 1, - sym_slice, ACTIONS(309), 2, sym_ellipsis, sym_float, + STATE(1379), 2, + sym_dictionary_splat, + sym_pair, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, @@ -34029,7 +31617,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -34037,7 +31625,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -34053,67 +31641,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [9987] = 8, - ACTIONS(3), 1, - sym_comment, - ACTIONS(852), 1, - anon_sym_else, - ACTIONS(908), 1, - anon_sym_elif, - STATE(307), 1, - aux_sym_if_statement_repeat1, - STATE(420), 1, - sym_elif_clause, - STATE(577), 1, - sym_else_clause, - ACTIONS(906), 12, - sym__dedent, - sym__string_start, - anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(904), 33, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, - anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_with, - anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, - anon_sym_not, - anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [10055] = 20, + [10061] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -34132,20 +31660,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - ACTIONS(912), 1, + ACTIONS(732), 1, + anon_sym_STAR, + ACTIONS(866), 1, anon_sym_COLON, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1064), 1, + STATE(1047), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(910), 2, - anon_sym_COMMA, - anon_sym_RBRACK, + STATE(1264), 2, + sym_list_splat, + sym_slice, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, @@ -34161,7 +31691,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -34169,7 +31699,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -34185,9 +31715,11 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [10147] = 21, + [10156] = 21, ACTIONS(3), 1, sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, ACTIONS(274), 1, sym_identifier, ACTIONS(278), 1, @@ -34204,21 +31736,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - ACTIONS(896), 1, - anon_sym_COLON, - ACTIONS(914), 1, - anon_sym_RBRACK, - STATE(600), 1, + ACTIONS(890), 1, + anon_sym_RBRACE, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1086), 1, + STATE(1131), 1, sym_expression, - STATE(1398), 1, - sym_slice, ACTIONS(309), 2, sym_ellipsis, sym_float, + STATE(1379), 2, + sym_dictionary_splat, + sym_pair, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, @@ -34234,7 +31765,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -34242,7 +31773,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -34258,9 +31789,11 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [10241] = 21, + [10251] = 21, ACTIONS(3), 1, sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, ACTIONS(274), 1, sym_identifier, ACTIONS(278), 1, @@ -34277,21 +31810,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - ACTIONS(896), 1, - anon_sym_COLON, - ACTIONS(916), 1, - anon_sym_RBRACK, - STATE(600), 1, + ACTIONS(892), 1, + anon_sym_RBRACE, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1086), 1, + STATE(1131), 1, sym_expression, - STATE(1398), 1, - sym_slice, ACTIONS(309), 2, sym_ellipsis, sym_float, + STATE(1379), 2, + sym_dictionary_splat, + sym_pair, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, @@ -34307,7 +31839,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -34315,7 +31847,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -34331,9 +31863,85 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [10335] = 21, + [10346] = 21, ACTIONS(3), 1, sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(894), 1, + anon_sym_RBRACE, + STATE(607), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1131), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1379), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(905), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(622), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [10441] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, ACTIONS(274), 1, sym_identifier, ACTIONS(278), 1, @@ -34351,20 +31959,230 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(315), 1, sym__string_start, ACTIONS(896), 1, + anon_sym_RBRACE, + STATE(607), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1131), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1379), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(905), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(622), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [10536] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(898), 1, + anon_sym_RBRACE, + STATE(607), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1131), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1379), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(905), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(622), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [10631] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(280), 1, + anon_sym_COMMA, + ACTIONS(287), 1, + anon_sym_COLON_EQ, + ACTIONS(900), 1, + anon_sym_for, + ACTIONS(902), 1, + anon_sym_with, + ACTIONS(904), 1, + anon_sym_def, + ACTIONS(289), 2, anon_sym_COLON, - ACTIONS(918), 1, - anon_sym_RBRACK, - STATE(600), 1, + anon_sym_EQ, + ACTIONS(307), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(276), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_SEMI, + [10704] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(906), 1, + anon_sym_RBRACE, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1086), 1, + STATE(1131), 1, sym_expression, - STATE(1398), 1, - sym_slice, ACTIONS(309), 2, sym_ellipsis, sym_float, + STATE(1379), 2, + sym_dictionary_splat, + sym_pair, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, @@ -34380,7 +32198,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -34388,7 +32206,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -34404,20 +32222,152 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [10429] = 8, + [10799] = 21, ACTIONS(3), 1, sym_comment, - ACTIONS(852), 1, - anon_sym_else, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, ACTIONS(908), 1, - anon_sym_elif, - STATE(307), 1, - aux_sym_if_statement_repeat1, - STATE(420), 1, - sym_elif_clause, - STATE(570), 1, - sym_else_clause, - ACTIONS(922), 12, + anon_sym_RBRACE, + STATE(607), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1131), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1379), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(905), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(622), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [10894] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(280), 1, + anon_sym_COMMA, + ACTIONS(287), 1, + anon_sym_COLON_EQ, + ACTIONS(910), 1, + anon_sym_for, + ACTIONS(912), 1, + anon_sym_with, + ACTIONS(914), 1, + anon_sym_def, + ACTIONS(289), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(307), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(276), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_SEMI, + [10967] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(920), 1, + anon_sym_except, + STATE(268), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + ACTIONS(918), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -34430,7 +32380,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(920), 33, + ACTIONS(916), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -34443,10 +32393,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_break, anon_sym_continue, anon_sym_if, + anon_sym_else, anon_sym_async, anon_sym_for, anon_sym_while, anon_sym_try, + anon_sym_finally, anon_sym_with, anon_sym_match, anon_sym_def, @@ -34464,7 +32416,79 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [10497] = 20, + [11029] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(607), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1131), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1379), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(905), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(622), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [11121] = 20, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -34483,18 +32507,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - ACTIONS(926), 1, + ACTIONS(925), 1, anon_sym_COLON, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1083), 1, + STATE(1077), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(924), 2, + ACTIONS(923), 2, anon_sym_COMMA, anon_sym_RBRACK, ACTIONS(301), 3, @@ -34512,7 +32536,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -34520,7 +32544,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -34536,20 +32560,15 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [10589] = 8, + [11213] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(852), 1, - anon_sym_else, - ACTIONS(908), 1, - anon_sym_elif, - STATE(258), 1, - aux_sym_if_statement_repeat1, - STATE(420), 1, - sym_elif_clause, - STATE(522), 1, - sym_else_clause, - ACTIONS(930), 12, + ACTIONS(931), 1, + anon_sym_except_STAR, + STATE(271), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(929), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -34562,7 +32581,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(928), 33, + ACTIONS(927), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -34575,10 +32594,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_break, anon_sym_continue, anon_sym_if, + anon_sym_else, anon_sym_async, anon_sym_for, anon_sym_while, anon_sym_try, + anon_sym_finally, anon_sym_with, anon_sym_match, anon_sym_def, @@ -34596,15 +32617,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [10657] = 5, + [11275] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(936), 1, - anon_sym_except, - STATE(266), 2, - sym_except_clause, - aux_sym_try_statement_repeat1, - ACTIONS(934), 12, + ACTIONS(846), 1, + anon_sym_else, + ACTIONS(938), 1, + anon_sym_elif, + STATE(276), 1, + aux_sym_if_statement_repeat1, + STATE(453), 1, + sym_elif_clause, + STATE(560), 1, + sym_else_clause, + ACTIONS(936), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -34617,7 +32643,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(932), 35, + ACTIONS(934), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -34630,12 +32656,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_break, anon_sym_continue, anon_sym_if, - anon_sym_else, anon_sym_async, anon_sym_for, anon_sym_while, anon_sym_try, - anon_sym_finally, anon_sym_with, anon_sym_match, anon_sym_def, @@ -34653,15 +32677,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [10719] = 5, + [11343] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(943), 1, - anon_sym_except_STAR, - STATE(267), 2, - sym_except_group_clause, - aux_sym_try_statement_repeat2, - ACTIONS(941), 12, + ACTIONS(846), 1, + anon_sym_else, + ACTIONS(938), 1, + anon_sym_elif, + STATE(302), 1, + aux_sym_if_statement_repeat1, + STATE(453), 1, + sym_elif_clause, + STATE(562), 1, + sym_else_clause, + ACTIONS(942), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -34674,7 +32703,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(939), 35, + ACTIONS(940), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -34687,12 +32716,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_break, anon_sym_continue, anon_sym_if, - anon_sym_else, anon_sym_async, anon_sym_for, anon_sym_while, anon_sym_try, - anon_sym_finally, anon_sym_with, anon_sym_match, anon_sym_def, @@ -34710,20 +32737,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [10781] = 8, + [11411] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(846), 1, + ACTIONS(858), 1, anon_sym_else, - ACTIONS(950), 1, + ACTIONS(948), 1, anon_sym_elif, - STATE(276), 1, + STATE(313), 1, aux_sym_if_statement_repeat1, - STATE(433), 1, + STATE(481), 1, sym_elif_clause, - STATE(537), 1, + STATE(572), 1, sym_else_clause, - ACTIONS(946), 12, + ACTIONS(944), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -34736,7 +32763,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(948), 33, + ACTIONS(946), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -34770,145 +32797,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [10849] = 21, - ACTIONS(3), 1, - sym_comment, - ACTIONS(274), 1, - sym_identifier, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(293), 1, - anon_sym_LBRACK, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(299), 1, - anon_sym_not, - ACTIONS(305), 1, - anon_sym_lambda, - ACTIONS(313), 1, - anon_sym_await, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(896), 1, - anon_sym_COLON, - ACTIONS(952), 1, - anon_sym_RBRACK, - STATE(600), 1, - sym_string, - STATE(630), 1, - sym_primary_expression, - STATE(1086), 1, - sym_expression, - STATE(1398), 1, - sym_slice, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - ACTIONS(301), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(311), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(285), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(900), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(642), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [10943] = 5, + [11479] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(954), 1, - anon_sym_except_STAR, - STATE(270), 2, - sym_except_group_clause, - aux_sym_try_statement_repeat2, - ACTIONS(941), 12, - sym__string_start, - ts_builtin_sym_end, - anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(939), 35, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, + ACTIONS(858), 1, anon_sym_else, - anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_finally, - anon_sym_with, - anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, - anon_sym_not, - anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [11005] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(957), 1, - anon_sym_except, - STATE(271), 2, - sym_except_clause, - aux_sym_try_statement_repeat1, - ACTIONS(934), 12, + ACTIONS(948), 1, + anon_sym_elif, + STATE(280), 1, + aux_sym_if_statement_repeat1, + STATE(481), 1, + sym_elif_clause, + STATE(537), 1, + sym_else_clause, + ACTIONS(950), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -34921,7 +32823,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(932), 35, + ACTIONS(952), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -34934,12 +32836,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_break, anon_sym_continue, anon_sym_if, - anon_sym_else, anon_sym_async, anon_sym_for, anon_sym_while, anon_sym_try, - anon_sym_finally, anon_sym_with, anon_sym_match, anon_sym_def, @@ -34957,20 +32857,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [11067] = 8, + [11547] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(852), 1, + ACTIONS(846), 1, anon_sym_else, - ACTIONS(908), 1, + ACTIONS(938), 1, anon_sym_elif, - STATE(263), 1, + STATE(302), 1, aux_sym_if_statement_repeat1, - STATE(420), 1, + STATE(453), 1, sym_elif_clause, - STATE(529), 1, + STATE(521), 1, sym_else_clause, - ACTIONS(946), 12, + ACTIONS(944), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -34983,7 +32883,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(948), 33, + ACTIONS(946), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -35017,157 +32917,70 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [11135] = 21, + [11615] = 9, ACTIONS(3), 1, sym_comment, - ACTIONS(274), 1, - sym_identifier, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(293), 1, - anon_sym_LBRACK, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(299), 1, - anon_sym_not, - ACTIONS(305), 1, - anon_sym_lambda, - ACTIONS(313), 1, - anon_sym_await, - ACTIONS(315), 1, + ACTIONS(280), 1, + anon_sym_COMMA, + ACTIONS(287), 1, + anon_sym_COLON_EQ, + ACTIONS(954), 1, sym__string_start, - ACTIONS(896), 1, - anon_sym_COLON, - ACTIONS(960), 1, - anon_sym_RBRACK, - STATE(600), 1, + STATE(1306), 1, sym_string, - STATE(630), 1, - sym_primary_expression, - STATE(1086), 1, - sym_expression, - STATE(1398), 1, - sym_slice, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - ACTIONS(301), 3, + ACTIONS(289), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(307), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(276), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, anon_sym_DASH, anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(311), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(285), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(900), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(642), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [11229] = 21, - ACTIONS(3), 1, - sym_comment, - ACTIONS(274), 1, - sym_identifier, - ACTIONS(278), 1, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 16, + sym__newline, + anon_sym_DOT, anon_sym_LPAREN, - ACTIONS(293), 1, + anon_sym_if, + anon_sym_in, anon_sym_LBRACK, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(299), 1, anon_sym_not, - ACTIONS(305), 1, - anon_sym_lambda, - ACTIONS(313), 1, - anon_sym_await, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(896), 1, - anon_sym_COLON, - ACTIONS(962), 1, - anon_sym_RBRACK, - STATE(600), 1, - sym_string, - STATE(630), 1, - sym_primary_expression, - STATE(1086), 1, - sym_expression, - STATE(1398), 1, - sym_slice, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - ACTIONS(301), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(311), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(285), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(900), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(642), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [11323] = 20, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_SEMI, + [11685] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, ACTIONS(274), 1, sym_identifier, ACTIONS(278), 1, @@ -35184,18 +32997,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + ACTIONS(958), 1, + anon_sym_COLON, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1145), 1, + STATE(1071), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(1384), 2, - sym_dictionary_splat, - sym_pair, + ACTIONS(956), 2, + anon_sym_COMMA, + anon_sym_RBRACK, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, @@ -35211,7 +33026,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -35219,7 +33034,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -35235,22 +33050,22 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [11415] = 8, + [11777] = 8, ACTIONS(3), 1, sym_comment, ACTIONS(846), 1, anon_sym_else, - ACTIONS(950), 1, + ACTIONS(938), 1, anon_sym_elif, - STATE(285), 1, + STATE(273), 1, aux_sym_if_statement_repeat1, - STATE(433), 1, + STATE(453), 1, sym_elif_clause, STATE(585), 1, sym_else_clause, - ACTIONS(922), 12, + ACTIONS(950), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -35261,7 +33076,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(920), 33, + ACTIONS(952), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -35295,20 +33110,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [11483] = 8, + [11845] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(846), 1, + ACTIONS(858), 1, anon_sym_else, - ACTIONS(950), 1, + ACTIONS(948), 1, anon_sym_elif, - STATE(285), 1, + STATE(313), 1, aux_sym_if_statement_repeat1, - STATE(433), 1, + STATE(481), 1, sym_elif_clause, - STATE(575), 1, + STATE(579), 1, sym_else_clause, - ACTIONS(906), 12, + ACTIONS(942), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -35321,7 +33136,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(904), 33, + ACTIONS(940), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -35355,81 +33170,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [11551] = 9, - ACTIONS(3), 1, - sym_comment, - ACTIONS(280), 1, - anon_sym_COMMA, - ACTIONS(287), 1, - anon_sym_COLON_EQ, - ACTIONS(964), 1, - sym__string_start, - STATE(1335), 1, - sym_string, - ACTIONS(289), 2, - anon_sym_COLON, - anon_sym_EQ, - ACTIONS(307), 13, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - ACTIONS(276), 15, - anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_SLASH, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT, - anon_sym_GT, - ACTIONS(303), 16, - sym__newline, - anon_sym_DOT, - anon_sym_LPAREN, - anon_sym_if, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - sym__semicolon, - [11621] = 8, + [11913] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(846), 1, + ACTIONS(858), 1, anon_sym_else, - ACTIONS(950), 1, + ACTIONS(948), 1, anon_sym_elif, - STATE(277), 1, + STATE(274), 1, aux_sym_if_statement_repeat1, - STATE(433), 1, + STATE(481), 1, sym_elif_clause, - STATE(576), 1, + STATE(574), 1, sym_else_clause, - ACTIONS(930), 12, + ACTIONS(936), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -35442,7 +33196,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(928), 33, + ACTIONS(934), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -35476,80 +33230,15 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [11689] = 19, - ACTIONS(3), 1, - sym_comment, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(602), 1, - sym_identifier, - ACTIONS(604), 1, - anon_sym_LPAREN, - ACTIONS(612), 1, - anon_sym_LBRACK, - ACTIONS(614), 1, - anon_sym_not, - ACTIONS(618), 1, - anon_sym_await, - ACTIONS(758), 1, - anon_sym_lambda, - STATE(600), 1, - sym_string, - STATE(643), 1, - sym_primary_expression, - STATE(962), 1, - sym_expression, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - STATE(1018), 2, - sym__expression_within_for_in_clause, - sym_lambda_within_for_in_clause, - ACTIONS(610), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(311), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(606), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(900), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(642), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [11778] = 3, + [11981] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(966), 12, + ACTIONS(960), 1, + anon_sym_except, + STATE(282), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + ACTIONS(918), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -35562,7 +33251,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(968), 37, + ACTIONS(916), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -35575,7 +33264,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_break, anon_sym_continue, anon_sym_if, - anon_sym_elif, anon_sym_else, anon_sym_async, anon_sym_for, @@ -35584,7 +33272,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_finally, anon_sym_with, anon_sym_match, - anon_sym_case, anon_sym_def, anon_sym_global, anon_sym_nonlocal, @@ -35600,10 +33287,15 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [11835] = 3, + [12043] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(970), 12, + ACTIONS(963), 1, + anon_sym_except_STAR, + STATE(283), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(929), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -35616,7 +33308,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(972), 37, + ACTIONS(927), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -35629,7 +33321,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_break, anon_sym_continue, anon_sym_if, - anon_sym_elif, anon_sym_else, anon_sym_async, anon_sym_for, @@ -35638,7 +33329,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_finally, anon_sym_with, anon_sym_match, - anon_sym_case, anon_sym_def, anon_sym_global, anon_sym_nonlocal, @@ -35654,54 +33344,53 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [11892] = 20, + [12105] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(622), 1, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, sym_identifier, - ACTIONS(632), 1, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, anon_sym_LBRACK, - ACTIONS(634), 1, - anon_sym_LBRACE, - ACTIONS(636), 1, + ACTIONS(614), 1, anon_sym_not, - ACTIONS(638), 1, - anon_sym_lambda, - ACTIONS(644), 1, + ACTIONS(618), 1, anon_sym_await, - ACTIONS(646), 1, - sym__string_start, - ACTIONS(974), 1, - anon_sym_LPAREN, - STATE(740), 1, - sym_primary_expression, - STATE(742), 1, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(607), 1, sym_string, - STATE(1050), 1, + STATE(621), 1, + sym_primary_expression, + STATE(962), 1, sym_expression, - STATE(1320), 1, - sym_with_item, - STATE(1422), 1, - sym_with_clause, - ACTIONS(640), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(630), 3, + STATE(1046), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(642), 4, + ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(626), 5, + ACTIONS(606), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1015), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -35709,7 +33398,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(811), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -35725,123 +33414,288 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [11983] = 8, + [12194] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(280), 1, - anon_sym_COMMA, - ACTIONS(287), 1, - anon_sym_COLON_EQ, - ACTIONS(976), 1, - sym_identifier, - ACTIONS(289), 2, - anon_sym_COLON, - anon_sym_EQ, - ACTIONS(303), 10, - sym__newline, - anon_sym_DOT, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(379), 1, + sym_identifier, + ACTIONS(385), 1, + anon_sym_await, + ACTIONS(568), 1, anon_sym_LPAREN, + ACTIONS(572), 1, anon_sym_LBRACK, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - sym__semicolon, - ACTIONS(307), 13, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - ACTIONS(276), 21, - anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_if, - anon_sym_in, - anon_sym_PIPE, + STATE(683), 1, + sym_string, + STATE(710), 1, + sym_primary_expression, + STATE(1064), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(966), 2, + sym__newline, + anon_sym_SEMI, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_SLASH, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT, - anon_sym_GT, - anon_sym_is, - [12050] = 6, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(381), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(974), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(795), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [12283] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(982), 1, - anon_sym_elif, - STATE(285), 1, - aux_sym_if_statement_repeat1, - STATE(433), 1, - sym_elif_clause, - ACTIONS(978), 12, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, sym__string_start, - ts_builtin_sym_end, + ACTIONS(379), 1, + sym_identifier, + ACTIONS(385), 1, + anon_sym_await, + ACTIONS(568), 1, anon_sym_LPAREN, + ACTIONS(572), 1, + anon_sym_LBRACK, + STATE(683), 1, + sym_string, + STATE(710), 1, + sym_primary_expression, + STATE(1064), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(968), 2, + sym__newline, + anon_sym_SEMI, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(381), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(974), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(795), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [12372] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(632), 1, anon_sym_LBRACK, + ACTIONS(634), 1, anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(970), 1, + anon_sym_LPAREN, + STATE(739), 1, + sym_string, + STATE(740), 1, + sym_primary_expression, + STATE(1026), 1, + sym_expression, + STATE(1237), 1, + sym_with_item, + STATE(1480), 1, + sym_with_clause, + ACTIONS(640), 2, sym_ellipsis, sym_float, - ACTIONS(980), 34, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, - anon_sym_else, anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_with, anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, anon_sym_exec, anon_sym_type, - anon_sym_class, + STATE(1053), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(813), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [12463] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, anon_sym_not, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(758), 1, anon_sym_lambda, - anon_sym_yield, + STATE(607), 1, + sym_string, + STATE(621), 1, + sym_primary_expression, + STATE(963), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(989), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, sym_integer, - sym_identifier, - anon_sym_await, sym_true, sym_false, sym_none, - [12113] = 19, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(905), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(622), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [12552] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, @@ -35860,16 +33714,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(758), 1, anon_sym_lambda, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(621), 1, sym_primary_expression, - STATE(962), 1, + STATE(959), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(979), 2, + STATE(1017), 2, sym__expression_within_for_in_clause, sym_lambda_within_for_in_clause, ACTIONS(610), 3, @@ -35887,7 +33741,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -35895,7 +33749,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -35911,12 +33765,83 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [12202] = 3, + [12641] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(985), 12, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(972), 1, + anon_sym_RPAREN, + STATE(739), 1, + sym_string, + STATE(740), 1, + sym_primary_expression, + STATE(1026), 1, + sym_expression, + STATE(1232), 1, + sym_with_item, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1053), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(813), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [12732] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(976), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -35927,7 +33852,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(987), 37, + ACTIONS(974), 37, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -35965,12 +33890,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [12259] = 3, + [12789] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(991), 12, - sym__dedent, + ACTIONS(978), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -35981,7 +33906,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(989), 37, + ACTIONS(980), 37, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -36019,38 +33944,38 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [12316] = 19, + [12846] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(274), 1, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, sym_identifier, - ACTIONS(278), 1, + ACTIONS(604), 1, anon_sym_LPAREN, - ACTIONS(293), 1, + ACTIONS(612), 1, anon_sym_LBRACK, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(299), 1, + ACTIONS(614), 1, anon_sym_not, - ACTIONS(305), 1, - anon_sym_lambda, - ACTIONS(313), 1, + ACTIONS(618), 1, anon_sym_await, - ACTIONS(315), 1, - sym__string_start, - STATE(600), 1, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(607), 1, sym_string, - STATE(630), 1, + STATE(621), 1, sym_primary_expression, - STATE(1103), 1, + STATE(963), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(993), 2, - anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(301), 3, + STATE(999), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, @@ -36059,13 +33984,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(285), 5, + ACTIONS(606), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -36073,7 +33998,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -36089,7 +34014,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [12405] = 20, + [12935] = 20, ACTIONS(3), 1, sym_comment, ACTIONS(622), 1, @@ -36108,15 +34033,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(646), 1, sym__string_start, - ACTIONS(995), 1, + ACTIONS(982), 1, anon_sym_RPAREN, + STATE(739), 1, + sym_string, STATE(740), 1, sym_primary_expression, - STATE(742), 1, - sym_string, - STATE(1050), 1, + STATE(1026), 1, sym_expression, - STATE(1308), 1, + STATE(1232), 1, sym_with_item, ACTIONS(640), 2, sym_ellipsis, @@ -36136,7 +34061,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1015), 7, + STATE(1053), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -36144,7 +34069,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(811), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -36160,108 +34085,54 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [12496] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(966), 12, - sym__dedent, - sym__string_start, - anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(968), 37, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, - anon_sym_elif, - anon_sym_else, - anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_finally, - anon_sym_with, - anon_sym_match, - anon_sym_case, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, - anon_sym_not, - anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [12553] = 20, + [13026] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(622), 1, + ACTIONS(274), 1, sym_identifier, - ACTIONS(632), 1, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, anon_sym_LBRACK, - ACTIONS(634), 1, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(636), 1, + ACTIONS(299), 1, anon_sym_not, - ACTIONS(638), 1, + ACTIONS(305), 1, anon_sym_lambda, - ACTIONS(644), 1, + ACTIONS(313), 1, anon_sym_await, - ACTIONS(646), 1, + ACTIONS(315), 1, sym__string_start, - ACTIONS(974), 1, - anon_sym_LPAREN, - STATE(740), 1, - sym_primary_expression, - STATE(742), 1, + ACTIONS(732), 1, + anon_sym_STAR, + STATE(607), 1, sym_string, - STATE(1050), 1, + STATE(630), 1, + sym_primary_expression, + STATE(1101), 1, sym_expression, - STATE(1320), 1, - sym_with_item, - STATE(1459), 1, - sym_with_clause, - ACTIONS(640), 2, + STATE(1382), 1, + sym_list_splat, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(630), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(642), 4, + ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(626), 5, + ACTIONS(285), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1015), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -36269,7 +34140,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(811), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -36285,7 +34156,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [12644] = 19, + [13117] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -36304,16 +34175,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1090), 1, + STATE(1117), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(997), 2, + ACTIONS(984), 2, anon_sym_COMMA, anon_sym_RBRACK, ACTIONS(301), 3, @@ -36331,7 +34202,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -36339,7 +34210,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -36355,53 +34226,112 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [12733] = 19, + [13206] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(274), 1, + ACTIONS(280), 1, + anon_sym_COMMA, + ACTIONS(287), 1, + anon_sym_COLON_EQ, + ACTIONS(986), 1, sym_identifier, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(293), 1, + ACTIONS(289), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(303), 10, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, anon_sym_LBRACK, - ACTIONS(295), 1, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_SEMI, + ACTIONS(307), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(276), 21, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + anon_sym_is, + [13273] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(299), 1, + ACTIONS(69), 1, anon_sym_not, - ACTIONS(305), 1, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(313), 1, - anon_sym_await, - ACTIONS(315), 1, + ACTIONS(81), 1, sym__string_start, - STATE(600), 1, + ACTIONS(379), 1, + sym_identifier, + ACTIONS(385), 1, + anon_sym_await, + ACTIONS(568), 1, + anon_sym_LPAREN, + ACTIONS(572), 1, + anon_sym_LBRACK, + STATE(683), 1, sym_string, - STATE(630), 1, + STATE(710), 1, sym_primary_expression, - STATE(1091), 1, + STATE(1064), 1, sym_expression, - ACTIONS(309), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(999), 2, - anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(301), 3, + ACTIONS(988), 2, + sym__newline, + anon_sym_SEMI, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(285), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -36409,7 +34339,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -36425,53 +34355,53 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [12822] = 19, + [13362] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(69), 1, - anon_sym_not, - ACTIONS(71), 1, - anon_sym_lambda, - ACTIONS(81), 1, + ACTIONS(315), 1, sym__string_start, - ACTIONS(331), 1, + ACTIONS(602), 1, sym_identifier, - ACTIONS(337), 1, - anon_sym_await, - ACTIONS(559), 1, + ACTIONS(604), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(612), 1, anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(607), 1, sym_string, - STATE(1066), 1, + STATE(621), 1, + sym_primary_expression, + STATE(963), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(1001), 2, - sym__newline, - sym__semicolon, - ACTIONS(47), 3, + STATE(1045), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(606), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -36479,7 +34409,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -36495,7 +34425,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [12911] = 20, + [13451] = 20, ACTIONS(3), 1, sym_comment, ACTIONS(622), 1, @@ -36512,17 +34442,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(646), 1, sym__string_start, - ACTIONS(974), 1, + ACTIONS(970), 1, anon_sym_LPAREN, + STATE(739), 1, + sym_string, STATE(740), 1, sym_primary_expression, - STATE(742), 1, - sym_string, - STATE(1050), 1, + STATE(1026), 1, sym_expression, - STATE(1320), 1, + STATE(1237), 1, sym_with_item, - STATE(1474), 1, + STATE(1466), 1, sym_with_clause, ACTIONS(640), 2, sym_ellipsis, @@ -36542,7 +34472,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1015), 7, + STATE(1053), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -36550,7 +34480,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(811), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -36566,53 +34496,53 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [13002] = 19, + [13542] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(295), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(315), 1, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, sym__string_start, - ACTIONS(602), 1, + ACTIONS(379), 1, sym_identifier, - ACTIONS(604), 1, + ACTIONS(385), 1, + anon_sym_await, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(612), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - ACTIONS(614), 1, - anon_sym_not, - ACTIONS(618), 1, - anon_sym_await, - ACTIONS(758), 1, - anon_sym_lambda, - STATE(600), 1, + STATE(683), 1, sym_string, - STATE(643), 1, + STATE(710), 1, sym_primary_expression, - STATE(962), 1, + STATE(1064), 1, sym_expression, - ACTIONS(309), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - STATE(1013), 2, - sym__expression_within_for_in_clause, - sym_lambda_within_for_in_clause, - ACTIONS(610), 3, + ACTIONS(990), 2, + sym__newline, + anon_sym_SEMI, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(606), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -36620,7 +34550,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -36636,78 +34566,118 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [13091] = 20, + [13631] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(622), 1, - sym_identifier, - ACTIONS(632), 1, + ACTIONS(996), 1, + anon_sym_elif, + STATE(302), 1, + aux_sym_if_statement_repeat1, + STATE(453), 1, + sym_elif_clause, + ACTIONS(994), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LBRACK, - ACTIONS(634), 1, anon_sym_LBRACE, - ACTIONS(636), 1, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(992), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, anon_sym_not, - ACTIONS(638), 1, anon_sym_lambda, - ACTIONS(644), 1, + anon_sym_yield, + sym_integer, + sym_identifier, anon_sym_await, - ACTIONS(646), 1, + sym_true, + sym_false, + sym_none, + [13694] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(999), 12, sym__string_start, - ACTIONS(974), 1, + ts_builtin_sym_end, anon_sym_LPAREN, - STATE(740), 1, - sym_primary_expression, - STATE(742), 1, - sym_string, - STATE(1050), 1, - sym_expression, - STATE(1320), 1, - sym_with_item, - STATE(1451), 1, - sym_with_clause, - ACTIONS(640), 2, - sym_ellipsis, - sym_float, - ACTIONS(630), 3, anon_sym_DASH, anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, anon_sym_TILDE, - ACTIONS(642), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(626), 5, + sym_ellipsis, + sym_float, + ACTIONS(1001), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, anon_sym_exec, anon_sym_type, - STATE(1015), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(811), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [13182] = 20, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [13751] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -36726,19 +34696,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - ACTIONS(896), 1, - anon_sym_COLON, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1047), 1, + STATE(1123), 1, sym_expression, - STATE(1294), 1, - sym_slice, ACTIONS(309), 2, sym_ellipsis, sym_float, + ACTIONS(1003), 2, + anon_sym_COMMA, + anon_sym_RBRACK, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, @@ -36754,7 +34723,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -36762,7 +34731,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -36778,53 +34747,161 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [13273] = 19, + [13840] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(1007), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, anon_sym_LBRACE, - ACTIONS(69), 1, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1005), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, anon_sym_not, - ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(81), 1, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [13897] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1007), 12, sym__string_start, - ACTIONS(331), 1, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1005), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, sym_identifier, - ACTIONS(337), 1, anon_sym_await, - ACTIONS(559), 1, + sym_true, + sym_false, + sym_none, + [13954] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(293), 1, anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(607), 1, sym_string, - STATE(1066), 1, + STATE(630), 1, + sym_primary_expression, + STATE(1122), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(1003), 2, - sym__newline, - sym__semicolon, - ACTIONS(47), 3, + ACTIONS(1009), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(285), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -36832,7 +34909,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -36848,7 +34925,61 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [13362] = 20, + [14043] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1011), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1013), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [14100] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -36867,19 +34998,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - ACTIONS(896), 1, - anon_sym_COLON, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1021), 1, + STATE(1105), 1, sym_expression, - STATE(1220), 1, - sym_slice, ACTIONS(309), 2, sym_ellipsis, sym_float, + ACTIONS(1015), 2, + anon_sym_COMMA, + anon_sym_RBRACK, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, @@ -36895,7 +35025,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -36903,7 +35033,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -36919,13 +35049,11 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [13453] = 20, + [14189] = 20, ACTIONS(3), 1, sym_comment, ACTIONS(622), 1, sym_identifier, - ACTIONS(624), 1, - anon_sym_LPAREN, ACTIONS(632), 1, anon_sym_LBRACK, ACTIONS(634), 1, @@ -36938,16 +35066,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(646), 1, sym__string_start, - ACTIONS(1005), 1, - anon_sym_RPAREN, + ACTIONS(970), 1, + anon_sym_LPAREN, + STATE(739), 1, + sym_string, STATE(740), 1, sym_primary_expression, - STATE(742), 1, - sym_string, - STATE(1050), 1, + STATE(1026), 1, sym_expression, - STATE(1308), 1, + STATE(1237), 1, sym_with_item, + STATE(1458), 1, + sym_with_clause, ACTIONS(640), 2, sym_ellipsis, sym_float, @@ -36966,7 +35096,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1015), 7, + STATE(1053), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -36974,7 +35104,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(811), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -36990,150 +35120,10 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [13544] = 19, + [14280] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, - anon_sym_LBRACE, - ACTIONS(69), 1, - anon_sym_not, - ACTIONS(71), 1, - anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(331), 1, - sym_identifier, - ACTIONS(337), 1, - anon_sym_await, - ACTIONS(559), 1, - anon_sym_LPAREN, - ACTIONS(563), 1, - anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, - sym_string, - STATE(1066), 1, - sym_expression, - ACTIONS(75), 2, - sym_ellipsis, - sym_float, - ACTIONS(1007), 2, - sym__newline, - sym__semicolon, - ACTIONS(47), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(77), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(333), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(1009), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(797), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [13633] = 19, - ACTIONS(3), 1, - sym_comment, - ACTIONS(51), 1, - anon_sym_LBRACE, - ACTIONS(69), 1, - anon_sym_not, - ACTIONS(71), 1, - anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(331), 1, - sym_identifier, - ACTIONS(337), 1, - anon_sym_await, - ACTIONS(559), 1, - anon_sym_LPAREN, - ACTIONS(563), 1, - anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, - sym_string, - STATE(1066), 1, - sym_expression, - ACTIONS(75), 2, - sym_ellipsis, - sym_float, - ACTIONS(1009), 2, - sym__newline, - sym__semicolon, - ACTIONS(47), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(77), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(333), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(1009), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(797), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [13722] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(991), 12, + ACTIONS(976), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -37146,7 +35136,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(989), 37, + ACTIONS(974), 37, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -37184,85 +35174,9 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [13779] = 19, - ACTIONS(3), 1, - sym_comment, - ACTIONS(274), 1, - sym_identifier, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(293), 1, - anon_sym_LBRACK, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(299), 1, - anon_sym_not, - ACTIONS(305), 1, - anon_sym_lambda, - ACTIONS(313), 1, - anon_sym_await, - ACTIONS(315), 1, - sym__string_start, - STATE(600), 1, - sym_string, - STATE(630), 1, - sym_primary_expression, - STATE(1119), 1, - sym_expression, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - ACTIONS(1011), 2, - anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(301), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(311), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(285), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(900), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(642), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [13868] = 6, + [14337] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1013), 1, - anon_sym_elif, - STATE(307), 1, - aux_sym_if_statement_repeat1, - STATE(420), 1, - sym_elif_clause, ACTIONS(978), 12, sym__dedent, sym__string_start, @@ -37276,7 +35190,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(980), 34, + ACTIONS(980), 37, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -37289,13 +35203,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_break, anon_sym_continue, anon_sym_if, + anon_sym_elif, anon_sym_else, anon_sym_async, anon_sym_for, anon_sym_while, anon_sym_try, + anon_sym_finally, anon_sym_with, anon_sym_match, + anon_sym_case, anon_sym_def, anon_sym_global, anon_sym_nonlocal, @@ -37311,12 +35228,18 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [13931] = 3, + [14394] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(1018), 12, - sym__dedent, + ACTIONS(1017), 1, + anon_sym_elif, + STATE(313), 1, + aux_sym_if_statement_repeat1, + STATE(481), 1, + sym_elif_clause, + ACTIONS(994), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -37327,7 +35250,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1016), 37, + ACTIONS(992), 34, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -37340,16 +35263,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_break, anon_sym_continue, anon_sym_if, - anon_sym_elif, anon_sym_else, anon_sym_async, anon_sym_for, anon_sym_while, anon_sym_try, - anon_sym_finally, anon_sym_with, anon_sym_match, - anon_sym_case, anon_sym_def, anon_sym_global, anon_sym_nonlocal, @@ -37365,151 +35285,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [13988] = 19, - ACTIONS(3), 1, - sym_comment, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(602), 1, - sym_identifier, - ACTIONS(604), 1, - anon_sym_LPAREN, - ACTIONS(612), 1, - anon_sym_LBRACK, - ACTIONS(614), 1, - anon_sym_not, - ACTIONS(618), 1, - anon_sym_await, - ACTIONS(758), 1, - anon_sym_lambda, - STATE(600), 1, - sym_string, - STATE(643), 1, - sym_primary_expression, - STATE(963), 1, - sym_expression, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - STATE(1017), 2, - sym__expression_within_for_in_clause, - sym_lambda_within_for_in_clause, - ACTIONS(610), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(311), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(606), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(900), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(642), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [14077] = 20, - ACTIONS(3), 1, - sym_comment, - ACTIONS(274), 1, - sym_identifier, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(293), 1, - anon_sym_LBRACK, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(299), 1, - anon_sym_not, - ACTIONS(305), 1, - anon_sym_lambda, - ACTIONS(313), 1, - anon_sym_await, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(896), 1, - anon_sym_COLON, - STATE(600), 1, - sym_string, - STATE(630), 1, - sym_primary_expression, - STATE(1040), 1, - sym_expression, - STATE(1258), 1, - sym_slice, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - ACTIONS(301), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(311), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(285), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(900), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(642), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [14168] = 3, + [14457] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(985), 12, + ACTIONS(999), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -37522,7 +35301,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(987), 37, + ACTIONS(1001), 37, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -37560,82 +35339,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [14225] = 19, - ACTIONS(3), 1, - sym_comment, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(602), 1, - sym_identifier, - ACTIONS(604), 1, - anon_sym_LPAREN, - ACTIONS(612), 1, - anon_sym_LBRACK, - ACTIONS(614), 1, - anon_sym_not, - ACTIONS(618), 1, - anon_sym_await, - ACTIONS(758), 1, - anon_sym_lambda, - STATE(600), 1, - sym_string, - STATE(643), 1, - sym_primary_expression, - STATE(958), 1, - sym_expression, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - STATE(1033), 2, - sym__expression_within_for_in_clause, - sym_lambda_within_for_in_clause, - ACTIONS(610), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(311), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(606), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(900), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(642), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [14314] = 3, + [14514] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1018), 12, + ACTIONS(1011), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -37646,7 +35355,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1016), 37, + ACTIONS(1013), 37, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -37684,54 +35393,54 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [14371] = 20, + [14571] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(274), 1, + ACTIONS(622), 1, sym_identifier, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(293), 1, + ACTIONS(632), 1, anon_sym_LBRACK, - ACTIONS(295), 1, + ACTIONS(634), 1, anon_sym_LBRACE, - ACTIONS(299), 1, + ACTIONS(636), 1, anon_sym_not, - ACTIONS(305), 1, + ACTIONS(638), 1, anon_sym_lambda, - ACTIONS(313), 1, + ACTIONS(644), 1, anon_sym_await, - ACTIONS(315), 1, + ACTIONS(646), 1, sym__string_start, - ACTIONS(896), 1, - anon_sym_COLON, - STATE(600), 1, + ACTIONS(970), 1, + anon_sym_LPAREN, + STATE(739), 1, sym_string, - STATE(630), 1, + STATE(740), 1, sym_primary_expression, - STATE(1086), 1, + STATE(1026), 1, sym_expression, - STATE(1398), 1, - sym_slice, - ACTIONS(309), 2, + STATE(1237), 1, + sym_with_item, + STATE(1441), 1, + sym_with_clause, + ACTIONS(640), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(630), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 4, + ACTIONS(642), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(285), 5, + ACTIONS(626), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(1053), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -37739,7 +35448,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -37755,12 +35464,65 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [14462] = 3, + [14662] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(970), 12, - sym__dedent, + ACTIONS(828), 16, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(826), 32, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_SEMI, + [14718] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1007), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -37771,7 +35533,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(972), 37, + ACTIONS(1005), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -37784,16 +35546,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_break, anon_sym_continue, anon_sym_if, - anon_sym_elif, anon_sym_else, anon_sym_async, anon_sym_for, anon_sym_while, anon_sym_try, + anon_sym_except, anon_sym_finally, anon_sym_with, anon_sym_match, - anon_sym_case, anon_sym_def, anon_sym_global, anon_sym_nonlocal, @@ -37809,14 +35570,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [14519] = 3, + [14774] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1022), 13, + ACTIONS(976), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, - anon_sym_except_STAR, anon_sym_DASH, anon_sym_PLUS, anon_sym_LBRACK, @@ -37826,7 +35586,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1020), 35, + ACTIONS(974), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -37844,6 +35604,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_while, anon_sym_try, + anon_sym_except, anon_sym_finally, anon_sym_with, anon_sym_match, @@ -37862,10 +35623,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [14575] = 3, + [14830] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1026), 12, + ACTIONS(1007), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -37878,7 +35639,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1024), 36, + ACTIONS(1005), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -37915,14 +35676,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [14631] = 3, + [14886] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1028), 13, + ACTIONS(978), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, - anon_sym_except_STAR, anon_sym_DASH, anon_sym_PLUS, anon_sym_LBRACK, @@ -37932,7 +35692,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1030), 35, + ACTIONS(980), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -37950,6 +35710,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_while, anon_sym_try, + anon_sym_except, anon_sym_finally, anon_sym_with, anon_sym_match, @@ -37968,12 +35729,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [14687] = 3, + [14942] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(991), 12, + ACTIONS(999), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -37984,7 +35745,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(989), 36, + ACTIONS(1001), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -38021,10 +35782,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [14743] = 3, + [14998] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1032), 12, + ACTIONS(1020), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -38037,7 +35798,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1034), 36, + ACTIONS(1022), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -38074,7 +35835,7 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [14799] = 19, + [15054] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -38093,13 +35854,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1022), 1, + STATE(1051), 1, sym_expression, - STATE(1483), 1, + STATE(1443), 1, sym_type, ACTIONS(309), 2, sym_ellipsis, @@ -38119,7 +35880,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -38127,7 +35888,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -38143,222 +35904,16 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [14887] = 19, + [15142] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(274), 1, - sym_identifier, - ACTIONS(278), 1, + ACTIONS(976), 13, + sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, - ACTIONS(293), 1, - anon_sym_LBRACK, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(299), 1, - anon_sym_not, - ACTIONS(305), 1, - anon_sym_lambda, - ACTIONS(313), 1, - anon_sym_await, - ACTIONS(315), 1, - sym__string_start, - STATE(600), 1, - sym_string, - STATE(630), 1, - sym_primary_expression, - STATE(1022), 1, - sym_expression, - STATE(1482), 1, - sym_type, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - ACTIONS(301), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(311), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(285), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(900), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(642), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [14975] = 19, - ACTIONS(3), 1, - sym_comment, - ACTIONS(274), 1, - sym_identifier, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(293), 1, - anon_sym_LBRACK, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(299), 1, - anon_sym_not, - ACTIONS(305), 1, - anon_sym_lambda, - ACTIONS(313), 1, - anon_sym_await, - ACTIONS(315), 1, - sym__string_start, - STATE(600), 1, - sym_string, - STATE(630), 1, - sym_primary_expression, - STATE(1022), 1, - sym_expression, - STATE(1480), 1, - sym_type, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - ACTIONS(301), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(311), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(285), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(900), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(642), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [15063] = 19, - ACTIONS(3), 1, - sym_comment, - ACTIONS(274), 1, - sym_identifier, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(293), 1, - anon_sym_LBRACK, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(299), 1, - anon_sym_not, - ACTIONS(305), 1, - anon_sym_lambda, - ACTIONS(313), 1, - anon_sym_await, - ACTIONS(315), 1, - sym__string_start, - STATE(600), 1, - sym_string, - STATE(630), 1, - sym_primary_expression, - STATE(1022), 1, - sym_expression, - STATE(1478), 1, - sym_type, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - ACTIONS(301), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(311), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(285), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(900), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(642), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [15151] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1036), 12, - sym__string_start, - ts_builtin_sym_end, - anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_STAR_STAR, @@ -38366,7 +35921,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1038), 36, + ACTIONS(974), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -38384,7 +35939,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_while, anon_sym_try, - anon_sym_except, anon_sym_finally, anon_sym_with, anon_sym_match, @@ -38403,12 +35957,17 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [15207] = 3, + [15198] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(966), 12, + ACTIONS(1028), 1, + anon_sym_case, + STATE(326), 2, + sym_case_block, + aux_sym_cases_repeat1, + ACTIONS(1026), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -38419,7 +35978,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(968), 36, + ACTIONS(1024), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -38432,13 +35991,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_break, anon_sym_continue, anon_sym_if, - anon_sym_else, anon_sym_async, anon_sym_for, anon_sym_while, anon_sym_try, - anon_sym_except, - anon_sym_finally, anon_sym_with, anon_sym_match, anon_sym_def, @@ -38456,10 +36012,226 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [15263] = 3, + [15258] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(832), 16, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(830), 32, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_SEMI, + [15314] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1038), 1, + anon_sym_COLON_EQ, + ACTIONS(1040), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(1033), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1042), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(1031), 14, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + ACTIONS(1036), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + [15378] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(824), 16, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(822), 32, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_SEMI, + [15434] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(832), 16, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(830), 32, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_SEMI, + [15490] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1022), 13, + ACTIONS(978), 13, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -38473,7 +36245,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1020), 35, + ACTIONS(980), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -38509,13 +36281,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [15319] = 3, + [15546] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1040), 12, + ACTIONS(1046), 13, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, + anon_sym_except_STAR, anon_sym_DASH, anon_sym_PLUS, anon_sym_LBRACK, @@ -38525,7 +36298,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1042), 36, + ACTIONS(1044), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -38543,7 +36316,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_while, anon_sym_try, - anon_sym_except, anon_sym_finally, anon_sym_with, anon_sym_match, @@ -38562,10 +36334,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [15375] = 3, + [15602] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1044), 13, + ACTIONS(1011), 13, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -38579,7 +36351,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1046), 35, + ACTIONS(1013), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -38615,37 +36387,17 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [15431] = 7, + [15658] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1050), 1, - anon_sym_COMMA, - ACTIONS(1055), 1, - anon_sym_COLON_EQ, - ACTIONS(1057), 2, - anon_sym_COLON, - anon_sym_EQ, - ACTIONS(1059), 13, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - ACTIONS(1053), 15, + ACTIONS(836), 16, anon_sym_STAR, anon_sym_GT_GT, anon_sym_PIPE, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, + anon_sym_EQ, anon_sym_AT, anon_sym_SLASH, anon_sym_PERCENT, @@ -38655,11 +36407,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT, anon_sym_LT, anon_sym_GT, - ACTIONS(1048), 16, + ACTIONS(834), 32, sym__newline, anon_sym_DOT, + anon_sym_from, anon_sym_LPAREN, + anon_sym_COMMA, anon_sym_if, + anon_sym_COLON, anon_sym_in, anon_sym_LBRACK, anon_sym_not, @@ -38671,15 +36426,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [15495] = 3, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_SEMI, + [15714] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1061), 13, + ACTIONS(976), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, - anon_sym_except_STAR, anon_sym_DASH, anon_sym_PLUS, anon_sym_LBRACK, @@ -38689,7 +36456,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1063), 35, + ACTIONS(974), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -38707,6 +36474,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_while, anon_sym_try, + anon_sym_except, anon_sym_finally, anon_sym_with, anon_sym_match, @@ -38725,13 +36493,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [15551] = 3, + [15770] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1026), 12, + ACTIONS(1007), 13, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, + anon_sym_except_STAR, anon_sym_DASH, anon_sym_PLUS, anon_sym_LBRACK, @@ -38741,7 +36510,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1024), 36, + ACTIONS(1005), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -38759,7 +36528,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_while, anon_sym_try, - anon_sym_except, anon_sym_finally, anon_sym_with, anon_sym_match, @@ -38778,10 +36546,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [15607] = 3, + [15826] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1065), 12, + ACTIONS(978), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -38794,7 +36562,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1067), 36, + ACTIONS(980), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -38831,359 +36599,67 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [15663] = 7, + [15882] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(280), 1, - anon_sym_COMMA, - ACTIONS(287), 1, - anon_sym_COLON_EQ, - ACTIONS(289), 2, - anon_sym_COLON, - anon_sym_EQ, - ACTIONS(307), 13, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - ACTIONS(276), 15, - anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_PIPE, + ACTIONS(1011), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, anon_sym_STAR_STAR, anon_sym_AT, - anon_sym_SLASH, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT, - anon_sym_GT, - ACTIONS(303), 16, - sym__newline, - anon_sym_DOT, - anon_sym_LPAREN, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1013), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, anon_sym_if, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - sym__semicolon, - [15727] = 19, - ACTIONS(3), 1, - sym_comment, - ACTIONS(622), 1, - sym_identifier, - ACTIONS(624), 1, - anon_sym_LPAREN, - ACTIONS(632), 1, - anon_sym_LBRACK, - ACTIONS(634), 1, - anon_sym_LBRACE, - ACTIONS(636), 1, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, anon_sym_not, - ACTIONS(638), 1, anon_sym_lambda, - ACTIONS(644), 1, - anon_sym_await, - ACTIONS(646), 1, - sym__string_start, - ACTIONS(1069), 1, - anon_sym_COLON, - STATE(740), 1, - sym_primary_expression, - STATE(742), 1, - sym_string, - STATE(1063), 1, - sym_expression, - ACTIONS(640), 2, - sym_ellipsis, - sym_float, - ACTIONS(630), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(642), 4, + anon_sym_yield, sym_integer, + sym_identifier, + anon_sym_await, sym_true, sym_false, sym_none, - ACTIONS(626), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(1015), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(811), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [15815] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(824), 16, - anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_EQ, - anon_sym_AT, - anon_sym_SLASH, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT, - anon_sym_GT, - ACTIONS(822), 32, - sym__newline, - anon_sym_DOT, - anon_sym_from, - anon_sym_LPAREN, - anon_sym_COMMA, - anon_sym_if, - anon_sym_COLON, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - sym__semicolon, - [15871] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(824), 16, - anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_EQ, - anon_sym_AT, - anon_sym_SLASH, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT, - anon_sym_GT, - ACTIONS(822), 32, - sym__newline, - anon_sym_DOT, - anon_sym_from, - anon_sym_LPAREN, - anon_sym_COMMA, - anon_sym_if, - anon_sym_COLON, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - sym__semicolon, - [15927] = 7, - ACTIONS(3), 1, - sym_comment, - ACTIONS(568), 1, - anon_sym_COLON_EQ, - ACTIONS(570), 2, - anon_sym_COLON, - anon_sym_EQ, - ACTIONS(565), 3, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(572), 13, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - ACTIONS(303), 14, - anon_sym_DOT, - anon_sym_LPAREN, - anon_sym_if, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - ACTIONS(276), 15, - anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_SLASH, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT, - anon_sym_GT, - [15991] = 7, + [15938] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1074), 1, - anon_sym_COLON_EQ, - ACTIONS(1076), 2, - anon_sym_COLON, - anon_sym_EQ, - ACTIONS(1071), 3, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(1078), 13, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - ACTIONS(1048), 14, - anon_sym_DOT, - anon_sym_LPAREN, - anon_sym_if, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - ACTIONS(1053), 15, - anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_SLASH, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT, - anon_sym_GT, - [16055] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1080), 12, + ACTIONS(999), 13, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, + anon_sym_except_STAR, anon_sym_DASH, anon_sym_PLUS, anon_sym_LBRACK, @@ -39193,7 +36669,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1082), 36, + ACTIONS(1001), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -39211,7 +36687,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_while, anon_sym_try, - anon_sym_except, anon_sym_finally, anon_sym_with, anon_sym_match, @@ -39230,246 +36705,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [16111] = 19, - ACTIONS(3), 1, - sym_comment, - ACTIONS(274), 1, - sym_identifier, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(293), 1, - anon_sym_LBRACK, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(299), 1, - anon_sym_not, - ACTIONS(305), 1, - anon_sym_lambda, - ACTIONS(313), 1, - anon_sym_await, - ACTIONS(315), 1, - sym__string_start, - STATE(600), 1, - sym_string, - STATE(630), 1, - sym_primary_expression, - STATE(1022), 1, - sym_expression, - STATE(1485), 1, - sym_type, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - ACTIONS(301), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(311), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(285), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(900), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(642), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [16199] = 3, + [15994] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(832), 16, - anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_EQ, - anon_sym_AT, - anon_sym_SLASH, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT, - anon_sym_GT, - ACTIONS(830), 32, - sym__newline, - anon_sym_DOT, - anon_sym_from, - anon_sym_LPAREN, - anon_sym_COMMA, - anon_sym_if, - anon_sym_COLON, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - sym__semicolon, - [16255] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(832), 16, - anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_EQ, - anon_sym_AT, - anon_sym_SLASH, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT, - anon_sym_GT, - ACTIONS(830), 32, - sym__newline, - anon_sym_DOT, - anon_sym_from, - anon_sym_LPAREN, - anon_sym_COMMA, - anon_sym_if, - anon_sym_COLON, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - sym__semicolon, - [16311] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(836), 16, - anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_EQ, - anon_sym_AT, - anon_sym_SLASH, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT, - anon_sym_GT, - ACTIONS(834), 32, - sym__newline, - anon_sym_DOT, - anon_sym_from, - anon_sym_LPAREN, - anon_sym_COMMA, - anon_sym_if, - anon_sym_COLON, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - sym__semicolon, - [16367] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1088), 1, - anon_sym_case, - STATE(349), 2, - sym_case_block, - aux_sym_cases_repeat1, - ACTIONS(1086), 12, + ACTIONS(978), 13, sym__dedent, sym__string_start, anon_sym_LPAREN, + anon_sym_except_STAR, anon_sym_DASH, anon_sym_PLUS, anon_sym_LBRACK, @@ -39479,7 +36722,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1084), 33, + ACTIONS(980), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -39492,10 +36735,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_break, anon_sym_continue, anon_sym_if, + anon_sym_else, anon_sym_async, anon_sym_for, anon_sym_while, anon_sym_try, + anon_sym_finally, anon_sym_with, anon_sym_match, anon_sym_def, @@ -39513,84 +36758,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [16427] = 19, - ACTIONS(3), 1, - sym_comment, - ACTIONS(274), 1, - sym_identifier, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(293), 1, - anon_sym_LBRACK, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(299), 1, - anon_sym_not, - ACTIONS(305), 1, - anon_sym_lambda, - ACTIONS(313), 1, - anon_sym_await, - ACTIONS(315), 1, - sym__string_start, - STATE(600), 1, - sym_string, - STATE(630), 1, - sym_primary_expression, - STATE(1022), 1, - sym_expression, - STATE(1428), 1, - sym_type, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - ACTIONS(301), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(311), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(285), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(900), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(642), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [16515] = 5, + [16050] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1094), 1, - anon_sym_case, - STATE(347), 2, - sym_case_block, - aux_sym_cases_repeat1, - ACTIONS(1090), 12, + ACTIONS(999), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -39603,7 +36774,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1092), 33, + ACTIONS(1001), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -39616,10 +36787,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_break, anon_sym_continue, anon_sym_if, + anon_sym_else, anon_sym_async, anon_sym_for, anon_sym_while, anon_sym_try, + anon_sym_except, + anon_sym_finally, anon_sym_with, anon_sym_match, anon_sym_def, @@ -39637,87 +36811,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [16575] = 19, + [16106] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, - anon_sym_LBRACE, - ACTIONS(69), 1, - anon_sym_not, - ACTIONS(71), 1, - anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(331), 1, - sym_identifier, - ACTIONS(337), 1, - anon_sym_await, - ACTIONS(559), 1, - anon_sym_LPAREN, - ACTIONS(563), 1, - anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, - sym_string, - STATE(1082), 1, - sym_expression, - STATE(1263), 1, - sym_type, - ACTIONS(75), 2, - sym_ellipsis, - sym_float, - ACTIONS(47), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(77), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(333), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(1009), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(797), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [16663] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1097), 1, - anon_sym_case, - STATE(349), 2, - sym_case_block, - aux_sym_cases_repeat1, - ACTIONS(1090), 12, + ACTIONS(1007), 13, sym__dedent, sym__string_start, anon_sym_LPAREN, + anon_sym_except_STAR, anon_sym_DASH, anon_sym_PLUS, anon_sym_LBRACK, @@ -39727,7 +36828,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1092), 33, + ACTIONS(1005), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -39740,10 +36841,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_break, anon_sym_continue, anon_sym_if, + anon_sym_else, anon_sym_async, anon_sym_for, anon_sym_while, anon_sym_try, + anon_sym_finally, anon_sym_with, anon_sym_match, anon_sym_def, @@ -39761,7 +36864,7 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [16723] = 19, + [16162] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -39780,13 +36883,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1022), 1, + STATE(1051), 1, sym_expression, - STATE(1505), 1, + STATE(1487), 1, sym_type, ACTIONS(309), 2, sym_ellipsis, @@ -39806,7 +36909,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -39814,7 +36917,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -39830,52 +36933,52 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [16811] = 19, + [16250] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(622), 1, + ACTIONS(274), 1, sym_identifier, - ACTIONS(624), 1, + ACTIONS(278), 1, anon_sym_LPAREN, - ACTIONS(632), 1, + ACTIONS(293), 1, anon_sym_LBRACK, - ACTIONS(634), 1, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(636), 1, + ACTIONS(299), 1, anon_sym_not, - ACTIONS(638), 1, + ACTIONS(305), 1, anon_sym_lambda, - ACTIONS(644), 1, + ACTIONS(313), 1, anon_sym_await, - ACTIONS(646), 1, + ACTIONS(315), 1, sym__string_start, - STATE(740), 1, - sym_primary_expression, - STATE(742), 1, + STATE(607), 1, sym_string, - STATE(1050), 1, + STATE(630), 1, + sym_primary_expression, + STATE(1051), 1, sym_expression, - STATE(1308), 1, - sym_with_item, - ACTIONS(640), 2, + STATE(1434), 1, + sym_type, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(630), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(642), 4, + ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(626), 5, + ACTIONS(285), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1015), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -39883,7 +36986,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(811), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -39899,226 +37002,82 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [16899] = 3, + [16338] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(828), 16, - anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_EQ, - anon_sym_AT, - anon_sym_SLASH, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT, - anon_sym_GT, - ACTIONS(826), 32, - sym__newline, - anon_sym_DOT, - anon_sym_from, - anon_sym_LPAREN, - anon_sym_COMMA, - anon_sym_if, - anon_sym_COLON, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - sym__semicolon, - [16955] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1080), 12, - sym__dedent, - sym__string_start, - anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, + ACTIONS(51), 1, anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(1082), 36, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, - anon_sym_else, - anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_except, - anon_sym_finally, - anon_sym_with, - anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, + ACTIONS(69), 1, anon_sym_not, + ACTIONS(71), 1, anon_sym_lambda, - anon_sym_yield, - sym_integer, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(379), 1, sym_identifier, + ACTIONS(385), 1, anon_sym_await, - sym_true, - sym_false, - sym_none, - [17011] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(991), 13, - sym__dedent, - sym__string_start, + ACTIONS(568), 1, anon_sym_LPAREN, - anon_sym_except_STAR, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(572), 1, anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, + STATE(683), 1, + sym_string, + STATE(710), 1, + sym_primary_expression, + STATE(1069), 1, + sym_expression, + STATE(1217), 1, + sym_type, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(989), 35, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, - anon_sym_else, - anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_finally, - anon_sym_with, - anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, - anon_sym_not, - anon_sym_lambda, - anon_sym_yield, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, sym_integer, - sym_identifier, - anon_sym_await, sym_true, sym_false, sym_none, - [17067] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(970), 13, - sym__dedent, - sym__string_start, - anon_sym_LPAREN, - anon_sym_except_STAR, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(972), 35, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, + ACTIONS(381), 5, anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, - anon_sym_else, anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_finally, - anon_sym_with, anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, anon_sym_exec, anon_sym_type, - anon_sym_class, - anon_sym_not, - anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [17123] = 3, + STATE(974), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(795), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [16426] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(966), 13, - sym__dedent, + ACTIONS(1011), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, - anon_sym_except_STAR, anon_sym_DASH, anon_sym_PLUS, anon_sym_LBRACK, @@ -40128,7 +37087,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(968), 35, + ACTIONS(1013), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -40146,6 +37105,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_while, anon_sym_try, + anon_sym_except, anon_sym_finally, anon_sym_with, anon_sym_match, @@ -40164,10 +37124,79 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [17179] = 3, + [16482] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(607), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1051), 1, + sym_expression, + STATE(1489), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(905), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(622), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [16570] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1065), 12, + ACTIONS(1020), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -40180,7 +37209,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1067), 36, + ACTIONS(1022), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -40217,10 +37246,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [17235] = 3, + [16626] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1018), 13, + ACTIONS(976), 13, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -40234,7 +37263,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1016), 35, + ACTIONS(974), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -40270,12 +37299,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [17291] = 3, + [16682] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(991), 13, + ACTIONS(1011), 13, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_except_STAR, anon_sym_DASH, @@ -40287,7 +37316,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(989), 35, + ACTIONS(1013), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -40323,10 +37352,68 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [17347] = 3, + [16738] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(828), 16, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(826), 32, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_SEMI, + [16794] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1018), 12, + ACTIONS(1052), 1, + anon_sym_case, + STATE(326), 2, + sym_case_block, + aux_sym_cases_repeat1, + ACTIONS(1050), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -40339,7 +37426,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1016), 36, + ACTIONS(1048), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -40352,13 +37439,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_break, anon_sym_continue, anon_sym_if, - anon_sym_else, anon_sym_async, anon_sym_for, anon_sym_while, anon_sym_try, - anon_sym_except, - anon_sym_finally, anon_sym_with, anon_sym_match, anon_sym_def, @@ -40376,7 +37460,7 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [17403] = 19, + [16854] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -40395,13 +37479,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1022), 1, + STATE(1051), 1, sym_expression, - STATE(1133), 1, + STATE(1310), 1, sym_type, ACTIONS(309), 2, sym_ellipsis, @@ -40421,7 +37505,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -40429,7 +37513,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -40445,14 +37529,18 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [17491] = 3, + [16942] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1018), 13, + ACTIONS(1054), 1, + anon_sym_case, + STATE(354), 2, + sym_case_block, + aux_sym_cases_repeat1, + ACTIONS(1026), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, - anon_sym_except_STAR, anon_sym_DASH, anon_sym_PLUS, anon_sym_LBRACK, @@ -40462,7 +37550,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1016), 35, + ACTIONS(1024), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -40475,12 +37563,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_break, anon_sym_continue, anon_sym_if, - anon_sym_else, anon_sym_async, anon_sym_for, anon_sym_while, anon_sym_try, - anon_sym_finally, anon_sym_with, anon_sym_match, anon_sym_def, @@ -40498,14 +37584,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [17547] = 3, + [17002] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1044), 13, + ACTIONS(1059), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, - anon_sym_except_STAR, anon_sym_DASH, anon_sym_PLUS, anon_sym_LBRACK, @@ -40515,7 +37600,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1046), 35, + ACTIONS(1057), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -40533,6 +37618,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_while, anon_sym_try, + anon_sym_except, anon_sym_finally, anon_sym_with, anon_sym_match, @@ -40551,86 +37637,54 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [17603] = 19, + [17058] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(274), 1, - sym_identifier, - ACTIONS(278), 1, + ACTIONS(562), 1, + anon_sym_COLON_EQ, + ACTIONS(564), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(559), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(566), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(303), 14, + anon_sym_DOT, anon_sym_LPAREN, - ACTIONS(293), 1, + anon_sym_if, + anon_sym_in, anon_sym_LBRACK, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(299), 1, anon_sym_not, - ACTIONS(305), 1, - anon_sym_lambda, - ACTIONS(313), 1, - anon_sym_await, - ACTIONS(315), 1, - sym__string_start, - STATE(600), 1, - sym_string, - STATE(630), 1, - sym_primary_expression, - STATE(1022), 1, - sym_expression, - STATE(1270), 1, - sym_type, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - ACTIONS(301), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(311), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(285), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(900), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(642), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [17691] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(840), 16, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + ACTIONS(276), 15, anon_sym_STAR, anon_sym_GT_GT, anon_sym_PIPE, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_EQ, anon_sym_AT, anon_sym_SLASH, anon_sym_PERCENT, @@ -40640,46 +37694,67 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT, anon_sym_LT, anon_sym_GT, - ACTIONS(838), 32, - sym__newline, - anon_sym_DOT, - anon_sym_from, + [17122] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1063), 12, + sym__dedent, + sym__string_start, anon_sym_LPAREN, - anon_sym_COMMA, - anon_sym_if, - anon_sym_COLON, - anon_sym_in, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1061), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - sym__semicolon, - [17747] = 3, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17178] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1040), 12, + ACTIONS(1067), 13, sym__dedent, sym__string_start, anon_sym_LPAREN, + anon_sym_except_STAR, anon_sym_DASH, anon_sym_PLUS, anon_sym_LBRACK, @@ -40689,7 +37764,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1042), 36, + ACTIONS(1065), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -40707,7 +37782,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_while, anon_sym_try, - anon_sym_except, anon_sym_finally, anon_sym_with, anon_sym_match, @@ -40726,14 +37800,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [17803] = 3, + [17234] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(985), 13, + ACTIONS(1059), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, - anon_sym_except_STAR, anon_sym_DASH, anon_sym_PLUS, anon_sym_LBRACK, @@ -40743,7 +37816,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(987), 35, + ACTIONS(1057), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -40761,6 +37834,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_while, anon_sym_try, + anon_sym_except, anon_sym_finally, anon_sym_with, anon_sym_match, @@ -40779,7 +37853,7 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [17859] = 19, + [17290] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -40798,13 +37872,151 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1022), 1, + STATE(1051), 1, sym_expression, - STATE(1491), 1, + STATE(1192), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(905), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(622), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [17378] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(607), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1051), 1, + sym_expression, + STATE(1436), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(905), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(622), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [17466] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(607), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1051), 1, + sym_expression, + STATE(1485), 1, sym_type, ACTIONS(309), 2, sym_ellipsis, @@ -40824,7 +38036,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -40832,7 +38044,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -40848,10 +38060,10 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [17947] = 3, + [17554] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1018), 12, + ACTIONS(1063), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -40864,7 +38076,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1016), 36, + ACTIONS(1061), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -40901,13 +38113,83 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [18003] = 3, + [17610] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(607), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1051), 1, + sym_expression, + STATE(1490), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(905), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(622), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [17698] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(966), 12, - sym__dedent, + ACTIONS(1067), 13, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, + anon_sym_except_STAR, anon_sym_DASH, anon_sym_PLUS, anon_sym_LBRACK, @@ -40917,7 +38199,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(968), 36, + ACTIONS(1065), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -40935,7 +38217,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_while, anon_sym_try, - anon_sym_except, anon_sym_finally, anon_sym_with, anon_sym_match, @@ -40954,14 +38235,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [18059] = 3, + [17754] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(970), 13, + ACTIONS(1071), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, - anon_sym_except_STAR, anon_sym_DASH, anon_sym_PLUS, anon_sym_LBRACK, @@ -40971,7 +38251,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(972), 35, + ACTIONS(1069), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -40989,6 +38269,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_while, anon_sym_try, + anon_sym_except, anon_sym_finally, anon_sym_with, anon_sym_match, @@ -41007,10 +38288,67 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [18115] = 3, + [17810] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1073), 1, + anon_sym_COMMA, + ACTIONS(1076), 1, + anon_sym_COLON_EQ, + ACTIONS(1078), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(1080), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(1036), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1031), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_SEMI, + [17874] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1028), 13, + ACTIONS(1084), 13, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -41024,7 +38362,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1030), 35, + ACTIONS(1082), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -41060,12 +38398,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [18171] = 3, + [17930] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1032), 12, - sym__dedent, + ACTIONS(1071), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -41076,7 +38414,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1034), 36, + ACTIONS(1069), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -41113,12 +38451,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [18227] = 3, + [17986] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(985), 13, - sym__dedent, + ACTIONS(1084), 13, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_except_STAR, anon_sym_DASH, @@ -41130,7 +38468,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(987), 35, + ACTIONS(1082), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -41166,10 +38504,63 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [18283] = 3, + [18042] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(840), 16, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(838), 32, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_SEMI, + [18098] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(985), 12, + ACTIONS(1086), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -41182,7 +38573,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(987), 36, + ACTIONS(1088), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -41219,10 +38610,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [18339] = 3, + [18154] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(966), 13, + ACTIONS(1046), 13, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -41236,7 +38627,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(968), 35, + ACTIONS(1044), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -41272,10 +38663,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [18395] = 3, + [18210] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1036), 12, + ACTIONS(1086), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -41288,7 +38679,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1038), 36, + ACTIONS(1088), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -41325,13 +38716,83 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [18451] = 3, + [18266] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(985), 12, - sym__dedent, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(739), 1, + sym_string, + STATE(740), 1, + sym_primary_expression, + STATE(1026), 1, + sym_expression, + STATE(1232), 1, + sym_with_item, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1053), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(813), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [18354] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(999), 13, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, + anon_sym_except_STAR, anon_sym_DASH, anon_sym_PLUS, anon_sym_LBRACK, @@ -41341,7 +38802,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(987), 36, + ACTIONS(1001), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -41359,7 +38820,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_while, anon_sym_try, - anon_sym_except, anon_sym_finally, anon_sym_with, anon_sym_match, @@ -41378,12 +38838,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [18507] = 3, + [18410] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(970), 12, - sym__dedent, + ACTIONS(1090), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -41394,7 +38854,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(972), 36, + ACTIONS(1092), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -41431,17 +38891,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [18563] = 5, + [18466] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1100), 1, - anon_sym_case, - STATE(347), 2, - sym_case_block, - aux_sym_cases_repeat1, - ACTIONS(1086), 12, + ACTIONS(1090), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -41452,7 +38907,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1084), 33, + ACTIONS(1092), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -41465,10 +38920,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_break, anon_sym_continue, anon_sym_if, + anon_sym_else, anon_sym_async, anon_sym_for, anon_sym_while, anon_sym_try, + anon_sym_except, + anon_sym_finally, anon_sym_with, anon_sym_match, anon_sym_def, @@ -41486,13 +38944,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [18623] = 3, + [18522] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(991), 12, + ACTIONS(1096), 13, sym__dedent, sym__string_start, anon_sym_LPAREN, + anon_sym_except_STAR, anon_sym_DASH, anon_sym_PLUS, anon_sym_LBRACK, @@ -41502,7 +38961,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(989), 36, + ACTIONS(1094), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -41520,7 +38979,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_while, anon_sym_try, - anon_sym_except, anon_sym_finally, anon_sym_with, anon_sym_match, @@ -41539,13 +38997,152 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [18679] = 3, + [18578] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(607), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1051), 1, + sym_expression, + STATE(1442), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(905), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(622), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [18666] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1098), 1, + anon_sym_COLON, + STATE(739), 1, + sym_string, + STATE(740), 1, + sym_primary_expression, + STATE(1082), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1053), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(813), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [18754] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(970), 12, + ACTIONS(1096), 13, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, + anon_sym_except_STAR, anon_sym_DASH, anon_sym_PLUS, anon_sym_LBRACK, @@ -41555,7 +39152,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(972), 36, + ACTIONS(1094), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -41573,7 +39170,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_while, anon_sym_try, - anon_sym_except, anon_sym_finally, anon_sym_with, anon_sym_match, @@ -41592,7 +39188,7 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [18735] = 19, + [18810] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(622), 1, @@ -41611,13 +39207,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(646), 1, sym__string_start, - ACTIONS(1102), 1, + ACTIONS(1100), 1, anon_sym_COLON, + STATE(739), 1, + sym_string, STATE(740), 1, sym_primary_expression, - STATE(742), 1, - sym_string, - STATE(1081), 1, + STATE(1061), 1, sym_expression, ACTIONS(640), 2, sym_ellipsis, @@ -41637,7 +39233,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1015), 7, + STATE(1053), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -41645,7 +39241,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(811), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -41661,14 +39257,18 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [18823] = 3, + [18898] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1061), 13, - sym__dedent, + ACTIONS(1102), 1, + anon_sym_case, + STATE(354), 2, + sym_case_block, + aux_sym_cases_repeat1, + ACTIONS(1050), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, - anon_sym_except_STAR, anon_sym_DASH, anon_sym_PLUS, anon_sym_LBRACK, @@ -41678,7 +39278,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1063), 35, + ACTIONS(1048), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -41691,12 +39291,121 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_break, anon_sym_continue, anon_sym_if, - anon_sym_else, anon_sym_async, anon_sym_for, anon_sym_while, anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18958] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(280), 1, + anon_sym_COMMA, + ACTIONS(287), 1, + anon_sym_COLON_EQ, + ACTIONS(289), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(307), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(276), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_SEMI, + [19022] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(850), 1, anon_sym_finally, + STATE(501), 1, + sym_finally_clause, + ACTIONS(1106), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1104), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, anon_sym_with, anon_sym_match, anon_sym_def, @@ -41714,7 +39423,74 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [18879] = 18, + [19081] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(607), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(922), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(905), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(622), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [19166] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -41725,19 +39501,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(331), 1, + ACTIONS(379), 1, sym_identifier, - ACTIONS(337), 1, + ACTIONS(385), 1, anon_sym_await, - ACTIONS(559), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + STATE(683), 1, sym_string, - STATE(980), 1, + STATE(710), 1, + sym_primary_expression, + STATE(1040), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, @@ -41751,13 +39527,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -41765,7 +39541,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -41781,7 +39557,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [18964] = 18, + [19251] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -41800,11 +39576,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1186), 1, + STATE(1144), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -41824,7 +39600,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -41832,7 +39608,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -41848,113 +39624,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [19049] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(846), 1, - anon_sym_else, - STATE(545), 1, - sym_else_clause, - ACTIONS(1104), 12, - sym__string_start, - ts_builtin_sym_end, - anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(1106), 33, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, - anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_with, - anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, - anon_sym_not, - anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [19108] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1108), 12, - sym__string_start, - ts_builtin_sym_end, - anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(1110), 35, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, - anon_sym_elif, - anon_sym_else, - anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_with, - anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, - anon_sym_not, - anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [19163] = 18, + [19336] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -41973,11 +39643,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(919), 1, + STATE(1155), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -41997,7 +39667,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -42005,7 +39675,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42021,7 +39691,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [19248] = 18, + [19421] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, @@ -42040,11 +39710,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(618), 1, anon_sym_await, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(621), 1, sym_primary_expression, - STATE(994), 1, + STATE(918), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -42064,7 +39734,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -42072,7 +39742,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42088,50 +39758,105 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [19333] = 18, + [19506] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(602), 1, + ACTIONS(1040), 1, + anon_sym_EQ, + ACTIONS(1033), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1031), 14, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + ACTIONS(1042), 14, + anon_sym_COLON, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(1036), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + [19567] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, sym_identifier, - ACTIONS(604), 1, + ACTIONS(624), 1, anon_sym_LPAREN, - ACTIONS(612), 1, + ACTIONS(632), 1, anon_sym_LBRACK, - ACTIONS(614), 1, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, anon_sym_not, - ACTIONS(616), 1, + ACTIONS(638), 1, anon_sym_lambda, - ACTIONS(618), 1, + ACTIONS(644), 1, anon_sym_await, - STATE(600), 1, + ACTIONS(646), 1, + sym__string_start, + STATE(739), 1, sym_string, - STATE(643), 1, + STATE(740), 1, sym_primary_expression, - STATE(904), 1, + STATE(1107), 1, sym_expression, - ACTIONS(309), 2, + ACTIONS(640), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(630), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 4, + ACTIONS(642), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(606), 5, + ACTIONS(626), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(1053), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -42139,7 +39864,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42155,50 +39880,50 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [19418] = 18, + [19652] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(622), 1, + ACTIONS(274), 1, sym_identifier, - ACTIONS(624), 1, + ACTIONS(278), 1, anon_sym_LPAREN, - ACTIONS(632), 1, + ACTIONS(293), 1, anon_sym_LBRACK, - ACTIONS(634), 1, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(636), 1, + ACTIONS(299), 1, anon_sym_not, - ACTIONS(638), 1, + ACTIONS(305), 1, anon_sym_lambda, - ACTIONS(644), 1, + ACTIONS(313), 1, anon_sym_await, - ACTIONS(646), 1, + ACTIONS(315), 1, sym__string_start, - STATE(740), 1, - sym_primary_expression, - STATE(742), 1, + STATE(607), 1, sym_string, - STATE(1028), 1, + STATE(630), 1, + sym_primary_expression, + STATE(1150), 1, sym_expression, - ACTIONS(640), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(630), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(642), 4, + ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(626), 5, + ACTIONS(285), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1015), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -42206,7 +39931,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(811), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42222,53 +39947,104 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [19503] = 19, + [19737] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(278), 1, + ACTIONS(862), 1, + anon_sym_finally, + STATE(555), 1, + sym_finally_clause, + ACTIONS(1108), 12, + sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, - ACTIONS(293), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LBRACK, - ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(299), 1, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1110), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, anon_sym_not, - ACTIONS(305), 1, anon_sym_lambda, - ACTIONS(315), 1, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [19796] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, sym__string_start, - ACTIONS(1112), 1, + ACTIONS(379), 1, sym_identifier, - ACTIONS(1116), 1, + ACTIONS(385), 1, anon_sym_await, - STATE(600), 1, + ACTIONS(568), 1, + anon_sym_LPAREN, + ACTIONS(572), 1, + anon_sym_LBRACK, + STATE(683), 1, sym_string, - STATE(630), 1, + STATE(710), 1, sym_primary_expression, - STATE(948), 1, + STATE(1078), 1, sym_expression, - ACTIONS(309), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - STATE(449), 2, - sym_attribute, - sym_subscript, - ACTIONS(301), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(1114), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -42276,9 +40052,11 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 13, + STATE(795), 15, sym_binary_operator, sym_unary_operator, + sym_attribute, + sym_subscript, sym_call, sym_list, sym_set, @@ -42290,7 +40068,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [19590] = 18, + [19881] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -42301,19 +40079,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(331), 1, + ACTIONS(379), 1, sym_identifier, - ACTIONS(337), 1, + ACTIONS(385), 1, anon_sym_await, - ACTIONS(559), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + STATE(683), 1, sym_string, - STATE(1044), 1, + STATE(710), 1, + sym_primary_expression, + STATE(1006), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, @@ -42327,13 +40105,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -42341,7 +40119,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42357,50 +40135,105 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [19675] = 18, + [19966] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(622), 1, - sym_identifier, - ACTIONS(624), 1, + ACTIONS(1112), 12, + sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, - ACTIONS(632), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LBRACK, - ACTIONS(634), 1, anon_sym_LBRACE, - ACTIONS(636), 1, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1114), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, anon_sym_not, - ACTIONS(638), 1, anon_sym_lambda, - ACTIONS(644), 1, + anon_sym_yield, + sym_integer, + sym_identifier, anon_sym_await, - ACTIONS(646), 1, + sym_true, + sym_false, + sym_none, + [20021] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, sym__string_start, - STATE(740), 1, - sym_primary_expression, - STATE(742), 1, + ACTIONS(1116), 1, + sym_identifier, + ACTIONS(1120), 1, + anon_sym_await, + STATE(607), 1, sym_string, - STATE(1029), 1, + STATE(630), 1, + sym_primary_expression, + STATE(943), 1, sym_expression, - ACTIONS(640), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(630), 3, + STATE(392), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(642), 4, + ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(626), 5, + ACTIONS(1118), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1015), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -42408,11 +40241,9 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(811), 15, + STATE(622), 13, sym_binary_operator, sym_unary_operator, - sym_attribute, - sym_subscript, sym_call, sym_list, sym_set, @@ -42424,7 +40255,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [19760] = 18, + [20108] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(622), 1, @@ -42443,11 +40274,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(646), 1, sym__string_start, + STATE(739), 1, + sym_string, STATE(740), 1, sym_primary_expression, - STATE(742), 1, - sym_string, - STATE(1030), 1, + STATE(1057), 1, sym_expression, ACTIONS(640), 2, sym_ellipsis, @@ -42467,7 +40298,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1015), 7, + STATE(1053), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -42475,7 +40306,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(811), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42491,50 +40322,171 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [19845] = 18, + [20193] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(622), 1, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, sym_identifier, - ACTIONS(624), 1, + ACTIONS(604), 1, anon_sym_LPAREN, - ACTIONS(632), 1, + ACTIONS(612), 1, anon_sym_LBRACK, - ACTIONS(634), 1, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(607), 1, + sym_string, + STATE(621), 1, + sym_primary_expression, + STATE(1008), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(905), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(622), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [20278] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(858), 1, + anon_sym_else, + STATE(500), 1, + sym_else_clause, + ACTIONS(1122), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1124), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [20337] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(636), 1, + ACTIONS(69), 1, anon_sym_not, - ACTIONS(638), 1, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(644), 1, - anon_sym_await, - ACTIONS(646), 1, + ACTIONS(81), 1, sym__string_start, - STATE(740), 1, - sym_primary_expression, - STATE(742), 1, + ACTIONS(379), 1, + sym_identifier, + ACTIONS(385), 1, + anon_sym_await, + ACTIONS(568), 1, + anon_sym_LPAREN, + ACTIONS(572), 1, + anon_sym_LBRACK, + STATE(683), 1, sym_string, - STATE(1032), 1, + STATE(710), 1, + sym_primary_expression, + STATE(972), 1, sym_expression, - ACTIONS(640), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(630), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(642), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(626), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1015), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -42542,7 +40494,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(811), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42558,35 +40510,35 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [19930] = 18, + [20422] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(274), 1, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, sym_identifier, - ACTIONS(278), 1, + ACTIONS(604), 1, anon_sym_LPAREN, - ACTIONS(293), 1, + ACTIONS(612), 1, anon_sym_LBRACK, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(299), 1, + ACTIONS(614), 1, anon_sym_not, - ACTIONS(305), 1, + ACTIONS(616), 1, anon_sym_lambda, - ACTIONS(313), 1, + ACTIONS(618), 1, anon_sym_await, - ACTIONS(315), 1, - sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(630), 1, + STATE(621), 1, sym_primary_expression, - STATE(1134), 1, + STATE(925), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, @@ -42595,13 +40547,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(285), 5, + ACTIONS(606), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -42609,7 +40561,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42625,7 +40577,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [20015] = 18, + [20507] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -42644,11 +40596,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1135), 1, + STATE(949), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -42668,7 +40620,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -42676,7 +40628,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42692,35 +40644,35 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [20100] = 18, + [20592] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(274), 1, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, sym_identifier, - ACTIONS(278), 1, + ACTIONS(604), 1, anon_sym_LPAREN, - ACTIONS(293), 1, + ACTIONS(612), 1, anon_sym_LBRACK, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(299), 1, + ACTIONS(614), 1, anon_sym_not, - ACTIONS(305), 1, + ACTIONS(616), 1, anon_sym_lambda, - ACTIONS(313), 1, + ACTIONS(618), 1, anon_sym_await, - ACTIONS(315), 1, - sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(630), 1, + STATE(621), 1, sym_primary_expression, - STATE(1151), 1, + STATE(908), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, @@ -42729,13 +40681,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(285), 5, + ACTIONS(606), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -42743,7 +40695,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42759,104 +40711,50 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [20185] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(846), 1, - anon_sym_else, - STATE(500), 1, - sym_else_clause, - ACTIONS(1118), 12, - sym__string_start, - ts_builtin_sym_end, - anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(1120), 33, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, - anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_with, - anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, - anon_sym_not, - anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [20244] = 18, + [20677] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(622), 1, + ACTIONS(274), 1, sym_identifier, - ACTIONS(624), 1, + ACTIONS(278), 1, anon_sym_LPAREN, - ACTIONS(632), 1, + ACTIONS(293), 1, anon_sym_LBRACK, - ACTIONS(634), 1, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(636), 1, + ACTIONS(299), 1, anon_sym_not, - ACTIONS(638), 1, + ACTIONS(305), 1, anon_sym_lambda, - ACTIONS(644), 1, + ACTIONS(313), 1, anon_sym_await, - ACTIONS(646), 1, + ACTIONS(315), 1, sym__string_start, - STATE(740), 1, - sym_primary_expression, - STATE(742), 1, + STATE(607), 1, sym_string, - STATE(1104), 1, + STATE(630), 1, + sym_primary_expression, + STATE(943), 1, sym_expression, - ACTIONS(640), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(630), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(642), 4, + ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(626), 5, + ACTIONS(285), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1015), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -42864,7 +40762,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(811), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42880,87 +40778,35 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [20329] = 3, + [20762] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(1124), 12, - sym__dedent, - sym__string_start, - anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, + ACTIONS(295), 1, anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(1122), 35, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, - anon_sym_elif, - anon_sym_else, - anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_with, - anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, - anon_sym_not, - anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [20384] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(274), 1, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, sym_identifier, - ACTIONS(278), 1, + ACTIONS(604), 1, anon_sym_LPAREN, - ACTIONS(293), 1, + ACTIONS(612), 1, anon_sym_LBRACK, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(299), 1, + ACTIONS(614), 1, anon_sym_not, - ACTIONS(305), 1, + ACTIONS(616), 1, anon_sym_lambda, - ACTIONS(313), 1, + ACTIONS(618), 1, anon_sym_await, - ACTIONS(315), 1, - sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(630), 1, + STATE(621), 1, sym_primary_expression, - STATE(1153), 1, + STATE(916), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, @@ -42969,13 +40815,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(285), 5, + ACTIONS(606), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -42983,7 +40829,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42999,50 +40845,50 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [20469] = 18, + [20847] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(622), 1, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, sym_identifier, - ACTIONS(624), 1, + ACTIONS(604), 1, anon_sym_LPAREN, - ACTIONS(632), 1, + ACTIONS(612), 1, anon_sym_LBRACK, - ACTIONS(634), 1, - anon_sym_LBRACE, - ACTIONS(636), 1, + ACTIONS(614), 1, anon_sym_not, - ACTIONS(638), 1, + ACTIONS(616), 1, anon_sym_lambda, - ACTIONS(644), 1, + ACTIONS(618), 1, anon_sym_await, - ACTIONS(646), 1, - sym__string_start, - STATE(740), 1, - sym_primary_expression, - STATE(742), 1, + STATE(607), 1, sym_string, - STATE(1035), 1, + STATE(621), 1, + sym_primary_expression, + STATE(917), 1, sym_expression, - ACTIONS(640), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(630), 3, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(642), 4, + ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(626), 5, + ACTIONS(606), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1015), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -43050,7 +40896,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(811), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -43066,7 +40912,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [20554] = 18, + [20932] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -43085,11 +40931,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(947), 1, + STATE(938), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -43109,7 +40955,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -43117,7 +40963,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -43133,113 +40979,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [20639] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1124), 12, - sym__string_start, - ts_builtin_sym_end, - anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(1122), 35, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, - anon_sym_elif, - anon_sym_else, - anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_with, - anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, - anon_sym_not, - anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [20694] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(846), 1, - anon_sym_else, - STATE(519), 1, - sym_else_clause, - ACTIONS(1126), 12, - sym__string_start, - ts_builtin_sym_end, - anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(1128), 33, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, - anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_with, - anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, - anon_sym_not, - anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [20753] = 18, + [21017] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -43258,11 +40998,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(916), 1, + STATE(939), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -43282,7 +41022,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -43290,7 +41030,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -43306,50 +41046,50 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [20838] = 18, + [21102] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(69), 1, - anon_sym_not, - ACTIONS(71), 1, - anon_sym_lambda, - ACTIONS(81), 1, + ACTIONS(315), 1, sym__string_start, - ACTIONS(331), 1, + ACTIONS(602), 1, sym_identifier, - ACTIONS(337), 1, - anon_sym_await, - ACTIONS(559), 1, + ACTIONS(604), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(612), 1, anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(607), 1, sym_string, - STATE(1000), 1, + STATE(621), 1, + sym_primary_expression, + STATE(1048), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(606), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -43357,7 +41097,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -43373,7 +41113,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [20923] = 18, + [21187] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -43384,19 +41124,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(331), 1, + ACTIONS(379), 1, sym_identifier, - ACTIONS(337), 1, + ACTIONS(385), 1, anon_sym_await, - ACTIONS(559), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + STATE(683), 1, sym_string, - STATE(1001), 1, + STATE(710), 1, + sym_primary_expression, + STATE(1108), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, @@ -43410,13 +41150,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -43424,7 +41164,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -43440,50 +41180,50 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [21008] = 18, + [21272] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(274), 1, - sym_identifier, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(293), 1, - anon_sym_LBRACK, - ACTIONS(295), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(299), 1, + ACTIONS(69), 1, anon_sym_not, - ACTIONS(305), 1, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(313), 1, - anon_sym_await, - ACTIONS(315), 1, + ACTIONS(81), 1, sym__string_start, - STATE(600), 1, + ACTIONS(379), 1, + sym_identifier, + ACTIONS(385), 1, + anon_sym_await, + ACTIONS(568), 1, + anon_sym_LPAREN, + ACTIONS(572), 1, + anon_sym_LBRACK, + STATE(683), 1, sym_string, - STATE(630), 1, + STATE(710), 1, sym_primary_expression, - STATE(1136), 1, + STATE(1041), 1, sym_expression, - ACTIONS(309), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(285), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -43491,7 +41231,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -43507,70 +41247,16 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [21093] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(856), 1, - anon_sym_finally, - STATE(591), 1, - sym_finally_clause, - ACTIONS(1132), 12, - sym__dedent, - sym__string_start, - anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(1130), 33, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, - anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_with, - anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, - anon_sym_not, - anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [21152] = 5, + [21357] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(852), 1, + ACTIONS(858), 1, anon_sym_else, - STATE(593), 1, + STATE(525), 1, sym_else_clause, ACTIONS(1126), 12, - sym__dedent, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -43615,50 +41301,50 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [21211] = 18, + [21416] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(274), 1, + ACTIONS(622), 1, sym_identifier, - ACTIONS(278), 1, + ACTIONS(624), 1, anon_sym_LPAREN, - ACTIONS(293), 1, + ACTIONS(632), 1, anon_sym_LBRACK, - ACTIONS(295), 1, + ACTIONS(634), 1, anon_sym_LBRACE, - ACTIONS(299), 1, + ACTIONS(636), 1, anon_sym_not, - ACTIONS(305), 1, + ACTIONS(638), 1, anon_sym_lambda, - ACTIONS(313), 1, + ACTIONS(644), 1, anon_sym_await, - ACTIONS(315), 1, + ACTIONS(646), 1, sym__string_start, - STATE(600), 1, + STATE(739), 1, sym_string, - STATE(630), 1, + STATE(740), 1, sym_primary_expression, - STATE(1169), 1, + STATE(1130), 1, sym_expression, - ACTIONS(309), 2, + ACTIONS(640), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(630), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 4, + ACTIONS(642), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(285), 5, + ACTIONS(626), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(1053), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -43666,7 +41352,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -43682,50 +41368,50 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [21296] = 18, + [21501] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(622), 1, + ACTIONS(274), 1, sym_identifier, - ACTIONS(624), 1, + ACTIONS(278), 1, anon_sym_LPAREN, - ACTIONS(632), 1, + ACTIONS(293), 1, anon_sym_LBRACK, - ACTIONS(634), 1, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(636), 1, + ACTIONS(299), 1, anon_sym_not, - ACTIONS(638), 1, + ACTIONS(305), 1, anon_sym_lambda, - ACTIONS(644), 1, + ACTIONS(313), 1, anon_sym_await, - ACTIONS(646), 1, + ACTIONS(315), 1, sym__string_start, - STATE(740), 1, - sym_primary_expression, - STATE(742), 1, + STATE(607), 1, sym_string, - STATE(1123), 1, + STATE(630), 1, + sym_primary_expression, + STATE(937), 1, sym_expression, - ACTIONS(640), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(630), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(642), 4, + ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(626), 5, + ACTIONS(285), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1015), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -43733,7 +41419,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(811), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -43749,50 +41435,50 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [21381] = 18, + [21586] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(69), 1, + ACTIONS(299), 1, anon_sym_not, - ACTIONS(71), 1, + ACTIONS(305), 1, anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(331), 1, - sym_identifier, - ACTIONS(337), 1, + ACTIONS(313), 1, anon_sym_await, - ACTIONS(559), 1, - anon_sym_LPAREN, - ACTIONS(563), 1, - anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + ACTIONS(315), 1, + sym__string_start, + STATE(607), 1, sym_string, - STATE(1156), 1, + STATE(630), 1, + sym_primary_expression, + STATE(935), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(285), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -43800,7 +41486,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -43816,16 +41502,12 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [21466] = 5, + [21671] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(852), 1, - anon_sym_else, - STATE(510), 1, - sym_else_clause, - ACTIONS(1104), 12, - sym__dedent, + ACTIONS(1130), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -43836,7 +41518,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1106), 33, + ACTIONS(1132), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -43849,6 +41531,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_break, anon_sym_continue, anon_sym_if, + anon_sym_elif, + anon_sym_else, anon_sym_async, anon_sym_for, anon_sym_while, @@ -43870,7 +41554,7 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [21525] = 18, + [21726] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -43881,19 +41565,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(331), 1, + ACTIONS(379), 1, sym_identifier, - ACTIONS(337), 1, + ACTIONS(385), 1, anon_sym_await, - ACTIONS(559), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + STATE(683), 1, sym_string, - STATE(967), 1, + STATE(710), 1, + sym_primary_expression, + STATE(1049), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, @@ -43907,13 +41591,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -43921,7 +41605,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -43937,64 +41621,16 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [21610] = 3, + [21811] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1136), 12, - sym__dedent, - sym__string_start, - anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(1134), 35, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, - anon_sym_elif, + ACTIONS(858), 1, anon_sym_else, - anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_with, - anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, - anon_sym_not, - anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [21665] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1108), 12, - sym__dedent, + STATE(503), 1, + sym_else_clause, + ACTIONS(1134), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -44005,7 +41641,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1110), 35, + ACTIONS(1136), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -44018,8 +41654,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_break, anon_sym_continue, anon_sym_if, - anon_sym_elif, - anon_sym_else, anon_sym_async, anon_sym_for, anon_sym_while, @@ -44041,7 +41675,7 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [21720] = 18, + [21870] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -44052,19 +41686,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(331), 1, + ACTIONS(379), 1, sym_identifier, - ACTIONS(337), 1, + ACTIONS(385), 1, anon_sym_await, - ACTIONS(559), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + STATE(683), 1, sym_string, - STATE(974), 1, + STATE(710), 1, + sym_primary_expression, + STATE(1190), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, @@ -44078,13 +41712,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -44092,7 +41726,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -44108,7 +41742,62 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [21805] = 18, + [21955] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1140), 1, + anon_sym_COMMA, + ACTIONS(1147), 1, + anon_sym_EQ, + ACTIONS(1145), 14, + anon_sym_COLON, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(1143), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1138), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_SEMI, + [22016] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -44127,11 +41816,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1140), 1, + STATE(901), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -44151,7 +41840,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -44159,7 +41848,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -44175,7 +41864,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [21890] = 18, + [22101] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -44194,11 +41883,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1141), 1, + STATE(924), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -44218,74 +41907,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(642), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [21975] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(51), 1, - anon_sym_LBRACE, - ACTIONS(69), 1, - anon_sym_not, - ACTIONS(71), 1, - anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(331), 1, - sym_identifier, - ACTIONS(337), 1, - anon_sym_await, - ACTIONS(559), 1, - anon_sym_LPAREN, - ACTIONS(563), 1, - anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, - sym_string, - STATE(1094), 1, - sym_expression, - ACTIONS(75), 2, - sym_ellipsis, - sym_float, - ACTIONS(47), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(77), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(333), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(1009), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -44293,7 +41915,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -44309,7 +41931,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [22060] = 18, + [22186] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -44328,11 +41950,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1149), 1, + STATE(1159), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -44352,7 +41974,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -44360,7 +41982,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -44376,68 +41998,14 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [22145] = 5, + [22271] = 5, ACTIONS(3), 1, sym_comment, ACTIONS(846), 1, anon_sym_else, - STATE(511), 1, - sym_else_clause, - ACTIONS(1138), 12, - sym__string_start, - ts_builtin_sym_end, - anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(1140), 33, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, - anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_with, - anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, - anon_sym_not, - anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [22204] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(852), 1, - anon_sym_else, - STATE(539), 1, + STATE(559), 1, sym_else_clause, - ACTIONS(1138), 12, + ACTIONS(1151), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -44450,7 +42018,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1140), 33, + ACTIONS(1149), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -44484,35 +42052,35 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [22263] = 18, + [22330] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(274), 1, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, sym_identifier, - ACTIONS(278), 1, + ACTIONS(604), 1, anon_sym_LPAREN, - ACTIONS(293), 1, + ACTIONS(612), 1, anon_sym_LBRACK, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(299), 1, + ACTIONS(614), 1, anon_sym_not, - ACTIONS(305), 1, + ACTIONS(616), 1, anon_sym_lambda, - ACTIONS(313), 1, + ACTIONS(618), 1, anon_sym_await, - ACTIONS(315), 1, - sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(630), 1, + STATE(621), 1, sym_primary_expression, - STATE(1152), 1, + STATE(919), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, @@ -44521,13 +42089,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(285), 5, + ACTIONS(606), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -44535,7 +42103,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -44551,222 +42119,74 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [22348] = 5, + [22415] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(846), 1, - anon_sym_else, - STATE(503), 1, - sym_else_clause, - ACTIONS(1142), 12, - sym__string_start, - ts_builtin_sym_end, - anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, + ACTIONS(51), 1, anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(1144), 33, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, - anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_with, - anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, + ACTIONS(69), 1, anon_sym_not, + ACTIONS(71), 1, anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [22407] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1050), 1, - anon_sym_COMMA, - ACTIONS(1057), 1, - anon_sym_EQ, - ACTIONS(1059), 14, - anon_sym_COLON, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - ACTIONS(1053), 15, - anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_SLASH, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1048), 16, - sym__newline, - anon_sym_DOT, - anon_sym_LPAREN, - anon_sym_if, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - sym__semicolon, - [22468] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(852), 1, - anon_sym_else, - STATE(551), 1, - sym_else_clause, - ACTIONS(1142), 12, - sym__dedent, + ACTIONS(81), 1, sym__string_start, - anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(1144), 33, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, - anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_with, - anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, - anon_sym_not, - anon_sym_lambda, - anon_sym_yield, - sym_integer, + ACTIONS(379), 1, sym_identifier, + ACTIONS(385), 1, anon_sym_await, - sym_true, - sym_false, - sym_none, - [22527] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1136), 12, - sym__string_start, - ts_builtin_sym_end, + ACTIONS(568), 1, anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(572), 1, anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(1134), 35, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, - anon_sym_elif, - anon_sym_else, - anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_with, - anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, - anon_sym_not, - anon_sym_lambda, - anon_sym_yield, + STATE(683), 1, + sym_string, + STATE(710), 1, + sym_primary_expression, + STATE(1110), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, sym_integer, - sym_identifier, - anon_sym_await, sym_true, sym_false, sym_none, - [22582] = 18, + ACTIONS(381), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(974), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(795), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [22500] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -44785,11 +42205,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1098), 1, + STATE(1157), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -44809,7 +42229,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -44817,7 +42237,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -44833,7 +42253,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [22667] = 18, + [22585] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -44844,19 +42264,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(331), 1, + ACTIONS(379), 1, sym_identifier, - ACTIONS(337), 1, + ACTIONS(385), 1, anon_sym_await, - ACTIONS(559), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + STATE(683), 1, sym_string, - STATE(1121), 1, + STATE(710), 1, + sym_primary_expression, + STATE(1102), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, @@ -44870,13 +42290,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -44884,7 +42304,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -44900,7 +42320,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [22752] = 18, + [22670] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -44919,11 +42339,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(908), 1, + STATE(1154), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -44943,7 +42363,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -44951,7 +42371,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -44967,50 +42387,50 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [22837] = 18, + [22755] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(69), 1, + ACTIONS(299), 1, anon_sym_not, - ACTIONS(71), 1, + ACTIONS(305), 1, anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(331), 1, - sym_identifier, - ACTIONS(337), 1, + ACTIONS(313), 1, anon_sym_await, - ACTIONS(559), 1, - anon_sym_LPAREN, - ACTIONS(563), 1, - anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + ACTIONS(315), 1, + sym__string_start, + STATE(607), 1, sym_string, - STATE(1007), 1, + STATE(630), 1, + sym_primary_expression, + STATE(1099), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(285), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -45018,7 +42438,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -45034,7 +42454,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [22922] = 18, + [22840] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -45053,11 +42473,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1073), 1, + STATE(1083), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -45077,7 +42497,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -45085,7 +42505,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -45101,50 +42521,50 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [23007] = 18, + [22925] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(295), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(315), 1, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, sym__string_start, - ACTIONS(602), 1, + ACTIONS(379), 1, sym_identifier, - ACTIONS(604), 1, + ACTIONS(385), 1, + anon_sym_await, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(612), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - ACTIONS(614), 1, - anon_sym_not, - ACTIONS(616), 1, - anon_sym_lambda, - ACTIONS(618), 1, - anon_sym_await, - STATE(600), 1, + STATE(683), 1, sym_string, - STATE(643), 1, + STATE(710), 1, sym_primary_expression, - STATE(928), 1, + STATE(1013), 1, sym_expression, - ACTIONS(309), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(606), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -45152,7 +42572,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -45168,14 +42588,14 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [23092] = 5, + [23010] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(850), 1, - anon_sym_finally, - STATE(518), 1, - sym_finally_clause, - ACTIONS(1132), 12, + ACTIONS(858), 1, + anon_sym_else, + STATE(532), 1, + sym_else_clause, + ACTIONS(1151), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -45188,7 +42608,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1130), 33, + ACTIONS(1149), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -45222,105 +42642,50 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [23151] = 6, + [23069] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(1148), 1, - anon_sym_COMMA, - ACTIONS(1155), 1, - anon_sym_EQ, - ACTIONS(1153), 14, - anon_sym_COLON, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - ACTIONS(1151), 15, - anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_SLASH, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1146), 16, - sym__newline, - anon_sym_DOT, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, anon_sym_LPAREN, - anon_sym_if, - anon_sym_in, + ACTIONS(293), 1, anon_sym_LBRACK, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - sym__semicolon, - [23212] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(51), 1, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(69), 1, + ACTIONS(299), 1, anon_sym_not, - ACTIONS(71), 1, + ACTIONS(305), 1, anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(331), 1, - sym_identifier, - ACTIONS(337), 1, + ACTIONS(313), 1, anon_sym_await, - ACTIONS(559), 1, - anon_sym_LPAREN, - ACTIONS(563), 1, - anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + ACTIONS(315), 1, + sym__string_start, + STATE(607), 1, sym_string, - STATE(1054), 1, + STATE(630), 1, + sym_primary_expression, + STATE(1168), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(285), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -45328,7 +42693,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -45344,184 +42709,158 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [23297] = 18, + [23154] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(622), 1, - sym_identifier, - ACTIONS(624), 1, + ACTIONS(858), 1, + anon_sym_else, + STATE(545), 1, + sym_else_clause, + ACTIONS(1153), 12, + sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, - ACTIONS(632), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LBRACK, - ACTIONS(634), 1, anon_sym_LBRACE, - ACTIONS(636), 1, - anon_sym_not, - ACTIONS(638), 1, - anon_sym_lambda, - ACTIONS(644), 1, - anon_sym_await, - ACTIONS(646), 1, - sym__string_start, - STATE(740), 1, - sym_primary_expression, - STATE(742), 1, - sym_string, - STATE(1025), 1, - sym_expression, - ACTIONS(640), 2, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(630), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(642), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(626), 5, + ACTIONS(1155), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, anon_sym_exec, anon_sym_type, - STATE(1015), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(811), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [23382] = 18, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [23213] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, + ACTIONS(846), 1, + anon_sym_else, + STATE(548), 1, + sym_else_clause, + ACTIONS(1153), 12, + sym__dedent, sym__string_start, - ACTIONS(602), 1, - sym_identifier, - ACTIONS(604), 1, anon_sym_LPAREN, - ACTIONS(612), 1, - anon_sym_LBRACK, - ACTIONS(614), 1, - anon_sym_not, - ACTIONS(616), 1, - anon_sym_lambda, - ACTIONS(618), 1, - anon_sym_await, - STATE(600), 1, - sym_string, - STATE(643), 1, - sym_primary_expression, - STATE(912), 1, - sym_expression, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, anon_sym_TILDE, - ACTIONS(311), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(606), 5, + sym_ellipsis, + sym_float, + ACTIONS(1155), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, anon_sym_exec, anon_sym_type, - STATE(900), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(642), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [23467] = 18, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [23272] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(622), 1, + ACTIONS(274), 1, sym_identifier, - ACTIONS(624), 1, + ACTIONS(278), 1, anon_sym_LPAREN, - ACTIONS(632), 1, + ACTIONS(293), 1, anon_sym_LBRACK, - ACTIONS(634), 1, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(636), 1, + ACTIONS(299), 1, anon_sym_not, - ACTIONS(638), 1, + ACTIONS(305), 1, anon_sym_lambda, - ACTIONS(644), 1, + ACTIONS(313), 1, anon_sym_await, - ACTIONS(646), 1, + ACTIONS(315), 1, sym__string_start, - STATE(740), 1, - sym_primary_expression, - STATE(742), 1, + STATE(607), 1, sym_string, - STATE(1051), 1, + STATE(630), 1, + sym_primary_expression, + STATE(1197), 1, sym_expression, - ACTIONS(640), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(630), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(642), 4, + ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(626), 5, + ACTIONS(285), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1015), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -45529,7 +42868,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(811), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -45545,7 +42884,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [23552] = 18, + [23357] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -45564,11 +42903,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(920), 1, + STATE(1164), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -45588,7 +42927,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -45596,7 +42935,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -45612,50 +42951,50 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [23637] = 18, + [23442] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(274), 1, - sym_identifier, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(293), 1, - anon_sym_LBRACK, - ACTIONS(295), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(299), 1, + ACTIONS(69), 1, anon_sym_not, - ACTIONS(305), 1, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(313), 1, - anon_sym_await, - ACTIONS(315), 1, + ACTIONS(81), 1, sym__string_start, - STATE(600), 1, + ACTIONS(379), 1, + sym_identifier, + ACTIONS(385), 1, + anon_sym_await, + ACTIONS(568), 1, + anon_sym_LPAREN, + ACTIONS(572), 1, + anon_sym_LBRACK, + STATE(683), 1, sym_string, - STATE(630), 1, + STATE(710), 1, sym_primary_expression, - STATE(939), 1, + STATE(973), 1, sym_expression, - ACTIONS(309), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(285), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -45663,7 +43002,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -45679,7 +43018,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [23722] = 18, + [23527] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -45690,19 +43029,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(331), 1, + ACTIONS(379), 1, sym_identifier, - ACTIONS(337), 1, + ACTIONS(385), 1, anon_sym_await, - ACTIONS(559), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + STATE(683), 1, sym_string, - STATE(992), 1, + STATE(710), 1, + sym_primary_expression, + STATE(1042), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, @@ -45716,13 +43055,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -45730,7 +43069,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -45746,31 +43085,14 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [23807] = 6, + [23612] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(1076), 1, - anon_sym_EQ, - ACTIONS(1071), 3, - anon_sym_RPAREN, + ACTIONS(1073), 1, anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(1048), 14, - anon_sym_DOT, - anon_sym_LPAREN, - anon_sym_if, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - ACTIONS(1078), 14, + ACTIONS(1078), 1, + anon_sym_EQ, + ACTIONS(1080), 14, anon_sym_COLON, anon_sym_PLUS_EQ, anon_sym_DASH_EQ, @@ -45785,7 +43107,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_EQ, anon_sym_CARET_EQ, anon_sym_PIPE_EQ, - ACTIONS(1053), 15, + ACTIONS(1036), 15, anon_sym_STAR, anon_sym_GT_GT, anon_sym_PIPE, @@ -45801,50 +43123,121 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT, anon_sym_LT, anon_sym_GT, - [23868] = 18, + ACTIONS(1031), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_SEMI, + [23673] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(274), 1, - sym_identifier, - ACTIONS(278), 1, + ACTIONS(846), 1, + anon_sym_else, + STATE(573), 1, + sym_else_clause, + ACTIONS(1122), 12, + sym__dedent, + sym__string_start, anon_sym_LPAREN, - ACTIONS(293), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LBRACK, - ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(299), 1, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1124), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [23732] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, anon_sym_not, - ACTIONS(305), 1, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(313), 1, - anon_sym_await, - ACTIONS(315), 1, + ACTIONS(81), 1, sym__string_start, - STATE(600), 1, + ACTIONS(379), 1, + sym_identifier, + ACTIONS(385), 1, + anon_sym_await, + ACTIONS(568), 1, + anon_sym_LPAREN, + ACTIONS(572), 1, + anon_sym_LBRACK, + STATE(683), 1, sym_string, - STATE(630), 1, + STATE(710), 1, sym_primary_expression, - STATE(1126), 1, + STATE(1066), 1, sym_expression, - ACTIONS(309), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(285), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -45852,7 +43245,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -45868,7 +43261,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [23953] = 18, + [23817] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -45887,11 +43280,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1127), 1, + STATE(1206), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -45911,7 +43304,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -45919,7 +43312,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -45935,50 +43328,50 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [24038] = 18, + [23902] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(295), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(315), 1, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, sym__string_start, - ACTIONS(602), 1, + ACTIONS(379), 1, sym_identifier, - ACTIONS(604), 1, + ACTIONS(385), 1, + anon_sym_await, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(612), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - ACTIONS(614), 1, - anon_sym_not, - ACTIONS(616), 1, - anon_sym_lambda, - ACTIONS(618), 1, - anon_sym_await, - STATE(600), 1, + STATE(683), 1, sym_string, - STATE(643), 1, + STATE(710), 1, sym_primary_expression, - STATE(914), 1, + STATE(965), 1, sym_expression, - ACTIONS(309), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(606), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -45986,7 +43379,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -46002,50 +43395,50 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [24123] = 18, + [23987] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(69), 1, - anon_sym_not, - ACTIONS(71), 1, - anon_sym_lambda, - ACTIONS(81), 1, + ACTIONS(315), 1, sym__string_start, - ACTIONS(331), 1, + ACTIONS(602), 1, sym_identifier, - ACTIONS(337), 1, - anon_sym_await, - ACTIONS(559), 1, + ACTIONS(604), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(612), 1, anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(607), 1, sym_string, - STATE(1078), 1, + STATE(621), 1, + sym_primary_expression, + STATE(931), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(606), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -46053,7 +43446,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -46069,89 +43462,35 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [24208] = 5, + [24072] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(856), 1, - anon_sym_finally, - STATE(564), 1, - sym_finally_clause, - ACTIONS(1159), 12, - sym__dedent, - sym__string_start, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(293), 1, anon_sym_LBRACK, + ACTIONS(295), 1, anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(1157), 33, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, - anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_with, - anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, + ACTIONS(299), 1, anon_sym_not, + ACTIONS(305), 1, anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, + ACTIONS(313), 1, anon_sym_await, - sym_true, - sym_false, - sym_none, - [24267] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(295), 1, - anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - ACTIONS(602), 1, - sym_identifier, - ACTIONS(604), 1, - anon_sym_LPAREN, - ACTIONS(612), 1, - anon_sym_LBRACK, - ACTIONS(614), 1, - anon_sym_not, - ACTIONS(616), 1, - anon_sym_lambda, - ACTIONS(618), 1, - anon_sym_await, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(630), 1, sym_primary_expression, - STATE(927), 1, + STATE(1126), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, @@ -46160,13 +43499,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(606), 5, + ACTIONS(285), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -46174,7 +43513,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -46190,7 +43529,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [24352] = 18, + [24157] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -46209,11 +43548,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(926), 1, + STATE(1127), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -46233,7 +43572,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -46241,7 +43580,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -46257,35 +43596,35 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [24437] = 18, + [24242] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(602), 1, + ACTIONS(274), 1, sym_identifier, - ACTIONS(604), 1, + ACTIONS(278), 1, anon_sym_LPAREN, - ACTIONS(612), 1, + ACTIONS(293), 1, anon_sym_LBRACK, - ACTIONS(614), 1, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, anon_sym_not, - ACTIONS(616), 1, + ACTIONS(305), 1, anon_sym_lambda, - ACTIONS(618), 1, + ACTIONS(313), 1, anon_sym_await, - STATE(600), 1, + ACTIONS(315), 1, + sym__string_start, + STATE(607), 1, sym_string, - STATE(643), 1, + STATE(630), 1, sym_primary_expression, - STATE(922), 1, + STATE(1166), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, @@ -46294,13 +43633,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(606), 5, + ACTIONS(285), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -46308,7 +43647,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -46324,74 +43663,221 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [24522] = 18, + [24327] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(622), 1, - sym_identifier, - ACTIONS(624), 1, + ACTIONS(1159), 12, + sym__dedent, + sym__string_start, anon_sym_LPAREN, - ACTIONS(632), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LBRACK, - ACTIONS(634), 1, anon_sym_LBRACE, - ACTIONS(636), 1, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1157), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, anon_sym_not, - ACTIONS(638), 1, anon_sym_lambda, - ACTIONS(644), 1, + anon_sym_yield, + sym_integer, + sym_identifier, anon_sym_await, - ACTIONS(646), 1, + sym_true, + sym_false, + sym_none, + [24382] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + STATE(546), 1, + sym_else_clause, + ACTIONS(1134), 12, + sym__dedent, sym__string_start, - STATE(740), 1, - sym_primary_expression, - STATE(742), 1, - sym_string, - STATE(1027), 1, - sym_expression, - ACTIONS(640), 2, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(630), 3, + ACTIONS(1136), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [24441] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(850), 1, + anon_sym_finally, + STATE(541), 1, + sym_finally_clause, + ACTIONS(1108), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, anon_sym_TILDE, - ACTIONS(642), 4, + sym_ellipsis, + sym_float, + ACTIONS(1110), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, sym_integer, + sym_identifier, + anon_sym_await, sym_true, sym_false, sym_none, - ACTIONS(626), 5, + [24500] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(862), 1, + anon_sym_finally, + STATE(565), 1, + sym_finally_clause, + ACTIONS(1106), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1104), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, anon_sym_exec, anon_sym_type, - STATE(1015), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(811), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [24607] = 18, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [24559] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -46410,11 +43896,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1148), 1, + STATE(1139), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -46434,7 +43920,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -46442,7 +43928,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -46458,50 +43944,50 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [24692] = 18, + [24644] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(274), 1, - sym_identifier, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(293), 1, - anon_sym_LBRACK, - ACTIONS(295), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(299), 1, + ACTIONS(69), 1, anon_sym_not, - ACTIONS(305), 1, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(313), 1, - anon_sym_await, - ACTIONS(315), 1, + ACTIONS(81), 1, sym__string_start, - STATE(600), 1, + ACTIONS(379), 1, + sym_identifier, + ACTIONS(385), 1, + anon_sym_await, + ACTIONS(568), 1, + anon_sym_LPAREN, + ACTIONS(572), 1, + anon_sym_LBRACK, + STATE(683), 1, sym_string, - STATE(630), 1, + STATE(710), 1, sym_primary_expression, - STATE(948), 1, + STATE(988), 1, sym_expression, - ACTIONS(309), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(285), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -46509,7 +43995,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -46525,7 +44011,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [24777] = 18, + [24729] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -46536,19 +44022,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(331), 1, + ACTIONS(379), 1, sym_identifier, - ACTIONS(337), 1, + ACTIONS(385), 1, anon_sym_await, - ACTIONS(559), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + STATE(683), 1, sym_string, - STATE(1113), 1, + STATE(710), 1, + sym_primary_expression, + STATE(1016), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, @@ -46562,13 +44048,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -46576,7 +44062,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -46592,50 +44078,50 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [24862] = 18, + [24814] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(69), 1, + ACTIONS(299), 1, anon_sym_not, - ACTIONS(71), 1, + ACTIONS(305), 1, anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(331), 1, - sym_identifier, - ACTIONS(337), 1, + ACTIONS(313), 1, anon_sym_await, - ACTIONS(559), 1, - anon_sym_LPAREN, - ACTIONS(563), 1, - anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + ACTIONS(315), 1, + sym__string_start, + STATE(607), 1, sym_string, - STATE(1026), 1, + STATE(630), 1, + sym_primary_expression, + STATE(1142), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(285), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -46643,7 +44129,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -46659,50 +44145,104 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [24947] = 18, + [24899] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(858), 1, + anon_sym_else, + STATE(568), 1, + sym_else_clause, + ACTIONS(1161), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1163), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [24958] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(274), 1, + ACTIONS(622), 1, sym_identifier, - ACTIONS(278), 1, + ACTIONS(624), 1, anon_sym_LPAREN, - ACTIONS(293), 1, + ACTIONS(632), 1, anon_sym_LBRACK, - ACTIONS(295), 1, + ACTIONS(634), 1, anon_sym_LBRACE, - ACTIONS(299), 1, + ACTIONS(636), 1, anon_sym_not, - ACTIONS(305), 1, + ACTIONS(638), 1, anon_sym_lambda, - ACTIONS(313), 1, + ACTIONS(644), 1, anon_sym_await, - ACTIONS(315), 1, + ACTIONS(646), 1, sym__string_start, - STATE(600), 1, + STATE(739), 1, sym_string, - STATE(630), 1, + STATE(740), 1, sym_primary_expression, - STATE(924), 1, + STATE(1027), 1, sym_expression, - ACTIONS(309), 2, + ACTIONS(640), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(630), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 4, + ACTIONS(642), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(285), 5, + ACTIONS(626), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(1053), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -46710,7 +44250,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -46726,14 +44266,10 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [25032] = 5, + [25043] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(852), 1, - anon_sym_else, - STATE(567), 1, - sym_else_clause, - ACTIONS(1163), 12, + ACTIONS(1112), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -46746,7 +44282,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1161), 33, + ACTIONS(1114), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -46759,6 +44295,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_break, anon_sym_continue, anon_sym_if, + anon_sym_elif, + anon_sym_else, anon_sym_async, anon_sym_for, anon_sym_while, @@ -46780,50 +44318,50 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [25091] = 18, + [25098] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(602), 1, + ACTIONS(622), 1, sym_identifier, - ACTIONS(604), 1, + ACTIONS(624), 1, anon_sym_LPAREN, - ACTIONS(612), 1, + ACTIONS(632), 1, anon_sym_LBRACK, - ACTIONS(614), 1, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, anon_sym_not, - ACTIONS(616), 1, + ACTIONS(638), 1, anon_sym_lambda, - ACTIONS(618), 1, + ACTIONS(644), 1, anon_sym_await, - STATE(600), 1, + ACTIONS(646), 1, + sym__string_start, + STATE(739), 1, sym_string, - STATE(643), 1, + STATE(740), 1, sym_primary_expression, - STATE(923), 1, + STATE(1028), 1, sym_expression, - ACTIONS(309), 2, + ACTIONS(640), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(630), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 4, + ACTIONS(642), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(606), 5, + ACTIONS(626), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(1053), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -46831,7 +44369,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -46847,50 +44385,50 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [25176] = 18, + [25183] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, anon_sym_LBRACE, - ACTIONS(69), 1, + ACTIONS(636), 1, anon_sym_not, - ACTIONS(71), 1, + ACTIONS(638), 1, anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(331), 1, - sym_identifier, - ACTIONS(337), 1, + ACTIONS(644), 1, anon_sym_await, - ACTIONS(559), 1, - anon_sym_LPAREN, - ACTIONS(563), 1, - anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + ACTIONS(646), 1, + sym__string_start, + STATE(739), 1, sym_string, - STATE(1105), 1, + STATE(740), 1, + sym_primary_expression, + STATE(1029), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(640), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(630), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(642), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(626), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(1053), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -46898,7 +44436,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -46914,104 +44452,50 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [25261] = 5, + [25268] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(850), 1, - anon_sym_finally, - STATE(559), 1, - sym_finally_clause, - ACTIONS(1159), 12, - sym__string_start, - ts_builtin_sym_end, - anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, + ACTIONS(51), 1, anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(1157), 33, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, - anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_with, - anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, + ACTIONS(69), 1, anon_sym_not, + ACTIONS(71), 1, anon_sym_lambda, - anon_sym_yield, - sym_integer, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(379), 1, sym_identifier, + ACTIONS(385), 1, anon_sym_await, - sym_true, - sym_false, - sym_none, - [25320] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(274), 1, - sym_identifier, - ACTIONS(278), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(293), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(299), 1, - anon_sym_not, - ACTIONS(305), 1, - anon_sym_lambda, - ACTIONS(313), 1, - anon_sym_await, - ACTIONS(315), 1, - sym__string_start, - STATE(600), 1, + STATE(683), 1, sym_string, - STATE(630), 1, + STATE(710), 1, sym_primary_expression, - STATE(1157), 1, + STATE(1098), 1, sym_expression, - ACTIONS(309), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(285), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -47019,7 +44503,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -47035,7 +44519,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [25405] = 18, + [25353] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -47046,19 +44530,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(331), 1, + ACTIONS(379), 1, sym_identifier, - ACTIONS(337), 1, + ACTIONS(385), 1, anon_sym_await, - ACTIONS(559), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + STATE(683), 1, sym_string, - STATE(1048), 1, + STATE(710), 1, + sym_primary_expression, + STATE(975), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, @@ -47072,13 +44556,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -47086,7 +44570,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -47102,50 +44586,50 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [25490] = 18, + [25438] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(274), 1, + ACTIONS(622), 1, sym_identifier, - ACTIONS(278), 1, + ACTIONS(624), 1, anon_sym_LPAREN, - ACTIONS(293), 1, + ACTIONS(632), 1, anon_sym_LBRACK, - ACTIONS(295), 1, + ACTIONS(634), 1, anon_sym_LBRACE, - ACTIONS(299), 1, + ACTIONS(636), 1, anon_sym_not, - ACTIONS(305), 1, + ACTIONS(638), 1, anon_sym_lambda, - ACTIONS(313), 1, + ACTIONS(644), 1, anon_sym_await, - ACTIONS(315), 1, + ACTIONS(646), 1, sym__string_start, - STATE(600), 1, + STATE(739), 1, sym_string, - STATE(630), 1, + STATE(740), 1, sym_primary_expression, - STATE(904), 1, + STATE(1031), 1, sym_expression, - ACTIONS(309), 2, + ACTIONS(640), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(630), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 4, + ACTIONS(642), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(285), 5, + ACTIONS(626), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(1053), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -47153,7 +44637,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -47169,7 +44653,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [25575] = 18, + [25523] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -47188,11 +44672,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1158), 1, + STATE(1199), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -47212,7 +44696,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -47220,7 +44704,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -47236,104 +44720,172 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [25660] = 5, + [25608] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(846), 1, - anon_sym_else, - STATE(569), 1, - sym_else_clause, - ACTIONS(1163), 12, - sym__string_start, - ts_builtin_sym_end, - anon_sym_LPAREN, + ACTIONS(1167), 1, + anon_sym_COMMA, + ACTIONS(1174), 1, + anon_sym_EQ, + ACTIONS(1172), 14, + anon_sym_COLON, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(1170), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, anon_sym_DASH, anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_LBRACE, anon_sym_STAR_STAR, anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(1161), 33, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1165), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, anon_sym_if, - anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_with, - anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, + anon_sym_in, + anon_sym_LBRACK, anon_sym_not, - anon_sym_lambda, - anon_sym_yield, - sym_integer, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_SEMI, + [25669] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(739), 1, + sym_string, + STATE(740), 1, + sym_primary_expression, + STATE(1032), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, sym_true, sym_false, sym_none, - [25719] = 18, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1053), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(813), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [25754] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(602), 1, + ACTIONS(622), 1, sym_identifier, - ACTIONS(604), 1, + ACTIONS(624), 1, anon_sym_LPAREN, - ACTIONS(612), 1, + ACTIONS(632), 1, anon_sym_LBRACK, - ACTIONS(614), 1, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, anon_sym_not, - ACTIONS(616), 1, + ACTIONS(638), 1, anon_sym_lambda, - ACTIONS(618), 1, + ACTIONS(644), 1, anon_sym_await, - STATE(600), 1, + ACTIONS(646), 1, + sym__string_start, + STATE(739), 1, sym_string, - STATE(643), 1, + STATE(740), 1, sym_primary_expression, - STATE(1039), 1, + STATE(1033), 1, sym_expression, - ACTIONS(309), 2, + ACTIONS(640), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(630), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 4, + ACTIONS(642), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(606), 5, + ACTIONS(626), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(1053), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -47341,7 +44893,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -47357,7 +44909,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [25804] = 18, + [25839] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -47376,11 +44928,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1102), 1, + STATE(1065), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -47400,7 +44952,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -47408,7 +44960,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -47424,62 +44976,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [25889] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1167), 1, - anon_sym_COMMA, - ACTIONS(1174), 1, - anon_sym_EQ, - ACTIONS(1172), 14, - anon_sym_COLON, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - ACTIONS(1170), 15, - anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_SLASH, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1165), 16, - sym__newline, - anon_sym_DOT, - anon_sym_LPAREN, - anon_sym_if, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - sym__semicolon, - [25950] = 18, + [25924] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -47498,11 +44995,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(921), 1, + STATE(952), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -47522,7 +45019,74 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(622), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [26009] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(607), 1, + sym_string, + STATE(621), 1, + sym_primary_expression, + STATE(901), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -47530,7 +45094,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -47546,50 +45110,104 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [26035] = 18, + [26094] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(846), 1, + anon_sym_else, + STATE(517), 1, + sym_else_clause, + ACTIONS(1161), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, anon_sym_LBRACE, - ACTIONS(69), 1, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1163), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, anon_sym_not, - ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(331), 1, + anon_sym_yield, + sym_integer, sym_identifier, - ACTIONS(337), 1, anon_sym_await, - ACTIONS(559), 1, + sym_true, + sym_false, + sym_none, + [26153] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(632), 1, anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(739), 1, sym_string, - STATE(1122), 1, + STATE(740), 1, + sym_primary_expression, + STATE(1034), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(640), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(630), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(642), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(626), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(1053), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -47597,7 +45215,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -47613,14 +45231,14 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [26120] = 5, + [26238] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(852), 1, + ACTIONS(846), 1, anon_sym_else, - STATE(525), 1, + STATE(513), 1, sym_else_clause, - ACTIONS(1118), 12, + ACTIONS(1126), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -47633,7 +45251,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1120), 33, + ACTIONS(1128), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -47667,7 +45285,7 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [26179] = 18, + [26297] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -47686,11 +45304,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1084), 1, + STATE(915), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -47710,7 +45328,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -47718,7 +45336,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -47734,7 +45352,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [26264] = 18, + [26382] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -47745,19 +45363,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(331), 1, + ACTIONS(379), 1, sym_identifier, - ACTIONS(337), 1, + ACTIONS(385), 1, anon_sym_await, - ACTIONS(559), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + STATE(683), 1, sym_string, - STATE(1065), 1, + STATE(710), 1, + sym_primary_expression, + STATE(1124), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, @@ -47771,13 +45389,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -47785,7 +45403,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -47801,117 +45419,154 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [26349] = 18, + [26467] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, - anon_sym_LBRACE, - ACTIONS(69), 1, - anon_sym_not, - ACTIONS(71), 1, - anon_sym_lambda, - ACTIONS(81), 1, + ACTIONS(1159), 12, sym__string_start, - ACTIONS(331), 1, - sym_identifier, - ACTIONS(337), 1, - anon_sym_await, - ACTIONS(559), 1, + ts_builtin_sym_end, anon_sym_LPAREN, - ACTIONS(563), 1, - anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, - sym_string, - STATE(997), 1, - sym_expression, - ACTIONS(75), 2, - sym_ellipsis, - sym_float, - ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, anon_sym_TILDE, - ACTIONS(77), 4, + sym_ellipsis, + sym_float, + ACTIONS(1157), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, sym_integer, + sym_identifier, + anon_sym_await, sym_true, sym_false, sym_none, - ACTIONS(333), 5, + [26522] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1130), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1132), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, anon_sym_exec, anon_sym_type, - STATE(1009), 7, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - sym_await, - STATE(797), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [26434] = 18, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [26577] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(295), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(315), 1, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, sym__string_start, - ACTIONS(602), 1, + ACTIONS(379), 1, sym_identifier, - ACTIONS(604), 1, + ACTIONS(385), 1, + anon_sym_await, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(612), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - ACTIONS(614), 1, - anon_sym_not, - ACTIONS(616), 1, - anon_sym_lambda, - ACTIONS(618), 1, - anon_sym_await, - STATE(600), 1, + STATE(683), 1, sym_string, - STATE(643), 1, + STATE(710), 1, sym_primary_expression, - STATE(909), 1, + STATE(1064), 1, sym_expression, - ACTIONS(309), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(606), 5, + ACTIONS(381), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(974), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -47919,7 +45574,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -47935,50 +45590,50 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [26519] = 18, + [26662] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(69), 1, + ACTIONS(299), 1, anon_sym_not, - ACTIONS(71), 1, + ACTIONS(305), 1, anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(331), 1, - sym_identifier, - ACTIONS(337), 1, + ACTIONS(313), 1, anon_sym_await, - ACTIONS(559), 1, - anon_sym_LPAREN, - ACTIONS(563), 1, - anon_sym_LBRACK, - STATE(684), 1, - sym_primary_expression, - STATE(713), 1, + ACTIONS(315), 1, + sym__string_start, + STATE(607), 1, sym_string, - STATE(1066), 1, + STATE(630), 1, + sym_primary_expression, + STATE(1151), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(311), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(333), 5, + ACTIONS(285), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1009), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -47986,7 +45641,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(797), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -48002,7 +45657,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [26604] = 18, + [26747] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(274), 1, @@ -48021,11 +45676,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, STATE(630), 1, sym_primary_expression, - STATE(1159), 1, + STATE(1075), 1, sym_expression, ACTIONS(309), 2, sym_ellipsis, @@ -48045,7 +45700,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(900), 7, + STATE(905), 7, sym_named_expression, sym_not_operator, sym_boolean_operator, @@ -48053,7 +45708,7 @@ static const uint16_t ts_small_parse_table[] = { sym_lambda, sym_conditional_expression, sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -48069,7 +45724,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [26689] = 3, + [26832] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1178), 12, @@ -48120,12 +45775,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [26743] = 3, + [26886] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1178), 12, + ACTIONS(1182), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -48136,7 +45791,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1176), 34, + ACTIONS(1180), 34, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48153,9 +45808,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_while, anon_sym_try, - anon_sym_finally, anon_sym_with, anon_sym_match, + anon_sym_case, anon_sym_def, anon_sym_global, anon_sym_nonlocal, @@ -48171,10 +45826,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [26797] = 3, + [26940] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1182), 12, + ACTIONS(1186), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -48187,7 +45842,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1180), 34, + ACTIONS(1184), 34, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48222,10 +45877,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [26851] = 3, + [26994] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1184), 12, + ACTIONS(1178), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -48238,7 +45893,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1186), 34, + ACTIONS(1176), 34, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48255,9 +45910,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_while, anon_sym_try, + anon_sym_finally, anon_sym_with, anon_sym_match, - anon_sym_case, anon_sym_def, anon_sym_global, anon_sym_nonlocal, @@ -48273,7 +45928,7 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [26905] = 3, + [27048] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1190), 12, @@ -48324,10 +45979,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [26959] = 3, + [27102] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1182), 12, + ACTIONS(1190), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -48340,7 +45995,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1180), 34, + ACTIONS(1188), 34, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48357,9 +46012,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_while, anon_sym_try, + anon_sym_finally, anon_sym_with, anon_sym_match, - anon_sym_case, anon_sym_def, anon_sym_global, anon_sym_nonlocal, @@ -48375,12 +46030,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27013] = 3, + [27156] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1194), 12, - sym__dedent, + ACTIONS(1192), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -48391,7 +46046,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1192), 34, + ACTIONS(1194), 34, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48426,7 +46081,7 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27067] = 3, + [27210] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1198), 12, @@ -48477,10 +46132,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27121] = 3, + [27264] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1198), 12, + ACTIONS(1182), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -48493,7 +46148,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1196), 34, + ACTIONS(1180), 34, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48528,10 +46183,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27175] = 3, + [27318] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1194), 12, + ACTIONS(1186), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -48544,7 +46199,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1192), 34, + ACTIONS(1184), 34, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48579,10 +46234,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27229] = 3, + [27372] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1184), 12, + ACTIONS(1192), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -48595,7 +46250,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1186), 34, + ACTIONS(1194), 34, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48630,10 +46285,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27283] = 3, + [27426] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1190), 12, + ACTIONS(1198), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -48646,7 +46301,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1188), 34, + ACTIONS(1196), 34, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48663,9 +46318,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_while, anon_sym_try, - anon_sym_finally, anon_sym_with, anon_sym_match, + anon_sym_case, anon_sym_def, anon_sym_global, anon_sym_nonlocal, @@ -48681,7 +46336,7 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27337] = 3, + [27480] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1200), 12, @@ -48731,12 +46386,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27390] = 3, + [27533] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1206), 12, - sym__dedent, + ACTIONS(1204), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -48747,7 +46402,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1204), 33, + ACTIONS(1206), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48781,7 +46436,7 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27443] = 3, + [27586] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1208), 12, @@ -48831,12 +46486,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27496] = 3, + [27639] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1212), 12, + ACTIONS(1214), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -48847,7 +46502,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1214), 33, + ACTIONS(1212), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48881,12 +46536,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27549] = 3, + [27692] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1216), 12, + ACTIONS(1200), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -48897,7 +46552,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1218), 33, + ACTIONS(1202), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48931,12 +46586,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27602] = 3, + [27745] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1222), 12, - sym__dedent, + ACTIONS(1216), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -48947,7 +46602,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1220), 33, + ACTIONS(1218), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48981,12 +46636,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27655] = 3, + [27798] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1224), 12, + ACTIONS(1108), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -48997,7 +46652,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1226), 33, + ACTIONS(1110), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49031,10 +46686,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27708] = 3, + [27851] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1132), 12, + ACTIONS(1220), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -49047,7 +46702,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1130), 33, + ACTIONS(1222), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49081,12 +46736,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27761] = 3, + [27904] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1230), 12, - sym__dedent, + ACTIONS(1224), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49097,7 +46752,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1228), 33, + ACTIONS(1226), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49131,12 +46786,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27814] = 3, + [27957] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1234), 12, - sym__dedent, + ACTIONS(1108), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49147,7 +46802,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1232), 33, + ACTIONS(1110), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49181,10 +46836,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27867] = 3, + [28010] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(860), 12, + ACTIONS(1228), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -49197,7 +46852,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(858), 33, + ACTIONS(1230), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49231,12 +46886,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27920] = 3, + [28063] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1238), 12, - sym__dedent, + ACTIONS(1232), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49247,7 +46902,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1236), 33, + ACTIONS(1234), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49281,12 +46936,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27973] = 3, + [28116] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1242), 12, - sym__dedent, + ACTIONS(844), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49297,7 +46952,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1240), 33, + ACTIONS(842), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49331,10 +46986,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28026] = 3, + [28169] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1246), 12, + ACTIONS(844), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -49347,7 +47002,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1244), 33, + ACTIONS(842), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49381,12 +47036,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28079] = 3, + [28222] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1248), 12, + ACTIONS(1238), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49397,7 +47052,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1250), 33, + ACTIONS(1236), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49431,12 +47086,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28132] = 3, + [28275] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1252), 12, + ACTIONS(1242), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49447,7 +47102,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1254), 33, + ACTIONS(1240), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49481,12 +47136,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28185] = 3, + [28328] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1252), 12, - sym__dedent, + ACTIONS(1244), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49497,7 +47152,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1254), 33, + ACTIONS(1246), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49531,10 +47186,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28238] = 3, + [28381] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(842), 12, + ACTIONS(1248), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -49547,7 +47202,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(844), 33, + ACTIONS(1250), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49581,10 +47236,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28291] = 3, + [28434] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1206), 12, + ACTIONS(1238), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -49597,7 +47252,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1204), 33, + ACTIONS(1236), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49631,10 +47286,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28344] = 3, + [28487] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(860), 12, + ACTIONS(1254), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -49647,7 +47302,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(858), 33, + ACTIONS(1252), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49681,7 +47336,7 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28397] = 3, + [28540] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1258), 12, @@ -49731,12 +47386,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28450] = 3, + [28593] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1260), 12, + ACTIONS(1262), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49747,7 +47402,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1262), 33, + ACTIONS(1260), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49781,7 +47436,7 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28503] = 3, + [28646] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1264), 12, @@ -49831,10 +47486,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28556] = 3, + [28699] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1132), 12, + ACTIONS(1270), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -49847,57 +47502,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1130), 33, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, - anon_sym_print, - anon_sym_assert, - anon_sym_return, - anon_sym_del, - anon_sym_raise, - anon_sym_pass, - anon_sym_break, - anon_sym_continue, - anon_sym_if, - anon_sym_async, - anon_sym_for, - anon_sym_while, - anon_sym_try, - anon_sym_with, - anon_sym_match, - anon_sym_def, - anon_sym_global, - anon_sym_nonlocal, - anon_sym_exec, - anon_sym_type, - anon_sym_class, - anon_sym_not, - anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [28609] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1268), 12, - sym__string_start, - ts_builtin_sym_end, - anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(1270), 33, + ACTIONS(1268), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49931,7 +47536,7 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28662] = 3, + [28752] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1274), 12, @@ -49981,12 +47586,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28715] = 3, + [28805] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1159), 12, + ACTIONS(1278), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49997,7 +47602,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1157), 33, + ACTIONS(1276), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -50031,10 +47636,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28768] = 3, + [28858] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1276), 12, + ACTIONS(1106), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -50047,7 +47652,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1278), 33, + ACTIONS(1104), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -50081,12 +47686,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28821] = 3, + [28911] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1212), 12, - sym__dedent, + ACTIONS(1242), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -50097,7 +47702,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1214), 33, + ACTIONS(1240), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -50131,12 +47736,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28874] = 3, + [28964] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1276), 12, - sym__dedent, + ACTIONS(1280), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -50147,7 +47752,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1278), 33, + ACTIONS(1282), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -50181,12 +47786,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28927] = 3, + [29017] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1282), 12, - sym__dedent, + ACTIONS(1284), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -50197,7 +47802,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1280), 33, + ACTIONS(1286), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -50231,12 +47836,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28980] = 3, + [29070] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1284), 12, + ACTIONS(1290), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -50247,7 +47852,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1286), 33, + ACTIONS(1288), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -50281,10 +47886,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29033] = 3, + [29123] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1290), 12, + ACTIONS(1294), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -50297,7 +47902,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1288), 33, + ACTIONS(1292), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -50331,12 +47936,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29086] = 3, + [29176] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1294), 12, - sym__dedent, + ACTIONS(1296), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -50347,7 +47952,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1292), 33, + ACTIONS(1298), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -50381,12 +47986,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29139] = 3, + [29229] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1298), 12, - sym__dedent, + ACTIONS(1300), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -50397,7 +48002,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1296), 33, + ACTIONS(1302), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -50431,10 +48036,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29192] = 3, + [29282] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1300), 12, + ACTIONS(1304), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -50447,7 +48052,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1302), 33, + ACTIONS(1306), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -50481,10 +48086,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29245] = 3, + [29335] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1304), 12, + ACTIONS(1308), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -50497,7 +48102,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1306), 33, + ACTIONS(1310), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -50531,10 +48136,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29298] = 3, + [29388] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1310), 12, + ACTIONS(1314), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -50547,7 +48152,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1308), 33, + ACTIONS(1312), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -50581,12 +48186,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29351] = 3, + [29441] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1312), 12, + ACTIONS(1318), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -50597,7 +48202,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1314), 33, + ACTIONS(1316), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -50631,12 +48236,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29404] = 3, + [29494] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1310), 12, + ACTIONS(1322), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -50647,7 +48252,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1308), 33, + ACTIONS(1320), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -50681,10 +48286,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29457] = 3, + [29547] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1290), 12, + ACTIONS(1324), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -50697,7 +48302,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1288), 33, + ACTIONS(1326), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -50731,10 +48336,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29510] = 3, + [29600] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1294), 12, + ACTIONS(1328), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -50747,7 +48352,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1292), 33, + ACTIONS(1330), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -50781,10 +48386,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29563] = 3, + [29653] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1248), 12, + ACTIONS(1106), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -50797,7 +48402,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1250), 33, + ACTIONS(1104), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -50831,10 +48436,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29616] = 3, + [29706] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1304), 12, + ACTIONS(1334), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -50847,7 +48452,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1306), 33, + ACTIONS(1332), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -50881,12 +48486,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29669] = 3, + [29759] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1316), 12, + ACTIONS(1338), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -50897,7 +48502,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1318), 33, + ACTIONS(1336), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -50931,12 +48536,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29722] = 3, + [29812] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1222), 12, + ACTIONS(1220), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -50947,7 +48552,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1220), 33, + ACTIONS(1222), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -50981,10 +48586,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29775] = 3, + [29865] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1320), 12, + ACTIONS(1340), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -50997,7 +48602,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1322), 33, + ACTIONS(1342), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -51031,12 +48636,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29828] = 3, + [29918] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1326), 12, - sym__dedent, + ACTIONS(1344), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -51047,7 +48652,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1324), 33, + ACTIONS(1346), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -51081,10 +48686,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29881] = 3, + [29971] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1246), 12, + ACTIONS(1348), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -51097,7 +48702,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1244), 33, + ACTIONS(1350), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -51131,12 +48736,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29934] = 3, + [30024] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1242), 12, + ACTIONS(1216), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -51147,7 +48752,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1240), 33, + ACTIONS(1218), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -51181,12 +48786,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29987] = 3, + [30077] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1238), 12, + ACTIONS(1228), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -51197,7 +48802,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1236), 33, + ACTIONS(1230), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -51231,10 +48836,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30040] = 3, + [30130] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1216), 12, + ACTIONS(1348), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -51247,7 +48852,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1218), 33, + ACTIONS(1350), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -51281,10 +48886,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30093] = 3, + [30183] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1328), 12, + ACTIONS(1334), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -51297,7 +48902,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1330), 33, + ACTIONS(1332), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -51331,12 +48936,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30146] = 3, + [30236] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1282), 12, + ACTIONS(1308), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -51347,7 +48952,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1280), 33, + ACTIONS(1310), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -51381,12 +48986,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30199] = 3, + [30289] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1224), 12, - sym__dedent, + ACTIONS(1352), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -51397,7 +49002,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1226), 33, + ACTIONS(1354), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -51431,10 +49036,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30252] = 3, + [30342] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1332), 12, + ACTIONS(1356), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -51447,7 +49052,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1334), 33, + ACTIONS(1358), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -51481,10 +49086,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30305] = 3, + [30395] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1298), 12, + ACTIONS(1360), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -51497,7 +49102,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1296), 33, + ACTIONS(1362), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -51531,12 +49136,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30358] = 3, + [30448] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1328), 12, - sym__dedent, + ACTIONS(1278), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -51547,7 +49152,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1330), 33, + ACTIONS(1276), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -51581,12 +49186,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30411] = 3, + [30501] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1284), 12, - sym__dedent, + ACTIONS(1338), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -51597,7 +49202,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1286), 33, + ACTIONS(1336), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -51631,12 +49236,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30464] = 3, + [30554] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1234), 12, + ACTIONS(1340), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -51647,7 +49252,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1232), 33, + ACTIONS(1342), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -51681,12 +49286,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30517] = 3, + [30607] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1230), 12, + ACTIONS(1328), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -51697,7 +49302,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1228), 33, + ACTIONS(1330), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -51731,10 +49336,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30570] = 3, + [30660] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1300), 12, + ACTIONS(1360), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -51747,7 +49352,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1302), 33, + ACTIONS(1362), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -51781,12 +49386,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30623] = 3, + [30713] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1336), 12, + ACTIONS(1304), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -51797,7 +49402,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1338), 33, + ACTIONS(1306), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -51831,10 +49436,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30676] = 3, + [30766] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1320), 12, + ACTIONS(1366), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -51847,7 +49452,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1322), 33, + ACTIONS(1364), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -51881,10 +49486,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30729] = 3, + [30819] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1340), 12, + ACTIONS(1274), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -51897,7 +49502,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1342), 33, + ACTIONS(1272), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -51931,10 +49536,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30782] = 3, + [30872] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1316), 12, + ACTIONS(1370), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -51947,7 +49552,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1318), 33, + ACTIONS(1368), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -51981,10 +49586,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30835] = 3, + [30925] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1312), 12, + ACTIONS(1374), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -51997,7 +49602,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1314), 33, + ACTIONS(1372), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -52031,10 +49636,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30888] = 3, + [30978] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1336), 12, + ACTIONS(1248), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -52047,7 +49652,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1338), 33, + ACTIONS(1250), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -52081,12 +49686,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30941] = 3, + [31031] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1340), 12, - sym__dedent, + ACTIONS(1214), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -52097,7 +49702,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1342), 33, + ACTIONS(1212), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -52131,12 +49736,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30994] = 3, + [31084] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1258), 12, + ACTIONS(1284), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -52147,7 +49752,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1256), 33, + ACTIONS(1286), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -52181,12 +49786,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [31047] = 3, + [31137] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1346), 12, - sym__dedent, + ACTIONS(1376), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -52197,7 +49802,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1344), 33, + ACTIONS(1378), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -52231,12 +49836,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [31100] = 3, + [31190] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(842), 12, - sym__dedent, + ACTIONS(1254), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -52247,7 +49852,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(844), 33, + ACTIONS(1252), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -52281,10 +49886,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [31153] = 3, + [31243] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1346), 12, + ACTIONS(1258), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -52297,7 +49902,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1344), 33, + ACTIONS(1256), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -52331,12 +49936,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [31206] = 3, + [31296] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1350), 12, - sym__dedent, + ACTIONS(1262), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -52347,7 +49952,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1348), 33, + ACTIONS(1260), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -52381,10 +49986,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [31259] = 3, + [31349] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1354), 12, + ACTIONS(1224), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -52397,7 +50002,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1352), 33, + ACTIONS(1226), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -52431,10 +50036,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [31312] = 3, + [31402] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1354), 12, + ACTIONS(1270), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -52447,7 +50052,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1352), 33, + ACTIONS(1268), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -52481,12 +50086,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [31365] = 3, + [31455] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1356), 12, + ACTIONS(1208), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -52497,7 +50102,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1358), 33, + ACTIONS(1210), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -52531,12 +50136,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [31418] = 3, + [31508] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1356), 12, - sym__dedent, + ACTIONS(1366), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -52547,7 +50152,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1358), 33, + ACTIONS(1364), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -52581,12 +50186,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [31471] = 3, + [31561] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1360), 12, + ACTIONS(1264), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -52597,7 +50202,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1362), 33, + ACTIONS(1266), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -52631,10 +50236,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [31524] = 3, + [31614] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1274), 12, + ACTIONS(854), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -52647,7 +50252,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1272), 33, + ACTIONS(852), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -52681,10 +50286,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [31577] = 3, + [31667] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1360), 12, + ACTIONS(1280), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -52697,7 +50302,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1362), 33, + ACTIONS(1282), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -52731,10 +50336,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [31630] = 3, + [31720] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1326), 12, + ACTIONS(1374), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -52747,7 +50352,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1324), 33, + ACTIONS(1372), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -52781,12 +50386,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [31683] = 3, + [31773] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1366), 12, - sym__dedent, + ACTIONS(1370), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -52797,7 +50402,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1364), 33, + ACTIONS(1368), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -52831,10 +50436,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [31736] = 3, + [31826] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1200), 12, + ACTIONS(854), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -52847,7 +50452,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1202), 33, + ACTIONS(852), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -52881,12 +50486,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [31789] = 3, + [31879] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1370), 12, - sym__dedent, + ACTIONS(1290), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -52897,7 +50502,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1368), 33, + ACTIONS(1288), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -52931,12 +50536,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [31842] = 3, + [31932] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1374), 12, - sym__dedent, + ACTIONS(1294), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -52947,7 +50552,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1372), 33, + ACTIONS(1292), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -52981,10 +50586,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [31895] = 3, + [31985] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1366), 12, + ACTIONS(1314), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -52997,7 +50602,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1364), 33, + ACTIONS(1312), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -53031,10 +50636,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [31948] = 3, + [32038] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1208), 12, + ACTIONS(1204), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -53047,7 +50652,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1210), 33, + ACTIONS(1206), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -53081,12 +50686,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [32001] = 3, + [32091] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1350), 12, + ACTIONS(1324), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -53097,7 +50702,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1348), 33, + ACTIONS(1326), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -53131,10 +50736,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [32054] = 3, + [32144] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1370), 12, + ACTIONS(1318), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -53147,7 +50752,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1368), 33, + ACTIONS(1316), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -53181,10 +50786,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [32107] = 3, + [32197] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1378), 12, + ACTIONS(1356), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -53197,7 +50802,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1376), 33, + ACTIONS(1358), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -53231,10 +50836,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [32160] = 3, + [32250] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1159), 12, + ACTIONS(1352), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -53247,7 +50852,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1157), 33, + ACTIONS(1354), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -53281,12 +50886,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [32213] = 3, + [32303] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1374), 12, + ACTIONS(1344), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -53297,7 +50902,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1372), 33, + ACTIONS(1346), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -53331,10 +50936,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [32266] = 3, + [32356] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1378), 12, + ACTIONS(1322), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -53347,7 +50952,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1376), 33, + ACTIONS(1320), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -53381,10 +50986,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [32319] = 3, + [32409] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1260), 12, + ACTIONS(1232), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -53397,7 +51002,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1262), 33, + ACTIONS(1234), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -53431,10 +51036,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [32372] = 3, + [32462] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1268), 12, + ACTIONS(1296), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -53447,7 +51052,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1270), 33, + ACTIONS(1298), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -53481,10 +51086,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [32425] = 3, + [32515] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1264), 12, + ACTIONS(1300), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -53497,7 +51102,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1266), 33, + ACTIONS(1302), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -53531,10 +51136,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [32478] = 3, + [32568] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1332), 12, + ACTIONS(1244), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -53547,7 +51152,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1334), 33, + ACTIONS(1246), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -53581,33 +51186,84 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [32531] = 18, + [32621] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1376), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1378), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32674] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - ACTIONS(678), 1, + ACTIONS(690), 1, sym_identifier, - ACTIONS(680), 1, + ACTIONS(692), 1, anon_sym_LPAREN, - ACTIONS(690), 1, + ACTIONS(702), 1, anon_sym_LBRACK, + ACTIONS(1380), 1, + anon_sym_RPAREN, ACTIONS(1382), 1, anon_sym_STAR, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(876), 1, - sym_pattern, - STATE(882), 1, + STATE(883), 1, sym_primary_expression, + STATE(1167), 1, + sym_pattern, + STATE(1446), 1, + sym__patterns, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(1380), 2, - anon_sym_RPAREN, - anon_sym_RBRACK, STATE(770), 2, sym_attribute, sym_subscript, @@ -53615,7 +51271,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(875), 3, + STATE(878), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, @@ -53624,14 +51280,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(684), 6, + ACTIONS(696), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 13, + STATE(622), 13, sym_binary_operator, sym_unary_operator, sym_call, @@ -53645,34 +51301,33 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [32613] = 19, + [32758] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - ACTIONS(678), 1, + ACTIONS(690), 1, sym_identifier, - ACTIONS(680), 1, + ACTIONS(692), 1, anon_sym_LPAREN, - ACTIONS(690), 1, + ACTIONS(702), 1, anon_sym_LBRACK, ACTIONS(1382), 1, anon_sym_STAR, - ACTIONS(1384), 1, - anon_sym_RPAREN, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(882), 1, - sym_primary_expression, - STATE(1146), 1, + STATE(877), 1, sym_pattern, - STATE(1434), 1, - sym__patterns, + STATE(883), 1, + sym_primary_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, + ACTIONS(1384), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, STATE(770), 2, sym_attribute, sym_subscript, @@ -53680,7 +51335,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(875), 3, + STATE(878), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, @@ -53689,14 +51344,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(684), 6, + ACTIONS(696), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 13, + STATE(622), 13, sym_binary_operator, sym_unary_operator, sym_call, @@ -53710,26 +51365,26 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [32697] = 18, + [32840] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - ACTIONS(678), 1, + ACTIONS(690), 1, sym_identifier, - ACTIONS(680), 1, + ACTIONS(692), 1, anon_sym_LPAREN, - ACTIONS(690), 1, + ACTIONS(702), 1, anon_sym_LBRACK, ACTIONS(1382), 1, anon_sym_STAR, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(876), 1, + STATE(877), 1, sym_pattern, - STATE(882), 1, + STATE(883), 1, sym_primary_expression, ACTIONS(309), 2, sym_ellipsis, @@ -53744,7 +51399,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(875), 3, + STATE(878), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, @@ -53753,14 +51408,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(684), 6, + ACTIONS(696), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 13, + STATE(622), 13, sym_binary_operator, sym_unary_operator, sym_call, @@ -53774,72 +51429,85 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [32779] = 5, + [32922] = 18, ACTIONS(3), 1, sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - STATE(599), 2, - sym_string, - aux_sym_concatenated_string_repeat1, - ACTIONS(1390), 6, - anon_sym_as, - anon_sym_STAR, - anon_sym_EQ, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1388), 34, - anon_sym_DOT, + ACTIONS(690), 1, + sym_identifier, + ACTIONS(692), 1, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_GT_GT, - anon_sym_if, - anon_sym_COLON, - anon_sym_else, - anon_sym_async, - anon_sym_for, - anon_sym_in, - anon_sym_PIPE, + ACTIONS(702), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + STATE(607), 1, + sym_string, + STATE(883), 1, + sym_primary_expression, + STATE(1221), 1, + sym_pattern, + STATE(1529), 1, + sym_pattern_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_RBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - sym_type_conversion, - [32834] = 5, + anon_sym_TILDE, + STATE(878), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(696), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(622), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [33003] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1396), 1, + ACTIONS(1392), 1, sym__string_start, - STATE(599), 2, + STATE(600), 2, sym_string, aux_sym_concatenated_string_repeat1, - ACTIONS(1394), 6, + ACTIONS(1390), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1392), 34, + ACTIONS(1388), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -53874,22 +51542,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [32889] = 5, + [33058] = 5, ACTIONS(3), 1, sym_comment, ACTIONS(315), 1, sym__string_start, - STATE(598), 2, + STATE(600), 2, sym_string, aux_sym_concatenated_string_repeat1, - ACTIONS(1053), 6, + ACTIONS(1397), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1048), 34, + ACTIONS(1395), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -53924,28 +51592,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [32944] = 18, + [33113] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - ACTIONS(678), 1, + ACTIONS(690), 1, sym_identifier, - ACTIONS(680), 1, + ACTIONS(692), 1, anon_sym_LPAREN, - ACTIONS(690), 1, + ACTIONS(702), 1, anon_sym_LBRACK, ACTIONS(1382), 1, anon_sym_STAR, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(882), 1, + STATE(883), 1, sym_primary_expression, - STATE(1305), 1, + STATE(1263), 1, sym_pattern, - STATE(1466), 1, + STATE(1413), 1, sym_pattern_list, ACTIONS(309), 2, sym_ellipsis, @@ -53957,7 +51625,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(875), 3, + STATE(878), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, @@ -53966,14 +51634,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(684), 6, + ACTIONS(696), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 13, + STATE(622), 13, sym_binary_operator, sym_unary_operator, sym_call, @@ -53987,28 +51655,28 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [33025] = 18, + [33194] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - ACTIONS(678), 1, + ACTIONS(690), 1, sym_identifier, - ACTIONS(680), 1, + ACTIONS(692), 1, anon_sym_LPAREN, - ACTIONS(690), 1, + ACTIONS(702), 1, anon_sym_LBRACK, ACTIONS(1382), 1, anon_sym_STAR, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(882), 1, + STATE(883), 1, sym_primary_expression, - STATE(1306), 1, + STATE(1305), 1, sym_pattern, - STATE(1454), 1, + STATE(1476), 1, sym_pattern_list, ACTIONS(309), 2, sym_ellipsis, @@ -54020,7 +51688,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(875), 3, + STATE(878), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, @@ -54029,14 +51697,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(684), 6, + ACTIONS(696), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 13, + STATE(622), 13, sym_binary_operator, sym_unary_operator, sym_call, @@ -54050,28 +51718,28 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [33106] = 18, + [33275] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - ACTIONS(678), 1, + ACTIONS(690), 1, sym_identifier, - ACTIONS(680), 1, + ACTIONS(692), 1, anon_sym_LPAREN, - ACTIONS(690), 1, + ACTIONS(702), 1, anon_sym_LBRACK, ACTIONS(1382), 1, anon_sym_STAR, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(882), 1, + STATE(883), 1, sym_primary_expression, - STATE(1197), 1, + STATE(1259), 1, sym_pattern, - STATE(1522), 1, + STATE(1501), 1, sym_pattern_list, ACTIONS(309), 2, sym_ellipsis, @@ -54083,7 +51751,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(875), 3, + STATE(878), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, @@ -54092,14 +51760,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(684), 6, + ACTIONS(696), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 13, + STATE(622), 13, sym_binary_operator, sym_unary_operator, sym_call, @@ -54113,28 +51781,28 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [33187] = 18, + [33356] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - ACTIONS(678), 1, + ACTIONS(690), 1, sym_identifier, - ACTIONS(680), 1, + ACTIONS(692), 1, anon_sym_LPAREN, - ACTIONS(690), 1, + ACTIONS(702), 1, anon_sym_LBRACK, ACTIONS(1382), 1, anon_sym_STAR, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(882), 1, + STATE(883), 1, sym_primary_expression, - STATE(1199), 1, + STATE(1325), 1, sym_pattern, - STATE(1519), 1, + STATE(1461), 1, sym_pattern_list, ACTIONS(309), 2, sym_ellipsis, @@ -54146,7 +51814,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(875), 3, + STATE(878), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, @@ -54155,14 +51823,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(684), 6, + ACTIONS(696), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 13, + STATE(622), 13, sym_binary_operator, sym_unary_operator, sym_call, @@ -54176,28 +51844,28 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [33268] = 18, + [33437] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - ACTIONS(678), 1, + ACTIONS(690), 1, sym_identifier, - ACTIONS(680), 1, + ACTIONS(692), 1, anon_sym_LPAREN, - ACTIONS(690), 1, + ACTIONS(702), 1, anon_sym_LBRACK, ACTIONS(1382), 1, anon_sym_STAR, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(882), 1, + STATE(883), 1, sym_primary_expression, - STATE(1276), 1, + STATE(1223), 1, sym_pattern, - STATE(1421), 1, + STATE(1526), 1, sym_pattern_list, ACTIONS(309), 2, sym_ellipsis, @@ -54209,7 +51877,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(875), 3, + STATE(878), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, @@ -54218,14 +51886,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(684), 6, + ACTIONS(696), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 13, + STATE(622), 13, sym_binary_operator, sym_unary_operator, sym_call, @@ -54239,89 +51907,76 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [33349] = 18, + [33518] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(295), 1, - anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - ACTIONS(678), 1, - sym_identifier, - ACTIONS(680), 1, - anon_sym_LPAREN, - ACTIONS(690), 1, - anon_sym_LBRACK, - ACTIONS(1382), 1, - anon_sym_STAR, - STATE(600), 1, + STATE(601), 2, sym_string, - STATE(882), 1, - sym_primary_expression, - STATE(1293), 1, - sym_pattern, - STATE(1419), 1, - sym_pattern_list, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - STATE(770), 2, - sym_attribute, - sym_subscript, - ACTIONS(301), 3, + aux_sym_concatenated_string_repeat1, + ACTIONS(1036), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1031), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, anon_sym_DASH, anon_sym_PLUS, - anon_sym_TILDE, - STATE(875), 3, - sym_tuple_pattern, - sym_list_pattern, - sym_list_splat_pattern, - ACTIONS(311), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(684), 6, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - anon_sym_await, - STATE(642), 13, - sym_binary_operator, - sym_unary_operator, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [33430] = 17, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [33573] = 17, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - ACTIONS(678), 1, + ACTIONS(690), 1, sym_identifier, - ACTIONS(680), 1, + ACTIONS(692), 1, anon_sym_LPAREN, - ACTIONS(690), 1, + ACTIONS(702), 1, anon_sym_LBRACK, ACTIONS(1382), 1, anon_sym_STAR, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(876), 1, + STATE(877), 1, sym_pattern, - STATE(882), 1, + STATE(883), 1, sym_primary_expression, ACTIONS(309), 2, sym_ellipsis, @@ -54333,7 +51988,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(875), 3, + STATE(878), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, @@ -54342,14 +51997,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(684), 6, + ACTIONS(696), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 13, + STATE(622), 13, sym_binary_operator, sym_unary_operator, sym_call, @@ -54363,26 +52018,26 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [33508] = 17, + [33651] = 17, ACTIONS(3), 1, sym_comment, ACTIONS(295), 1, anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - ACTIONS(678), 1, + ACTIONS(690), 1, sym_identifier, - ACTIONS(680), 1, + ACTIONS(692), 1, anon_sym_LPAREN, - ACTIONS(690), 1, + ACTIONS(702), 1, anon_sym_LBRACK, ACTIONS(1382), 1, anon_sym_STAR, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(882), 1, + STATE(883), 1, sym_primary_expression, - STATE(1281), 1, + STATE(1215), 1, sym_pattern, ACTIONS(309), 2, sym_ellipsis, @@ -54394,7 +52049,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(875), 3, + STATE(878), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, @@ -54403,14 +52058,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(684), 6, + ACTIONS(696), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 13, + STATE(622), 13, sym_binary_operator, sym_unary_operator, sym_call, @@ -54424,7 +52079,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [33586] = 3, + [33729] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1401), 6, @@ -54470,7 +52125,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [33635] = 3, + [33778] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1405), 6, @@ -54516,7 +52171,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [33684] = 3, + [33827] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1409), 6, @@ -54561,7 +52216,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [33732] = 3, + [33875] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1413), 6, @@ -54606,17 +52261,152 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [33780] = 3, + [33923] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1417), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1415), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [33971] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1421), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1419), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34019] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(276), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34067] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1417), 6, + ACTIONS(1425), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1415), 34, + ACTIONS(1423), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -54651,17 +52441,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [33828] = 3, + [34115] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1421), 6, + ACTIONS(1429), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1419), 34, + ACTIONS(1427), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -54696,17 +52486,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [33876] = 3, + [34163] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1425), 6, + ACTIONS(1421), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1423), 34, + ACTIONS(1419), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -54741,17 +52531,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [33924] = 3, + [34211] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1421), 6, + ACTIONS(1433), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1419), 34, + ACTIONS(1431), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -54786,107 +52576,79 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [33972] = 3, + [34259] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(1429), 6, - anon_sym_as, - anon_sym_STAR, - anon_sym_EQ, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1427), 34, + ACTIONS(1435), 1, anon_sym_DOT, + ACTIONS(1437), 1, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_GT_GT, - anon_sym_if, - anon_sym_COLON, - anon_sym_else, - anon_sym_async, - anon_sym_for, - anon_sym_in, + ACTIONS(1441), 1, + anon_sym_as, + ACTIONS(1449), 1, anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(1453), 1, anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_RBRACE, + ACTIONS(1455), 1, anon_sym_STAR_STAR, - anon_sym_AT, + ACTIONS(1459), 1, anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, + ACTIONS(1461), 1, anon_sym_AMP, + ACTIONS(1463), 1, anon_sym_CARET, + ACTIONS(1467), 1, + anon_sym_is, + STATE(869), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1443), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1445), 2, + anon_sym_GT_GT, anon_sym_LT_LT, + ACTIONS(1451), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(1465), 2, + anon_sym_LT, + anon_sym_GT, + STATE(634), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1457), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1447), 6, + anon_sym_in, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, - anon_sym_is, - sym_type_conversion, - [34020] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(276), 6, - anon_sym_as, - anon_sym_STAR, - anon_sym_EQ, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(303), 34, - anon_sym_DOT, - anon_sym_LPAREN, + ACTIONS(1439), 10, anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_GT_GT, anon_sym_if, anon_sym_COLON, - anon_sym_else, anon_sym_async, anon_sym_for, - anon_sym_in, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, anon_sym_RBRACK, anon_sym_RBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_not, anon_sym_and, anon_sym_or, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - sym_type_conversion, - [34068] = 3, + [34341] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1433), 6, + ACTIONS(1036), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1431), 34, + ACTIONS(1031), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -54921,17 +52683,74 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [34116] = 3, + [34389] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1469), 1, + sym_identifier, + STATE(607), 1, + sym_string, + STATE(883), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(767), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(1471), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(1473), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(622), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [34461] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1437), 6, + ACTIONS(1477), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1435), 34, + ACTIONS(1475), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -54966,17 +52785,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [34164] = 3, + [34509] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1441), 6, + ACTIONS(1481), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1439), 34, + ACTIONS(1479), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -55011,17 +52830,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [34212] = 3, + [34557] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1445), 6, + ACTIONS(1477), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1443), 34, + ACTIONS(1475), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -55056,17 +52875,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [34260] = 3, + [34605] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1449), 6, + ACTIONS(1485), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1447), 34, + ACTIONS(1483), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -55101,17 +52920,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [34308] = 3, + [34653] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 6, + ACTIONS(1489), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1451), 34, + ACTIONS(1487), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -55146,17 +52965,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [34356] = 3, + [34701] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1457), 6, + ACTIONS(1493), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1455), 34, + ACTIONS(1491), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -55191,62 +53010,79 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [34404] = 3, + [34749] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(1461), 6, - anon_sym_as, - anon_sym_STAR, - anon_sym_EQ, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1459), 34, + ACTIONS(1435), 1, anon_sym_DOT, + ACTIONS(1437), 1, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_GT_GT, - anon_sym_if, - anon_sym_COLON, - anon_sym_else, - anon_sym_async, - anon_sym_for, - anon_sym_in, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(1441), 1, + anon_sym_EQ, + ACTIONS(1453), 1, anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_RBRACE, + ACTIONS(1501), 1, + anon_sym_PIPE, + ACTIONS(1505), 1, anon_sym_STAR_STAR, - anon_sym_AT, + ACTIONS(1509), 1, anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, + ACTIONS(1511), 1, anon_sym_AMP, + ACTIONS(1513), 1, anon_sym_CARET, + ACTIONS(1517), 1, + anon_sym_is, + STATE(871), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1495), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1497), 2, + anon_sym_GT_GT, anon_sym_LT_LT, + ACTIONS(1503), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(1515), 2, + anon_sym_LT, + anon_sym_GT, + STATE(634), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1507), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1499), 6, + anon_sym_in, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, - anon_sym_is, + ACTIONS(1439), 10, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_and, + anon_sym_or, sym_type_conversion, - [34452] = 3, + [34831] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1465), 6, + ACTIONS(1413), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1463), 34, + ACTIONS(1411), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -55281,17 +53117,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [34500] = 3, + [34879] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1469), 6, + ACTIONS(1521), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1467), 34, + ACTIONS(1519), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -55326,17 +53162,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [34548] = 3, + [34927] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1473), 6, + ACTIONS(1525), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1471), 34, + ACTIONS(1523), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -55371,79 +53207,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [34596] = 20, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1475), 1, - anon_sym_DOT, - ACTIONS(1477), 1, - anon_sym_LPAREN, - ACTIONS(1487), 1, - anon_sym_PIPE, - ACTIONS(1491), 1, - anon_sym_LBRACK, - ACTIONS(1493), 1, - anon_sym_STAR_STAR, - ACTIONS(1495), 1, - anon_sym_EQ, - ACTIONS(1499), 1, - anon_sym_not, - ACTIONS(1501), 1, - anon_sym_AMP, - ACTIONS(1503), 1, - anon_sym_CARET, - ACTIONS(1507), 1, - anon_sym_is, - STATE(870), 1, - aux_sym_comparison_operator_repeat1, - ACTIONS(1481), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(1483), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1489), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(1505), 2, - anon_sym_LT, - anon_sym_GT, - STATE(633), 2, - sym_argument_list, - sym_generator_expression, - ACTIONS(1497), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1485), 6, - anon_sym_in, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - ACTIONS(1479), 10, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_if, - anon_sym_COLON, - anon_sym_else, - anon_sym_RBRACK, - anon_sym_RBRACE, - anon_sym_and, - anon_sym_or, - sym_type_conversion, - [34678] = 3, + [34975] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1511), 6, + ACTIONS(1529), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1509), 34, + ACTIONS(1527), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -55478,17 +53252,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [34726] = 3, + [35023] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1417), 6, + ACTIONS(1533), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1415), 34, + ACTIONS(1531), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -55523,17 +53297,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [34774] = 3, + [35071] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1515), 6, + ACTIONS(1537), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1513), 34, + ACTIONS(1535), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -55568,17 +53342,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [34822] = 3, + [35119] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1519), 6, + ACTIONS(1541), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1517), 34, + ACTIONS(1539), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -55613,17 +53387,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [34870] = 3, + [35167] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1523), 6, + ACTIONS(1545), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1521), 34, + ACTIONS(1543), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -55658,74 +53432,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [34918] = 15, + [35215] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(293), 1, - anon_sym_LBRACK, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(1525), 1, - sym_identifier, - STATE(600), 1, - sym_string, - STATE(882), 1, - sym_primary_expression, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - STATE(762), 2, - sym_attribute, - sym_subscript, - ACTIONS(301), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(1527), 3, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_COLON, - ACTIONS(311), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(1529), 6, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - anon_sym_await, - STATE(642), 13, - sym_binary_operator, - sym_unary_operator, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [34990] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1533), 6, + ACTIONS(1493), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1531), 34, + ACTIONS(1491), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -55760,17 +53477,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [35038] = 3, + [35263] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1537), 6, + ACTIONS(1549), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1535), 34, + ACTIONS(1547), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -55805,17 +53522,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [35086] = 3, + [35311] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1425), 6, + ACTIONS(1553), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1423), 34, + ACTIONS(1551), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -55850,17 +53567,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [35134] = 3, + [35359] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1519), 6, + ACTIONS(1557), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1517), 34, + ACTIONS(1555), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -55895,17 +53612,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [35182] = 3, + [35407] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1541), 6, + ACTIONS(1561), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1539), 34, + ACTIONS(1559), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -55940,17 +53657,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [35230] = 3, + [35455] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1053), 6, + ACTIONS(1565), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1048), 34, + ACTIONS(1563), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -55985,69 +53702,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [35278] = 20, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1475), 1, - anon_sym_DOT, - ACTIONS(1477), 1, - anon_sym_LPAREN, - ACTIONS(1491), 1, - anon_sym_LBRACK, - ACTIONS(1495), 1, - anon_sym_as, - ACTIONS(1549), 1, - anon_sym_PIPE, - ACTIONS(1553), 1, - anon_sym_STAR_STAR, - ACTIONS(1557), 1, - anon_sym_not, - ACTIONS(1559), 1, - anon_sym_AMP, - ACTIONS(1561), 1, - anon_sym_CARET, - ACTIONS(1565), 1, - anon_sym_is, - STATE(871), 1, - aux_sym_comparison_operator_repeat1, - ACTIONS(1543), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(1545), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1551), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(1563), 2, - anon_sym_LT, - anon_sym_GT, - STATE(633), 2, - sym_argument_list, - sym_generator_expression, - ACTIONS(1555), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1547), 6, - anon_sym_in, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - ACTIONS(1479), 10, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_if, - anon_sym_COLON, - anon_sym_async, - anon_sym_for, - anon_sym_RBRACK, - anon_sym_RBRACE, - anon_sym_and, - anon_sym_or, - [35360] = 3, + [35503] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1569), 6, @@ -56092,18 +53747,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [35408] = 8, + [35551] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1475), 1, + ACTIONS(1435), 1, anon_sym_DOT, - ACTIONS(1477), 1, + ACTIONS(1437), 1, anon_sym_LPAREN, - ACTIONS(1491), 1, + ACTIONS(1453), 1, anon_sym_LBRACK, - ACTIONS(1493), 1, + ACTIONS(1505), 1, anon_sym_STAR_STAR, - STATE(633), 2, + STATE(634), 2, sym_argument_list, sym_generator_expression, ACTIONS(1573), 5, @@ -56141,53 +53796,55 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [35465] = 13, + [35608] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(1475), 1, + ACTIONS(1435), 1, anon_sym_DOT, - ACTIONS(1477), 1, + ACTIONS(1437), 1, anon_sym_LPAREN, - ACTIONS(1491), 1, + ACTIONS(1453), 1, anon_sym_LBRACK, - ACTIONS(1493), 1, + ACTIONS(1501), 1, + anon_sym_PIPE, + ACTIONS(1505), 1, anon_sym_STAR_STAR, - ACTIONS(1503), 1, + ACTIONS(1511), 1, + anon_sym_AMP, + ACTIONS(1513), 1, anon_sym_CARET, - ACTIONS(1481), 2, + ACTIONS(1495), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1483), 2, + ACTIONS(1497), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1489), 2, + ACTIONS(1503), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(633), 2, + STATE(634), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1497), 3, + ACTIONS(1507), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1573), 3, + ACTIONS(1577), 3, anon_sym_EQ, anon_sym_LT, anon_sym_GT, - ACTIONS(1571), 20, + ACTIONS(1575), 18, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, anon_sym_COLON, anon_sym_else, anon_sym_in, - anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, anon_sym_not, anon_sym_and, anon_sym_or, - anon_sym_AMP, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, @@ -56195,46 +53852,48 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [35532] = 8, + [35679] = 11, ACTIONS(3), 1, sym_comment, - ACTIONS(1475), 1, + ACTIONS(1435), 1, anon_sym_DOT, - ACTIONS(1477), 1, + ACTIONS(1437), 1, anon_sym_LPAREN, - ACTIONS(1491), 1, + ACTIONS(1453), 1, anon_sym_LBRACK, - ACTIONS(1553), 1, + ACTIONS(1505), 1, anon_sym_STAR_STAR, - STATE(633), 2, - sym_argument_list, - sym_generator_expression, - ACTIONS(1573), 5, - anon_sym_as, + ACTIONS(1495), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(1503), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(634), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1507), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1581), 3, + anon_sym_EQ, anon_sym_LT, anon_sym_GT, - ACTIONS(1571), 28, + ACTIONS(1579), 23, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_GT_GT, anon_sym_if, anon_sym_COLON, - anon_sym_async, - anon_sym_for, + anon_sym_else, anon_sym_in, anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, anon_sym_RBRACK, anon_sym_RBRACE, - anon_sym_AT, anon_sym_not, anon_sym_and, anon_sym_or, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, anon_sym_AMP, anon_sym_CARET, anon_sym_LT_LT, @@ -56244,27 +53903,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [35589] = 8, + sym_type_conversion, + [35742] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1475), 1, + ACTIONS(1435), 1, anon_sym_DOT, - ACTIONS(1477), 1, + ACTIONS(1437), 1, anon_sym_LPAREN, - ACTIONS(1491), 1, + ACTIONS(1453), 1, anon_sym_LBRACK, - ACTIONS(1493), 1, + ACTIONS(1505), 1, anon_sym_STAR_STAR, - STATE(633), 2, + STATE(634), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1573), 5, + ACTIONS(1581), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1571), 28, + ACTIONS(1579), 28, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_GT_GT, @@ -56293,35 +53953,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [35646] = 11, + [35799] = 11, ACTIONS(3), 1, sym_comment, - ACTIONS(1475), 1, + ACTIONS(1435), 1, anon_sym_DOT, - ACTIONS(1477), 1, + ACTIONS(1437), 1, anon_sym_LPAREN, - ACTIONS(1491), 1, + ACTIONS(1453), 1, anon_sym_LBRACK, - ACTIONS(1553), 1, + ACTIONS(1455), 1, anon_sym_STAR_STAR, - ACTIONS(1543), 2, + ACTIONS(1443), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1551), 2, + ACTIONS(1451), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(633), 2, + STATE(634), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1555), 3, + ACTIONS(1457), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1573), 3, + ACTIONS(1581), 3, anon_sym_as, anon_sym_LT, anon_sym_GT, - ACTIONS(1571), 23, + ACTIONS(1579), 23, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_GT_GT, @@ -56345,144 +54005,155 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [35709] = 8, + [35862] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(1475), 1, + ACTIONS(1435), 1, anon_sym_DOT, - ACTIONS(1477), 1, + ACTIONS(1437), 1, anon_sym_LPAREN, - ACTIONS(1491), 1, + ACTIONS(1449), 1, + anon_sym_PIPE, + ACTIONS(1453), 1, anon_sym_LBRACK, - ACTIONS(1493), 1, + ACTIONS(1455), 1, anon_sym_STAR_STAR, - STATE(633), 2, - sym_argument_list, - sym_generator_expression, - ACTIONS(1577), 5, + ACTIONS(1461), 1, + anon_sym_AMP, + ACTIONS(1463), 1, + anon_sym_CARET, + ACTIONS(1443), 2, anon_sym_STAR, - anon_sym_EQ, anon_sym_SLASH, + ACTIONS(1445), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1451), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(634), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1457), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1577), 3, + anon_sym_as, anon_sym_LT, anon_sym_GT, - ACTIONS(1575), 28, + ACTIONS(1575), 18, anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_GT_GT, anon_sym_if, anon_sym_COLON, - anon_sym_else, + anon_sym_async, + anon_sym_for, anon_sym_in, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, anon_sym_RBRACK, anon_sym_RBRACE, - anon_sym_AT, anon_sym_not, anon_sym_and, anon_sym_or, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym_type_conversion, - [35766] = 10, + [35933] = 14, ACTIONS(3), 1, sym_comment, - ACTIONS(1475), 1, + ACTIONS(1435), 1, anon_sym_DOT, - ACTIONS(1477), 1, + ACTIONS(1437), 1, anon_sym_LPAREN, - ACTIONS(1491), 1, + ACTIONS(1453), 1, anon_sym_LBRACK, - ACTIONS(1493), 1, + ACTIONS(1455), 1, anon_sym_STAR_STAR, - ACTIONS(1481), 2, + ACTIONS(1461), 1, + anon_sym_AMP, + ACTIONS(1463), 1, + anon_sym_CARET, + ACTIONS(1443), 2, anon_sym_STAR, anon_sym_SLASH, - STATE(633), 2, + ACTIONS(1445), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1451), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(634), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1497), 3, + ACTIONS(1457), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1573), 3, - anon_sym_EQ, + ACTIONS(1581), 3, + anon_sym_as, anon_sym_LT, anon_sym_GT, - ACTIONS(1571), 25, + ACTIONS(1579), 19, anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_GT_GT, anon_sym_if, anon_sym_COLON, - anon_sym_else, + anon_sym_async, + anon_sym_for, anon_sym_in, anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, anon_sym_RBRACK, anon_sym_RBRACE, anon_sym_not, anon_sym_and, anon_sym_or, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym_type_conversion, - [35827] = 15, + [36002] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(1475), 1, + ACTIONS(1435), 1, anon_sym_DOT, - ACTIONS(1477), 1, + ACTIONS(1437), 1, anon_sym_LPAREN, - ACTIONS(1491), 1, - anon_sym_LBRACK, - ACTIONS(1549), 1, + ACTIONS(1449), 1, anon_sym_PIPE, - ACTIONS(1553), 1, + ACTIONS(1453), 1, + anon_sym_LBRACK, + ACTIONS(1455), 1, anon_sym_STAR_STAR, - ACTIONS(1559), 1, + ACTIONS(1461), 1, anon_sym_AMP, - ACTIONS(1561), 1, + ACTIONS(1463), 1, anon_sym_CARET, - ACTIONS(1543), 2, + ACTIONS(1443), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1545), 2, + ACTIONS(1445), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1551), 2, + ACTIONS(1451), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(633), 2, + STATE(634), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1555), 3, + ACTIONS(1457), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1581), 3, + ACTIONS(1585), 3, anon_sym_as, anon_sym_LT, anon_sym_GT, - ACTIONS(1579), 18, + ACTIONS(1583), 18, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, @@ -56501,42 +54172,44 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [35898] = 14, + [36073] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(1475), 1, + ACTIONS(1435), 1, anon_sym_DOT, - ACTIONS(1477), 1, + ACTIONS(1437), 1, anon_sym_LPAREN, - ACTIONS(1491), 1, + ACTIONS(1449), 1, + anon_sym_PIPE, + ACTIONS(1453), 1, anon_sym_LBRACK, - ACTIONS(1553), 1, + ACTIONS(1455), 1, anon_sym_STAR_STAR, - ACTIONS(1559), 1, + ACTIONS(1461), 1, anon_sym_AMP, - ACTIONS(1561), 1, + ACTIONS(1463), 1, anon_sym_CARET, - ACTIONS(1543), 2, + ACTIONS(1443), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1545), 2, + ACTIONS(1445), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1551), 2, + ACTIONS(1451), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(633), 2, + STATE(634), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1555), 3, + ACTIONS(1457), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1573), 3, + ACTIONS(1589), 3, anon_sym_as, anon_sym_LT, anon_sym_GT, - ACTIONS(1571), 19, + ACTIONS(1587), 18, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, @@ -56544,7 +54217,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_async, anon_sym_for, anon_sym_in, - anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, anon_sym_not, @@ -56556,32 +54228,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [35967] = 10, + [36144] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1475), 1, + ACTIONS(1435), 1, anon_sym_DOT, - ACTIONS(1477), 1, + ACTIONS(1437), 1, anon_sym_LPAREN, - ACTIONS(1491), 1, + ACTIONS(1453), 1, anon_sym_LBRACK, - ACTIONS(1553), 1, + ACTIONS(1455), 1, anon_sym_STAR_STAR, - ACTIONS(1543), 2, - anon_sym_STAR, - anon_sym_SLASH, - STATE(633), 2, + STATE(634), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1555), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1573), 3, + ACTIONS(1573), 5, anon_sym_as, + anon_sym_STAR, + anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1571), 25, + ACTIONS(1571), 28, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_GT_GT, @@ -56595,9 +54262,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PLUS, anon_sym_RBRACK, anon_sym_RBRACE, + anon_sym_AT, anon_sym_not, anon_sym_and, anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, anon_sym_AMP, anon_sym_CARET, anon_sym_LT_LT, @@ -56607,34 +54277,87 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [36028] = 8, + [36201] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(1475), 1, + ACTIONS(1435), 1, anon_sym_DOT, - ACTIONS(1477), 1, + ACTIONS(1437), 1, anon_sym_LPAREN, - ACTIONS(1491), 1, + ACTIONS(1453), 1, anon_sym_LBRACK, - ACTIONS(1553), 1, + ACTIONS(1505), 1, anon_sym_STAR_STAR, - STATE(633), 2, + ACTIONS(1513), 1, + anon_sym_CARET, + ACTIONS(1495), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1497), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1503), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(634), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1573), 5, - anon_sym_as, + ACTIONS(1507), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1581), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1579), 20, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [36268] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1435), 1, + anon_sym_DOT, + ACTIONS(1437), 1, + anon_sym_LPAREN, + ACTIONS(1453), 1, + anon_sym_LBRACK, + ACTIONS(1505), 1, + anon_sym_STAR_STAR, + STATE(634), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1581), 5, anon_sym_STAR, + anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1571), 28, + ACTIONS(1579), 28, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_GT_GT, anon_sym_if, anon_sym_COLON, - anon_sym_async, - anon_sym_for, + anon_sym_else, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, @@ -56656,52 +54379,56 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [36085] = 12, + sym_type_conversion, + [36325] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(1475), 1, + ACTIONS(1435), 1, anon_sym_DOT, - ACTIONS(1477), 1, + ACTIONS(1437), 1, anon_sym_LPAREN, - ACTIONS(1491), 1, + ACTIONS(1453), 1, anon_sym_LBRACK, - ACTIONS(1493), 1, + ACTIONS(1501), 1, + anon_sym_PIPE, + ACTIONS(1505), 1, anon_sym_STAR_STAR, - ACTIONS(1481), 2, + ACTIONS(1511), 1, + anon_sym_AMP, + ACTIONS(1513), 1, + anon_sym_CARET, + ACTIONS(1495), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1483), 2, + ACTIONS(1497), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1489), 2, + ACTIONS(1503), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(633), 2, + STATE(634), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1497), 3, + ACTIONS(1507), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1573), 3, + ACTIONS(1585), 3, anon_sym_EQ, anon_sym_LT, anon_sym_GT, - ACTIONS(1571), 21, + ACTIONS(1583), 18, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, anon_sym_COLON, anon_sym_else, anon_sym_in, - anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, anon_sym_not, anon_sym_and, anon_sym_or, - anon_sym_AMP, - anon_sym_CARET, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, @@ -56709,38 +54436,40 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [36150] = 12, + [36396] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(1475), 1, + ACTIONS(1435), 1, anon_sym_DOT, - ACTIONS(1477), 1, + ACTIONS(1437), 1, anon_sym_LPAREN, - ACTIONS(1491), 1, + ACTIONS(1453), 1, anon_sym_LBRACK, - ACTIONS(1553), 1, + ACTIONS(1455), 1, anon_sym_STAR_STAR, - ACTIONS(1543), 2, + ACTIONS(1463), 1, + anon_sym_CARET, + ACTIONS(1443), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1545), 2, + ACTIONS(1445), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1551), 2, + ACTIONS(1451), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(633), 2, + STATE(634), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1555), 3, + ACTIONS(1457), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1573), 3, + ACTIONS(1581), 3, anon_sym_as, anon_sym_LT, anon_sym_GT, - ACTIONS(1571), 21, + ACTIONS(1579), 20, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, @@ -56755,56 +54484,56 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_and, anon_sym_or, anon_sym_AMP, - anon_sym_CARET, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [36215] = 14, + [36463] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(1475), 1, + ACTIONS(1435), 1, anon_sym_DOT, - ACTIONS(1477), 1, + ACTIONS(1437), 1, anon_sym_LPAREN, - ACTIONS(1491), 1, + ACTIONS(1453), 1, anon_sym_LBRACK, - ACTIONS(1493), 1, - anon_sym_STAR_STAR, ACTIONS(1501), 1, + anon_sym_PIPE, + ACTIONS(1505), 1, + anon_sym_STAR_STAR, + ACTIONS(1511), 1, anon_sym_AMP, - ACTIONS(1503), 1, + ACTIONS(1513), 1, anon_sym_CARET, - ACTIONS(1481), 2, + ACTIONS(1495), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1483), 2, + ACTIONS(1497), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1489), 2, + ACTIONS(1503), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(633), 2, + STATE(634), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1497), 3, + ACTIONS(1507), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1573), 3, + ACTIONS(1589), 3, anon_sym_EQ, anon_sym_LT, anon_sym_GT, - ACTIONS(1571), 19, + ACTIONS(1587), 18, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, anon_sym_COLON, anon_sym_else, anon_sym_in, - anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, anon_sym_not, @@ -56817,102 +54546,94 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [36284] = 15, + [36534] = 10, ACTIONS(3), 1, sym_comment, - ACTIONS(1475), 1, + ACTIONS(1435), 1, anon_sym_DOT, - ACTIONS(1477), 1, + ACTIONS(1437), 1, anon_sym_LPAREN, - ACTIONS(1491), 1, + ACTIONS(1453), 1, anon_sym_LBRACK, - ACTIONS(1549), 1, - anon_sym_PIPE, - ACTIONS(1553), 1, + ACTIONS(1455), 1, anon_sym_STAR_STAR, - ACTIONS(1559), 1, - anon_sym_AMP, - ACTIONS(1561), 1, - anon_sym_CARET, - ACTIONS(1543), 2, + ACTIONS(1443), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1545), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1551), 2, - anon_sym_DASH, - anon_sym_PLUS, - STATE(633), 2, + STATE(634), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1555), 3, + ACTIONS(1457), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1585), 3, + ACTIONS(1581), 3, anon_sym_as, anon_sym_LT, anon_sym_GT, - ACTIONS(1583), 18, + ACTIONS(1579), 25, anon_sym_RPAREN, anon_sym_COMMA, + anon_sym_GT_GT, anon_sym_if, anon_sym_COLON, anon_sym_async, anon_sym_for, anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_RBRACK, anon_sym_RBRACE, anon_sym_not, anon_sym_and, anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [36355] = 13, + [36595] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(1475), 1, + ACTIONS(1435), 1, anon_sym_DOT, - ACTIONS(1477), 1, + ACTIONS(1437), 1, anon_sym_LPAREN, - ACTIONS(1491), 1, + ACTIONS(1453), 1, anon_sym_LBRACK, - ACTIONS(1553), 1, + ACTIONS(1505), 1, anon_sym_STAR_STAR, - ACTIONS(1561), 1, - anon_sym_CARET, - ACTIONS(1543), 2, + ACTIONS(1495), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1545), 2, + ACTIONS(1497), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1551), 2, + ACTIONS(1503), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(633), 2, + STATE(634), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1555), 3, + ACTIONS(1507), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1573), 3, - anon_sym_as, + ACTIONS(1581), 3, + anon_sym_EQ, anon_sym_LT, anon_sym_GT, - ACTIONS(1571), 20, + ACTIONS(1579), 21, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, anon_sym_COLON, - anon_sym_async, - anon_sym_for, + anon_sym_else, anon_sym_in, anon_sym_PIPE, anon_sym_RBRACK, @@ -56921,33 +54642,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_and, anon_sym_or, anon_sym_AMP, + anon_sym_CARET, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [36422] = 8, + sym_type_conversion, + [36660] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1475), 1, + ACTIONS(1435), 1, anon_sym_DOT, - ACTIONS(1477), 1, + ACTIONS(1437), 1, anon_sym_LPAREN, - ACTIONS(1491), 1, + ACTIONS(1453), 1, anon_sym_LBRACK, - ACTIONS(1553), 1, + ACTIONS(1455), 1, anon_sym_STAR_STAR, - STATE(633), 2, + STATE(634), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1577), 5, + ACTIONS(1581), 5, anon_sym_as, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1575), 28, + ACTIONS(1579), 28, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_GT_GT, @@ -56976,106 +54699,49 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [36479] = 15, + [36717] = 14, ACTIONS(3), 1, sym_comment, - ACTIONS(1475), 1, + ACTIONS(1435), 1, anon_sym_DOT, - ACTIONS(1477), 1, + ACTIONS(1437), 1, anon_sym_LPAREN, - ACTIONS(1491), 1, + ACTIONS(1453), 1, anon_sym_LBRACK, - ACTIONS(1549), 1, - anon_sym_PIPE, - ACTIONS(1553), 1, + ACTIONS(1505), 1, anon_sym_STAR_STAR, - ACTIONS(1559), 1, + ACTIONS(1511), 1, anon_sym_AMP, - ACTIONS(1561), 1, + ACTIONS(1513), 1, anon_sym_CARET, - ACTIONS(1543), 2, + ACTIONS(1495), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1545), 2, + ACTIONS(1497), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1551), 2, + ACTIONS(1503), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(633), 2, + STATE(634), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1555), 3, + ACTIONS(1507), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1589), 3, - anon_sym_as, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1587), 18, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_if, - anon_sym_COLON, - anon_sym_async, - anon_sym_for, - anon_sym_in, - anon_sym_RBRACK, - anon_sym_RBRACE, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - [36550] = 15, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1475), 1, - anon_sym_DOT, - ACTIONS(1477), 1, - anon_sym_LPAREN, - ACTIONS(1487), 1, - anon_sym_PIPE, - ACTIONS(1491), 1, - anon_sym_LBRACK, - ACTIONS(1493), 1, - anon_sym_STAR_STAR, - ACTIONS(1501), 1, - anon_sym_AMP, - ACTIONS(1503), 1, - anon_sym_CARET, - ACTIONS(1481), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(1483), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1489), 2, - anon_sym_DASH, - anon_sym_PLUS, - STATE(633), 2, - sym_argument_list, - sym_generator_expression, - ACTIONS(1497), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1589), 3, + ACTIONS(1581), 3, anon_sym_EQ, anon_sym_LT, anon_sym_GT, - ACTIONS(1587), 18, + ACTIONS(1579), 19, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, anon_sym_COLON, anon_sym_else, anon_sym_in, + anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, anon_sym_not, @@ -57088,55 +54754,50 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [36621] = 15, + [36786] = 10, ACTIONS(3), 1, sym_comment, - ACTIONS(1475), 1, + ACTIONS(1435), 1, anon_sym_DOT, - ACTIONS(1477), 1, + ACTIONS(1437), 1, anon_sym_LPAREN, - ACTIONS(1487), 1, - anon_sym_PIPE, - ACTIONS(1491), 1, + ACTIONS(1453), 1, anon_sym_LBRACK, - ACTIONS(1493), 1, + ACTIONS(1505), 1, anon_sym_STAR_STAR, - ACTIONS(1501), 1, - anon_sym_AMP, - ACTIONS(1503), 1, - anon_sym_CARET, - ACTIONS(1481), 2, + ACTIONS(1495), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1483), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1489), 2, - anon_sym_DASH, - anon_sym_PLUS, - STATE(633), 2, + STATE(634), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1497), 3, + ACTIONS(1507), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1585), 3, + ACTIONS(1581), 3, anon_sym_EQ, anon_sym_LT, anon_sym_GT, - ACTIONS(1583), 18, + ACTIONS(1579), 25, anon_sym_RPAREN, anon_sym_COMMA, + anon_sym_GT_GT, anon_sym_if, anon_sym_COLON, anon_sym_else, anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_RBRACK, anon_sym_RBRACE, anon_sym_not, anon_sym_and, anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, @@ -57144,104 +54805,99 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [36692] = 15, + [36847] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(1475), 1, + ACTIONS(1435), 1, anon_sym_DOT, - ACTIONS(1477), 1, + ACTIONS(1437), 1, anon_sym_LPAREN, - ACTIONS(1487), 1, - anon_sym_PIPE, - ACTIONS(1491), 1, + ACTIONS(1453), 1, anon_sym_LBRACK, - ACTIONS(1493), 1, + ACTIONS(1455), 1, anon_sym_STAR_STAR, - ACTIONS(1501), 1, - anon_sym_AMP, - ACTIONS(1503), 1, - anon_sym_CARET, - ACTIONS(1481), 2, + ACTIONS(1443), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1483), 2, + ACTIONS(1445), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1489), 2, + ACTIONS(1451), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(633), 2, + STATE(634), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1497), 3, + ACTIONS(1457), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, ACTIONS(1581), 3, - anon_sym_EQ, + anon_sym_as, anon_sym_LT, anon_sym_GT, - ACTIONS(1579), 18, + ACTIONS(1579), 21, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, anon_sym_COLON, - anon_sym_else, + anon_sym_async, + anon_sym_for, anon_sym_in, + anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, anon_sym_not, anon_sym_and, anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym_type_conversion, - [36763] = 11, + [36912] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1475), 1, + ACTIONS(1435), 1, anon_sym_DOT, - ACTIONS(1477), 1, + ACTIONS(1437), 1, anon_sym_LPAREN, - ACTIONS(1491), 1, + ACTIONS(1453), 1, anon_sym_LBRACK, - ACTIONS(1493), 1, + ACTIONS(1455), 1, anon_sym_STAR_STAR, - ACTIONS(1481), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(1489), 2, - anon_sym_DASH, - anon_sym_PLUS, - STATE(633), 2, + STATE(634), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1497), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1573), 3, - anon_sym_EQ, + ACTIONS(1581), 5, + anon_sym_as, + anon_sym_STAR, + anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1571), 23, + ACTIONS(1579), 28, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_GT_GT, anon_sym_if, anon_sym_COLON, - anon_sym_else, + anon_sym_async, + anon_sym_for, anon_sym_in, anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_RBRACK, anon_sym_RBRACE, + anon_sym_AT, anon_sym_not, anon_sym_and, anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, anon_sym_AMP, anon_sym_CARET, anon_sym_LT_LT, @@ -57251,28 +54907,132 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym_type_conversion, - [36826] = 4, + [36969] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(1591), 1, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(1593), 1, + anon_sym_not, + STATE(607), 1, + sym_string, + STATE(651), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1591), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(622), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [37035] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1597), 1, + anon_sym_not, + STATE(739), 1, + sym_string, + STATE(764), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1595), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(813), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [37101] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1038), 1, anon_sym_COLON_EQ, - ACTIONS(1053), 6, - anon_sym_as, + ACTIONS(1036), 6, anon_sym_STAR, anon_sym_COLON, + anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1048), 31, + ACTIONS(1031), 31, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_GT_GT, anon_sym_if, - anon_sym_async, - anon_sym_for, + anon_sym_else, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, @@ -57296,27 +55056,26 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [36874] = 4, + sym_type_conversion, + [37149] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(608), 1, - anon_sym_COLON_EQ, - ACTIONS(276), 6, - anon_sym_as, + ACTIONS(1143), 5, anon_sym_STAR, - anon_sym_COLON, + anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(303), 31, + ACTIONS(1138), 33, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, + anon_sym_as, anon_sym_GT_GT, anon_sym_if, - anon_sym_async, - anon_sym_for, + anon_sym_COLON, + anon_sym_else, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, @@ -57340,22 +55099,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [36922] = 13, + sym_type_conversion, + [37195] = 13, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, anon_sym_LBRACE, ACTIONS(81), 1, sym__string_start, - ACTIONS(559), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - ACTIONS(1595), 1, + ACTIONS(1601), 1, anon_sym_not, - STATE(713), 1, + STATE(683), 1, sym_string, - STATE(733), 1, + STATE(738), 1, sym_primary_expression, ACTIONS(75), 2, sym_ellipsis, @@ -57370,14 +55130,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(1593), 6, + ACTIONS(1599), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(797), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -57393,69 +55153,64 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [36988] = 13, + [37261] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(624), 1, + ACTIONS(562), 1, + anon_sym_COLON_EQ, + ACTIONS(276), 6, + anon_sym_STAR, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 31, + anon_sym_DOT, anon_sym_LPAREN, - ACTIONS(632), 1, - anon_sym_LBRACK, - ACTIONS(634), 1, - anon_sym_LBRACE, - ACTIONS(646), 1, - sym__string_start, - ACTIONS(1599), 1, - anon_sym_not, - STATE(742), 1, - sym_string, - STATE(751), 1, - sym_primary_expression, - ACTIONS(640), 2, - sym_ellipsis, - sym_float, - ACTIONS(630), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, anon_sym_DASH, anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(642), 5, - sym_integer, - sym_identifier, - sym_true, - sym_false, - sym_none, - ACTIONS(1597), 6, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - anon_sym_await, - STATE(811), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [37054] = 3, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [37309] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1151), 5, + ACTIONS(1603), 1, + sym__string_start, + STATE(674), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1390), 4, anon_sym_STAR, - anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1146), 33, + ACTIONS(1388), 31, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -57464,7 +55219,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_GT, anon_sym_if, anon_sym_COLON, - anon_sym_else, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, @@ -57488,8 +55242,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym_type_conversion, - [37100] = 3, + [37359] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1170), 5, @@ -57532,79 +55285,71 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [37146] = 13, + [37405] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(278), 1, + ACTIONS(608), 1, + anon_sym_COLON_EQ, + ACTIONS(276), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_COLON, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 31, + anon_sym_DOT, anon_sym_LPAREN, - ACTIONS(293), 1, - anon_sym_LBRACK, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(1603), 1, - anon_sym_not, - STATE(600), 1, - sym_string, - STATE(665), 1, - sym_primary_expression, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - ACTIONS(301), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, anon_sym_DASH, anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(311), 5, - sym_integer, - sym_identifier, - sym_true, - sym_false, - sym_none, - ACTIONS(1601), 6, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - anon_sym_await, - STATE(642), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [37212] = 4, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [37453] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1074), 1, + ACTIONS(1606), 1, anon_sym_COLON_EQ, - ACTIONS(1053), 6, + ACTIONS(1036), 6, + anon_sym_as, anon_sym_STAR, anon_sym_COLON, - anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1048), 31, + ACTIONS(1031), 31, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_GT_GT, anon_sym_if, - anon_sym_else, + anon_sym_async, + anon_sym_for, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, @@ -57628,27 +55373,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym_type_conversion, - [37260] = 4, + [37501] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(568), 1, - anon_sym_COLON_EQ, - ACTIONS(276), 6, + ACTIONS(646), 1, + sym__string_start, + STATE(674), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1397), 4, anon_sym_STAR, - anon_sym_COLON, - anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(303), 31, + ACTIONS(1395), 31, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, + anon_sym_as, anon_sym_GT_GT, anon_sym_if, - anon_sym_else, + anon_sym_COLON, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, @@ -57672,28 +55418,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym_type_conversion, - [37308] = 13, + [37551] = 13, ACTIONS(3), 1, sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - ACTIONS(604), 1, - anon_sym_LPAREN, - ACTIONS(612), 1, - anon_sym_LBRACK, - ACTIONS(1605), 1, + ACTIONS(1608), 1, anon_sym_not, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(652), 1, + STATE(647), 1, sym_primary_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, @@ -57703,14 +55448,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(1601), 6, + ACTIONS(1591), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -57726,80 +55471,33 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [37374] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1607), 1, - sym__string_start, - STATE(677), 2, - sym_string, - aux_sym_concatenated_string_repeat1, - ACTIONS(1394), 4, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1392), 31, - anon_sym_DOT, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_as, - anon_sym_GT_GT, - anon_sym_if, - anon_sym_COLON, - anon_sym_in, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_RBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - [37424] = 5, + [37617] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(646), 1, + ACTIONS(1610), 1, sym__string_start, - STATE(677), 2, + STATE(680), 2, sym_string, aux_sym_concatenated_string_repeat1, - ACTIONS(1390), 4, + ACTIONS(1390), 5, anon_sym_STAR, + anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1388), 31, + ACTIONS(1388), 29, + sym__newline, anon_sym_DOT, + anon_sym_from, anon_sym_LPAREN, - anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_as, anon_sym_GT_GT, anon_sym_if, - anon_sym_COLON, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, anon_sym_PLUS, anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_RBRACE, anon_sym_STAR_STAR, anon_sym_AT, anon_sym_not, @@ -57816,7 +55514,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [37474] = 12, + anon_sym_SEMI, + [37666] = 14, ACTIONS(3), 1, sym_comment, ACTIONS(278), 1, @@ -57827,35 +55526,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + ACTIONS(1469), 1, + sym_identifier, + STATE(607), 1, sym_string, - STATE(663), 1, + STATE(883), 1, sym_primary_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, + STATE(767), 2, + sym_attribute, + sym_subscript, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 5, + ACTIONS(311), 4, sym_integer, - sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1601), 6, + ACTIONS(1473), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 15, + STATE(622), 13, sym_binary_operator, sym_unary_operator, - sym_attribute, - sym_subscript, sym_call, sym_list, sym_set, @@ -57867,42 +55568,42 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [37537] = 12, + [37733] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(624), 1, + ACTIONS(278), 1, anon_sym_LPAREN, - ACTIONS(632), 1, + ACTIONS(293), 1, anon_sym_LBRACK, - ACTIONS(634), 1, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(646), 1, + ACTIONS(315), 1, sym__string_start, - STATE(742), 1, + STATE(607), 1, sym_string, - STATE(751), 1, + STATE(656), 1, sym_primary_expression, - ACTIONS(640), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(630), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(642), 5, + ACTIONS(311), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1597), 6, + ACTIONS(1591), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(811), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -57918,46 +55619,92 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [37600] = 12, + [37796] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(624), 1, + ACTIONS(81), 1, + sym__string_start, + STATE(692), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1036), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1031), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, anon_sym_LPAREN, - ACTIONS(632), 1, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LBRACK, - ACTIONS(634), 1, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_SEMI, + [37845] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(646), 1, + ACTIONS(315), 1, sym__string_start, - STATE(742), 1, + ACTIONS(1613), 1, + sym_identifier, + STATE(607), 1, sym_string, - STATE(747), 1, + STATE(883), 1, sym_primary_expression, - ACTIONS(640), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(630), 3, + STATE(881), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(642), 5, + ACTIONS(311), 4, sym_integer, - sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1597), 6, + ACTIONS(1615), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(811), 15, + STATE(622), 13, sym_binary_operator, sym_unary_operator, - sym_attribute, - sym_subscript, sym_call, sym_list, sym_set, @@ -57969,42 +55716,42 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [37663] = 12, + [37912] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(624), 1, - anon_sym_LPAREN, - ACTIONS(632), 1, - anon_sym_LBRACK, - ACTIONS(634), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(646), 1, + ACTIONS(81), 1, sym__string_start, - STATE(742), 1, + ACTIONS(568), 1, + anon_sym_LPAREN, + ACTIONS(572), 1, + anon_sym_LBRACK, + STATE(683), 1, sym_string, - STATE(763), 1, + STATE(734), 1, sym_primary_expression, - ACTIONS(640), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(630), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(642), 5, + ACTIONS(77), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1597), 6, + ACTIONS(1599), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(811), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -58020,42 +55767,42 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [37726] = 12, + [37975] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(624), 1, - anon_sym_LPAREN, - ACTIONS(632), 1, - anon_sym_LBRACK, - ACTIONS(634), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(646), 1, + ACTIONS(81), 1, sym__string_start, - STATE(742), 1, + ACTIONS(568), 1, + anon_sym_LPAREN, + ACTIONS(572), 1, + anon_sym_LBRACK, + STATE(683), 1, sym_string, - STATE(766), 1, + STATE(738), 1, sym_primary_expression, - ACTIONS(640), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(630), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(642), 5, + ACTIONS(77), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1597), 6, + ACTIONS(1599), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(811), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -58071,66 +55818,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [37789] = 20, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1495), 1, - anon_sym_EQ, - ACTIONS(1610), 1, - anon_sym_DOT, - ACTIONS(1612), 1, - anon_sym_LPAREN, - ACTIONS(1620), 1, - anon_sym_PIPE, - ACTIONS(1624), 1, - anon_sym_LBRACK, - ACTIONS(1626), 1, - anon_sym_STAR_STAR, - ACTIONS(1630), 1, - anon_sym_not, - ACTIONS(1632), 1, - anon_sym_AMP, - ACTIONS(1634), 1, - anon_sym_CARET, - ACTIONS(1638), 1, - anon_sym_is, - STATE(878), 1, - aux_sym_comparison_operator_repeat1, - ACTIONS(1614), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(1616), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1622), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(1636), 2, - anon_sym_LT, - anon_sym_GT, - STATE(792), 2, - sym_argument_list, - sym_generator_expression, - ACTIONS(1628), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1618), 6, - anon_sym_in, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - ACTIONS(1479), 7, - sym__newline, - anon_sym_from, - anon_sym_COMMA, - anon_sym_if, - anon_sym_and, - anon_sym_or, - sym__semicolon, - [37868] = 14, + [38038] = 12, ACTIONS(3), 1, sym_comment, ACTIONS(278), 1, @@ -58141,37 +55829,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - ACTIONS(1525), 1, - sym_identifier, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(882), 1, + STATE(658), 1, sym_primary_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(762), 2, - sym_attribute, - sym_subscript, ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 4, + ACTIONS(311), 5, sym_integer, + sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1529), 6, + ACTIONS(1591), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 13, + STATE(622), 15, sym_binary_operator, sym_unary_operator, + sym_attribute, + sym_subscript, sym_call, sym_list, sym_set, @@ -58183,25 +55869,76 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [37935] = 12, + [38101] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(278), 1, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(293), 1, + ACTIONS(572), 1, anon_sym_LBRACK, + STATE(683), 1, + sym_string, + STATE(733), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1599), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(795), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38164] = 12, + ACTIONS(3), 1, + sym_comment, ACTIONS(295), 1, anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(607), 1, sym_string, - STATE(656), 1, + STATE(655), 1, sym_primary_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, @@ -58211,14 +55948,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(1601), 6, + ACTIONS(1591), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -58234,7 +55971,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [37998] = 12, + [38227] = 12, ACTIONS(3), 1, sym_comment, ACTIONS(278), 1, @@ -58245,9 +55982,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(646), 1, + STATE(647), 1, sym_primary_expression, ACTIONS(309), 2, sym_ellipsis, @@ -58262,14 +55999,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(1601), 6, + ACTIONS(1591), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -58285,42 +56022,42 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [38061] = 12, + [38290] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(295), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(315), 1, + ACTIONS(81), 1, sym__string_start, - ACTIONS(604), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(612), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - STATE(600), 1, + STATE(683), 1, sym_string, - STATE(659), 1, + STATE(732), 1, sym_primary_expression, - ACTIONS(309), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 5, + ACTIONS(77), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1601), 6, + ACTIONS(1599), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -58336,21 +56073,21 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [38124] = 5, + [38353] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1640), 1, + ACTIONS(81), 1, sym__string_start, - STATE(689), 2, + STATE(680), 2, sym_string, aux_sym_concatenated_string_repeat1, - ACTIONS(1394), 5, + ACTIONS(1397), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1392), 29, + ACTIONS(1395), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -58379,43 +56116,43 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [38173] = 12, + anon_sym_SEMI, + [38402] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(293), 1, - anon_sym_LBRACK, - ACTIONS(295), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(315), 1, + ACTIONS(81), 1, sym__string_start, - STATE(600), 1, + ACTIONS(568), 1, + anon_sym_LPAREN, + ACTIONS(572), 1, + anon_sym_LBRACK, + STATE(683), 1, sym_string, - STATE(645), 1, + STATE(742), 1, sym_primary_expression, - ACTIONS(309), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 5, + ACTIONS(77), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1601), 6, + ACTIONS(1599), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -58431,7 +56168,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [38236] = 12, + [38465] = 12, ACTIONS(3), 1, sym_comment, ACTIONS(624), 1, @@ -58442,9 +56179,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, ACTIONS(646), 1, sym__string_start, - STATE(742), 1, + STATE(739), 1, sym_string, - STATE(746), 1, + STATE(763), 1, sym_primary_expression, ACTIONS(640), 2, sym_ellipsis, @@ -58459,65 +56196,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(1597), 6, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - anon_sym_await, - STATE(811), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [38299] = 12, - ACTIONS(3), 1, - sym_comment, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(293), 1, - anon_sym_LBRACK, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - STATE(600), 1, - sym_string, - STATE(651), 1, - sym_primary_expression, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - ACTIONS(301), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(311), 5, - sym_integer, - sym_identifier, - sym_true, - sym_false, - sym_none, - ACTIONS(1601), 6, + ACTIONS(1595), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -58533,42 +56219,42 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [38362] = 12, + [38528] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(604), 1, + ACTIONS(624), 1, anon_sym_LPAREN, - ACTIONS(612), 1, + ACTIONS(632), 1, anon_sym_LBRACK, - STATE(600), 1, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(739), 1, sym_string, - STATE(647), 1, + STATE(748), 1, sym_primary_expression, - ACTIONS(309), 2, + ACTIONS(640), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(630), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 5, + ACTIONS(642), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1601), 6, + ACTIONS(1595), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -58584,20 +56270,20 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [38425] = 12, + [38591] = 12, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, anon_sym_LBRACE, ACTIONS(81), 1, sym__string_start, - ACTIONS(559), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - STATE(713), 1, + STATE(683), 1, sym_string, - STATE(731), 1, + STATE(736), 1, sym_primary_expression, ACTIONS(75), 2, sym_ellipsis, @@ -58612,14 +56298,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(1593), 6, + ACTIONS(1599), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(797), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -58635,7 +56321,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [38488] = 12, + [38654] = 12, ACTIONS(3), 1, sym_comment, ACTIONS(278), 1, @@ -58646,9 +56332,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(658), 1, + STATE(648), 1, sym_primary_expression, ACTIONS(309), 2, sym_ellipsis, @@ -58663,14 +56349,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(1601), 6, + ACTIONS(1591), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -58686,7 +56372,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [38551] = 12, + [38717] = 12, ACTIONS(3), 1, sym_comment, ACTIONS(278), 1, @@ -58697,9 +56383,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(665), 1, + STATE(660), 1, sym_primary_expression, ACTIONS(309), 2, sym_ellipsis, @@ -58714,14 +56400,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(1601), 6, + ACTIONS(1591), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -58737,7 +56423,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [38614] = 12, + [38780] = 12, ACTIONS(3), 1, sym_comment, ACTIONS(624), 1, @@ -58748,9 +56434,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, ACTIONS(646), 1, sym__string_start, - STATE(742), 1, + STATE(739), 1, sym_string, - STATE(750), 1, + STATE(752), 1, sym_primary_expression, ACTIONS(640), 2, sym_ellipsis, @@ -58765,14 +56451,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(1597), 6, + ACTIONS(1595), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(811), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -58788,58 +56474,7 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [38677] = 12, - ACTIONS(3), 1, - sym_comment, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(604), 1, - anon_sym_LPAREN, - ACTIONS(612), 1, - anon_sym_LBRACK, - STATE(600), 1, - sym_string, - STATE(649), 1, - sym_primary_expression, - ACTIONS(309), 2, - sym_ellipsis, - sym_float, - ACTIONS(610), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(311), 5, - sym_integer, - sym_identifier, - sym_true, - sym_false, - sym_none, - ACTIONS(1601), 6, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - anon_sym_await, - STATE(642), 15, - sym_binary_operator, - sym_unary_operator, - sym_attribute, - sym_subscript, - sym_call, - sym_list, - sym_set, - sym_tuple, - sym_dictionary, - sym_list_comprehension, - sym_dictionary_comprehension, - sym_set_comprehension, - sym_generator_expression, - sym_parenthesized_expression, - sym_concatenated_string, - [38740] = 12, + [38843] = 12, ACTIONS(3), 1, sym_comment, ACTIONS(624), 1, @@ -58850,9 +56485,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, ACTIONS(646), 1, sym__string_start, - STATE(742), 1, + STATE(739), 1, sym_string, - STATE(756), 1, + STATE(759), 1, sym_primary_expression, ACTIONS(640), 2, sym_ellipsis, @@ -58867,14 +56502,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(1597), 6, + ACTIONS(1595), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(811), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -58890,42 +56525,84 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [38803] = 12, + [38906] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(1143), 5, + anon_sym_as, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1138), 32, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [38951] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(81), 1, + ACTIONS(315), 1, sym__string_start, - ACTIONS(559), 1, + ACTIONS(604), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(612), 1, anon_sym_LBRACK, - STATE(713), 1, + STATE(607), 1, sym_string, - STATE(743), 1, + STATE(654), 1, sym_primary_expression, - ACTIONS(75), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 5, + ACTIONS(311), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1593), 6, + ACTIONS(1591), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(797), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -58941,42 +56618,84 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [38866] = 12, + [39014] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, - anon_sym_LBRACE, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(559), 1, + ACTIONS(1170), 5, + anon_sym_as, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1165), 32, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [39059] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(632), 1, anon_sym_LBRACK, - STATE(713), 1, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(739), 1, sym_string, - STATE(734), 1, + STATE(754), 1, sym_primary_expression, - ACTIONS(75), 2, + ACTIONS(640), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(630), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 5, + ACTIONS(642), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1593), 6, + ACTIONS(1595), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(797), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -58992,42 +56711,42 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [38929] = 12, + [39122] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(295), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(315), 1, + ACTIONS(81), 1, sym__string_start, - ACTIONS(604), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(612), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - STATE(600), 1, + STATE(683), 1, sym_string, - STATE(652), 1, + STATE(737), 1, sym_primary_expression, - ACTIONS(309), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 5, + ACTIONS(77), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1601), 6, + ACTIONS(1599), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -59043,42 +56762,42 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [38992] = 12, + [39185] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(604), 1, + ACTIONS(624), 1, anon_sym_LPAREN, - ACTIONS(612), 1, + ACTIONS(632), 1, anon_sym_LBRACK, - STATE(600), 1, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(739), 1, sym_string, - STATE(653), 1, + STATE(753), 1, sym_primary_expression, - ACTIONS(309), 2, + ACTIONS(640), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(630), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 5, + ACTIONS(642), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1601), 6, + ACTIONS(1595), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -59094,42 +56813,42 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [39055] = 12, + [39248] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(604), 1, + ACTIONS(624), 1, anon_sym_LPAREN, - ACTIONS(612), 1, + ACTIONS(632), 1, anon_sym_LBRACK, - STATE(600), 1, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(739), 1, sym_string, - STATE(654), 1, + STATE(764), 1, sym_primary_expression, - ACTIONS(309), 2, + ACTIONS(640), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(630), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 5, + ACTIONS(642), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1601), 6, + ACTIONS(1595), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -59145,25 +56864,25 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [39118] = 12, + [39311] = 12, ACTIONS(3), 1, sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - ACTIONS(604), 1, - anon_sym_LPAREN, - ACTIONS(612), 1, - anon_sym_LBRACK, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(655), 1, + STATE(649), 1, sym_primary_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, @@ -59173,14 +56892,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(1601), 6, + ACTIONS(1591), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -59196,18 +56915,18 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [39181] = 12, + [39374] = 12, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, anon_sym_LBRACE, ACTIONS(81), 1, sym__string_start, - ACTIONS(559), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - STATE(713), 1, + STATE(683), 1, sym_string, STATE(741), 1, sym_primary_expression, @@ -59224,14 +56943,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(1593), 6, + ACTIONS(1599), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(797), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -59247,25 +56966,84 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [39244] = 12, + [39437] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(278), 1, + ACTIONS(1441), 1, + anon_sym_EQ, + ACTIONS(1617), 1, + anon_sym_DOT, + ACTIONS(1619), 1, anon_sym_LPAREN, - ACTIONS(293), 1, + ACTIONS(1627), 1, + anon_sym_PIPE, + ACTIONS(1631), 1, anon_sym_LBRACK, + ACTIONS(1633), 1, + anon_sym_STAR_STAR, + ACTIONS(1637), 1, + anon_sym_not, + ACTIONS(1639), 1, + anon_sym_AMP, + ACTIONS(1641), 1, + anon_sym_CARET, + ACTIONS(1645), 1, + anon_sym_is, + STATE(879), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1621), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1623), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1629), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(1643), 2, + anon_sym_LT, + anon_sym_GT, + STATE(798), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1635), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1625), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1439), 7, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_and, + anon_sym_or, + anon_sym_SEMI, + [39516] = 12, + ACTIONS(3), 1, + sym_comment, ACTIONS(295), 1, anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(607), 1, sym_string, - STATE(666), 1, + STATE(653), 1, sym_primary_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, @@ -59275,14 +57053,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(1601), 6, + ACTIONS(1591), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -59298,42 +57076,42 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [39307] = 12, + [39579] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(624), 1, + ACTIONS(278), 1, anon_sym_LPAREN, - ACTIONS(632), 1, + ACTIONS(293), 1, anon_sym_LBRACK, - ACTIONS(634), 1, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(646), 1, + ACTIONS(315), 1, sym__string_start, - STATE(742), 1, + STATE(607), 1, sym_string, - STATE(761), 1, + STATE(662), 1, sym_primary_expression, - ACTIONS(640), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(630), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(642), 5, + ACTIONS(311), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1597), 6, + ACTIONS(1591), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(811), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -59349,25 +57127,25 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [39370] = 12, + [39642] = 12, ACTIONS(3), 1, sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - ACTIONS(604), 1, - anon_sym_LPAREN, - ACTIONS(612), 1, - anon_sym_LBRACK, - STATE(600), 1, + STATE(607), 1, sym_string, - STATE(661), 1, + STATE(646), 1, sym_primary_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, @@ -59377,14 +57155,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(1601), 6, + ACTIONS(1591), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -59400,42 +57178,42 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [39433] = 12, + [39705] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(604), 1, + ACTIONS(624), 1, anon_sym_LPAREN, - ACTIONS(612), 1, + ACTIONS(632), 1, anon_sym_LBRACK, - STATE(600), 1, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(739), 1, sym_string, - STATE(660), 1, + STATE(750), 1, sym_primary_expression, - ACTIONS(309), 2, + ACTIONS(640), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(630), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 5, + ACTIONS(642), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1601), 6, + ACTIONS(1595), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -59451,42 +57229,42 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [39496] = 12, + [39768] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(604), 1, + ACTIONS(624), 1, anon_sym_LPAREN, - ACTIONS(612), 1, + ACTIONS(632), 1, anon_sym_LBRACK, - STATE(600), 1, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(739), 1, sym_string, - STATE(657), 1, + STATE(765), 1, sym_primary_expression, - ACTIONS(309), 2, + ACTIONS(640), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(630), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 5, + ACTIONS(642), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1601), 6, + ACTIONS(1595), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -59502,42 +57280,42 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [39559] = 12, + [39831] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(295), 1, - anon_sym_LBRACE, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(604), 1, + ACTIONS(624), 1, anon_sym_LPAREN, - ACTIONS(612), 1, + ACTIONS(632), 1, anon_sym_LBRACK, - STATE(600), 1, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(739), 1, sym_string, - STATE(662), 1, + STATE(771), 1, sym_primary_expression, - ACTIONS(309), 2, + ACTIONS(640), 2, sym_ellipsis, sym_float, - ACTIONS(610), 3, + ACTIONS(630), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 5, + ACTIONS(642), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1601), 6, + ACTIONS(1595), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -59553,64 +57331,20 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [39622] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(81), 1, - sym__string_start, - STATE(720), 2, - sym_string, - aux_sym_concatenated_string_repeat1, - ACTIONS(1053), 5, - anon_sym_STAR, - anon_sym_EQ, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1048), 29, - sym__newline, - anon_sym_DOT, - anon_sym_from, - anon_sym_LPAREN, - anon_sym_COMMA, - anon_sym_GT_GT, - anon_sym_if, - anon_sym_in, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - sym__semicolon, - [39671] = 12, + [39894] = 12, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, anon_sym_LBRACE, ACTIONS(81), 1, sym__string_start, - ACTIONS(559), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - STATE(713), 1, + STATE(683), 1, sym_string, - STATE(739), 1, + STATE(745), 1, sym_primary_expression, ACTIONS(75), 2, sym_ellipsis, @@ -59625,14 +57359,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(1593), 6, + ACTIONS(1599), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(797), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -59648,48 +57382,46 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [39734] = 14, + [39957] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(293), 1, - anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - ACTIONS(1643), 1, - sym_identifier, - STATE(600), 1, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(607), 1, sym_string, - STATE(882), 1, + STATE(663), 1, sym_primary_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - STATE(879), 2, - sym_attribute, - sym_subscript, - ACTIONS(301), 3, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 4, + ACTIONS(311), 5, sym_integer, + sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1645), 6, + ACTIONS(1591), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 13, + STATE(622), 15, sym_binary_operator, sym_unary_operator, + sym_attribute, + sym_subscript, sym_call, sym_list, sym_set, @@ -59701,25 +57433,25 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [39801] = 12, + [40020] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(293), 1, - anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(607), 1, sym_string, - STATE(648), 1, + STATE(650), 1, sym_primary_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, @@ -59729,14 +57461,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(1601), 6, + ACTIONS(1591), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -59752,42 +57484,42 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [39864] = 12, + [40083] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, - anon_sym_LBRACE, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(559), 1, + ACTIONS(624), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(632), 1, anon_sym_LBRACK, - STATE(713), 1, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(739), 1, sym_string, - STATE(738), 1, + STATE(755), 1, sym_primary_expression, - ACTIONS(75), 2, + ACTIONS(640), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(630), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 5, + ACTIONS(642), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1593), 6, + ACTIONS(1595), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(797), 15, + STATE(813), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -59803,42 +57535,42 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [39927] = 12, + [40146] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(293), 1, - anon_sym_LBRACK, - ACTIONS(295), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(315), 1, + ACTIONS(81), 1, sym__string_start, - STATE(600), 1, + ACTIONS(568), 1, + anon_sym_LPAREN, + ACTIONS(572), 1, + anon_sym_LBRACK, + STATE(683), 1, sym_string, - STATE(664), 1, + STATE(746), 1, sym_primary_expression, - ACTIONS(309), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(311), 5, + ACTIONS(77), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1601), 6, + ACTIONS(1599), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -59854,42 +57586,42 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [39990] = 12, + [40209] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(81), 1, + ACTIONS(315), 1, sym__string_start, - ACTIONS(559), 1, + ACTIONS(604), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(612), 1, anon_sym_LBRACK, - STATE(713), 1, + STATE(607), 1, sym_string, - STATE(745), 1, + STATE(651), 1, sym_primary_expression, - ACTIONS(75), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 5, + ACTIONS(311), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1593), 6, + ACTIONS(1591), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(797), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -59905,86 +57637,42 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [40053] = 5, + [40272] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(81), 1, - sym__string_start, - STATE(689), 2, - sym_string, - aux_sym_concatenated_string_repeat1, - ACTIONS(1390), 5, - anon_sym_STAR, - anon_sym_EQ, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1388), 29, - sym__newline, - anon_sym_DOT, - anon_sym_from, + ACTIONS(278), 1, anon_sym_LPAREN, - anon_sym_COMMA, - anon_sym_GT_GT, - anon_sym_if, - anon_sym_in, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(293), 1, anon_sym_LBRACK, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - sym__semicolon, - [40102] = 12, - ACTIONS(3), 1, - sym_comment, - ACTIONS(51), 1, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(81), 1, + ACTIONS(315), 1, sym__string_start, - ACTIONS(559), 1, - anon_sym_LPAREN, - ACTIONS(563), 1, - anon_sym_LBRACK, - STATE(713), 1, + STATE(607), 1, sym_string, - STATE(737), 1, + STATE(664), 1, sym_primary_expression, - ACTIONS(75), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 5, + ACTIONS(311), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1593), 6, + ACTIONS(1591), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(797), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -60000,42 +57688,42 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [40165] = 12, + [40335] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(81), 1, + ACTIONS(315), 1, sym__string_start, - ACTIONS(559), 1, + ACTIONS(604), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(612), 1, anon_sym_LBRACK, - STATE(713), 1, + STATE(607), 1, sym_string, - STATE(733), 1, + STATE(652), 1, sym_primary_expression, - ACTIONS(75), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 5, + ACTIONS(311), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1593), 6, + ACTIONS(1591), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(797), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -60051,20 +57739,20 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [40228] = 12, + [40398] = 12, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, anon_sym_LBRACE, ACTIONS(81), 1, sym__string_start, - ACTIONS(559), 1, + ACTIONS(568), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(572), 1, anon_sym_LBRACK, - STATE(713), 1, + STATE(683), 1, sym_string, - STATE(732), 1, + STATE(744), 1, sym_primary_expression, ACTIONS(75), 2, sym_ellipsis, @@ -60079,14 +57767,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(1593), 6, + ACTIONS(1599), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(797), 15, + STATE(795), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -60102,42 +57790,42 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [40291] = 12, + [40461] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(624), 1, + ACTIONS(278), 1, anon_sym_LPAREN, - ACTIONS(632), 1, + ACTIONS(293), 1, anon_sym_LBRACK, - ACTIONS(634), 1, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(646), 1, + ACTIONS(315), 1, sym__string_start, - STATE(742), 1, + STATE(607), 1, sym_string, - STATE(757), 1, + STATE(665), 1, sym_primary_expression, - ACTIONS(640), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(630), 3, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(642), 5, + ACTIONS(311), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1597), 6, + ACTIONS(1591), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(811), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -60153,67 +57841,25 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [40354] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1170), 5, - anon_sym_as, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1165), 32, - anon_sym_DOT, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_GT_GT, - anon_sym_if, - anon_sym_COLON, - anon_sym_async, - anon_sym_for, - anon_sym_in, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_RBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - [40399] = 12, + [40524] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(278), 1, - anon_sym_LPAREN, - ACTIONS(293), 1, - anon_sym_LBRACK, ACTIONS(295), 1, anon_sym_LBRACE, ACTIONS(315), 1, sym__string_start, - STATE(600), 1, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(607), 1, sym_string, - STATE(650), 1, + STATE(661), 1, sym_primary_expression, ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(301), 3, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, @@ -60223,14 +57869,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(1601), 6, + ACTIONS(1591), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(642), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -60246,84 +57892,42 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [40462] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1151), 5, - anon_sym_as, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1146), 32, - anon_sym_DOT, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_GT_GT, - anon_sym_if, - anon_sym_COLON, - anon_sym_async, - anon_sym_for, - anon_sym_in, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_RBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - [40507] = 12, + [40587] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(624), 1, - anon_sym_LPAREN, - ACTIONS(632), 1, - anon_sym_LBRACK, - ACTIONS(634), 1, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(646), 1, + ACTIONS(315), 1, sym__string_start, - STATE(742), 1, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(607), 1, sym_string, - STATE(752), 1, + STATE(667), 1, sym_primary_expression, - ACTIONS(640), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(630), 3, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(642), 5, + ACTIONS(311), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1597), 6, + ACTIONS(1591), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(811), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -60339,42 +57943,42 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [40570] = 12, + [40650] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(624), 1, - anon_sym_LPAREN, - ACTIONS(632), 1, - anon_sym_LBRACK, - ACTIONS(634), 1, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(646), 1, + ACTIONS(315), 1, sym__string_start, - STATE(742), 1, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(607), 1, sym_string, - STATE(753), 1, + STATE(659), 1, sym_primary_expression, - ACTIONS(640), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(630), 3, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(642), 5, + ACTIONS(311), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1597), 6, + ACTIONS(1591), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(811), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -60390,42 +57994,42 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [40633] = 12, + [40713] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(295), 1, anon_sym_LBRACE, - ACTIONS(81), 1, + ACTIONS(315), 1, sym__string_start, - ACTIONS(559), 1, + ACTIONS(604), 1, anon_sym_LPAREN, - ACTIONS(563), 1, + ACTIONS(612), 1, anon_sym_LBRACK, - STATE(713), 1, + STATE(607), 1, sym_string, - STATE(735), 1, + STATE(666), 1, sym_primary_expression, - ACTIONS(75), 2, + ACTIONS(309), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(610), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 5, + ACTIONS(311), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1593), 6, + ACTIONS(1591), 6, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, anon_sym_await, - STATE(797), 15, + STATE(622), 15, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -60441,88 +58045,86 @@ static const uint16_t ts_small_parse_table[] = { sym_generator_expression, sym_parenthesized_expression, sym_concatenated_string, - [40696] = 15, + [40776] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(1610), 1, - anon_sym_DOT, - ACTIONS(1612), 1, + ACTIONS(278), 1, anon_sym_LPAREN, - ACTIONS(1620), 1, - anon_sym_PIPE, - ACTIONS(1624), 1, + ACTIONS(293), 1, anon_sym_LBRACK, - ACTIONS(1626), 1, - anon_sym_STAR_STAR, - ACTIONS(1632), 1, - anon_sym_AMP, - ACTIONS(1634), 1, - anon_sym_CARET, - ACTIONS(1614), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(1616), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1622), 2, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(607), 1, + sym_string, + STATE(657), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, anon_sym_DASH, anon_sym_PLUS, - STATE(792), 2, - sym_argument_list, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1591), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(622), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, sym_generator_expression, - ACTIONS(1589), 3, - anon_sym_EQ, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1628), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1587), 15, - sym__newline, - anon_sym_from, - anon_sym_COMMA, - anon_sym_if, - anon_sym_in, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - sym__semicolon, - [40764] = 11, + sym_parenthesized_expression, + sym_concatenated_string, + [40839] = 11, ACTIONS(3), 1, sym_comment, - ACTIONS(1610), 1, + ACTIONS(1617), 1, anon_sym_DOT, - ACTIONS(1612), 1, + ACTIONS(1619), 1, anon_sym_LPAREN, - ACTIONS(1624), 1, + ACTIONS(1631), 1, anon_sym_LBRACK, - ACTIONS(1626), 1, + ACTIONS(1633), 1, anon_sym_STAR_STAR, - ACTIONS(1614), 2, + ACTIONS(1621), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1622), 2, + ACTIONS(1629), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(792), 2, + STATE(798), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1573), 3, + ACTIONS(1581), 3, anon_sym_EQ, anon_sym_LT, anon_sym_GT, - ACTIONS(1628), 3, + ACTIONS(1635), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1571), 20, + ACTIONS(1579), 20, sym__newline, anon_sym_from, anon_sym_COMMA, @@ -60542,103 +58144,49 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [40824] = 15, + anon_sym_SEMI, + [40899] = 14, ACTIONS(3), 1, sym_comment, - ACTIONS(1610), 1, + ACTIONS(1617), 1, anon_sym_DOT, - ACTIONS(1612), 1, + ACTIONS(1619), 1, anon_sym_LPAREN, - ACTIONS(1620), 1, - anon_sym_PIPE, - ACTIONS(1624), 1, + ACTIONS(1631), 1, anon_sym_LBRACK, - ACTIONS(1626), 1, + ACTIONS(1633), 1, anon_sym_STAR_STAR, - ACTIONS(1632), 1, + ACTIONS(1639), 1, anon_sym_AMP, - ACTIONS(1634), 1, + ACTIONS(1641), 1, anon_sym_CARET, - ACTIONS(1614), 2, + ACTIONS(1621), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1616), 2, + ACTIONS(1623), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1622), 2, + ACTIONS(1629), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(792), 2, + STATE(798), 2, sym_argument_list, sym_generator_expression, ACTIONS(1581), 3, anon_sym_EQ, anon_sym_LT, anon_sym_GT, - ACTIONS(1628), 3, + ACTIONS(1635), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1579), 15, + ACTIONS(1579), 16, sym__newline, anon_sym_from, anon_sym_COMMA, anon_sym_if, anon_sym_in, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - sym__semicolon, - [40892] = 15, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1610), 1, - anon_sym_DOT, - ACTIONS(1612), 1, - anon_sym_LPAREN, - ACTIONS(1620), 1, anon_sym_PIPE, - ACTIONS(1624), 1, - anon_sym_LBRACK, - ACTIONS(1626), 1, - anon_sym_STAR_STAR, - ACTIONS(1632), 1, - anon_sym_AMP, - ACTIONS(1634), 1, - anon_sym_CARET, - ACTIONS(1614), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(1616), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1622), 2, - anon_sym_DASH, - anon_sym_PLUS, - STATE(792), 2, - sym_argument_list, - sym_generator_expression, - ACTIONS(1585), 3, - anon_sym_EQ, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1628), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1583), 15, - sym__newline, - anon_sym_from, - anon_sym_COMMA, - anon_sym_if, - anon_sym_in, anon_sym_not, anon_sym_and, anon_sym_or, @@ -60648,19 +58196,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [40960] = 8, + anon_sym_SEMI, + [40965] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1610), 1, + ACTIONS(1617), 1, anon_sym_DOT, - ACTIONS(1612), 1, + ACTIONS(1619), 1, anon_sym_LPAREN, - ACTIONS(1624), 1, + ACTIONS(1631), 1, anon_sym_LBRACK, - ACTIONS(1626), 1, + ACTIONS(1633), 1, anon_sym_STAR_STAR, - STATE(792), 2, + STATE(798), 2, sym_argument_list, sym_generator_expression, ACTIONS(1573), 5, @@ -60694,8 +58242,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [41014] = 3, + anon_sym_SEMI, + [41019] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1401), 4, @@ -60736,84 +58284,73 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [41058] = 14, + [41063] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1610), 1, + ACTIONS(1617), 1, anon_sym_DOT, - ACTIONS(1612), 1, + ACTIONS(1619), 1, anon_sym_LPAREN, - ACTIONS(1624), 1, + ACTIONS(1631), 1, anon_sym_LBRACK, - ACTIONS(1626), 1, + ACTIONS(1633), 1, anon_sym_STAR_STAR, - ACTIONS(1632), 1, - anon_sym_AMP, - ACTIONS(1634), 1, - anon_sym_CARET, - ACTIONS(1614), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(1616), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1622), 2, - anon_sym_DASH, - anon_sym_PLUS, - STATE(792), 2, + STATE(798), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1573), 3, + ACTIONS(1581), 5, + anon_sym_STAR, anon_sym_EQ, + anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1628), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1571), 16, + ACTIONS(1579), 25, sym__newline, anon_sym_from, anon_sym_COMMA, + anon_sym_GT_GT, anon_sym_if, anon_sym_in, anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_AT, anon_sym_not, anon_sym_and, anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [41124] = 10, + anon_sym_SEMI, + [41117] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1610), 1, + ACTIONS(1617), 1, anon_sym_DOT, - ACTIONS(1612), 1, + ACTIONS(1619), 1, anon_sym_LPAREN, - ACTIONS(1624), 1, + ACTIONS(1631), 1, anon_sym_LBRACK, - ACTIONS(1626), 1, + ACTIONS(1633), 1, anon_sym_STAR_STAR, - ACTIONS(1614), 2, - anon_sym_STAR, - anon_sym_SLASH, - STATE(792), 2, + STATE(798), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1573), 3, + ACTIONS(1581), 5, + anon_sym_STAR, anon_sym_EQ, + anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1628), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1571), 22, + ACTIONS(1579), 25, sym__newline, anon_sym_from, anon_sym_COMMA, @@ -60823,9 +58360,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_DASH, anon_sym_PLUS, + anon_sym_AT, anon_sym_not, anon_sym_and, anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, anon_sym_AMP, anon_sym_CARET, anon_sym_LT_LT, @@ -60835,37 +58375,88 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [41182] = 8, + anon_sym_SEMI, + [41171] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(1610), 1, + ACTIONS(1617), 1, anon_sym_DOT, - ACTIONS(1612), 1, + ACTIONS(1619), 1, anon_sym_LPAREN, - ACTIONS(1624), 1, + ACTIONS(1627), 1, + anon_sym_PIPE, + ACTIONS(1631), 1, anon_sym_LBRACK, - ACTIONS(1626), 1, + ACTIONS(1633), 1, anon_sym_STAR_STAR, - STATE(792), 2, + ACTIONS(1639), 1, + anon_sym_AMP, + ACTIONS(1641), 1, + anon_sym_CARET, + ACTIONS(1621), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1623), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1629), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(798), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1573), 5, - anon_sym_STAR, + ACTIONS(1577), 3, anon_sym_EQ, - anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1571), 25, + ACTIONS(1635), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1575), 15, sym__newline, anon_sym_from, anon_sym_COMMA, + anon_sym_if, + anon_sym_in, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_SEMI, + [41239] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + STATE(678), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1036), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1031), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, anon_sym_GT_GT, anon_sym_if, + anon_sym_COLON, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, anon_sym_AT, anon_sym_not, anon_sym_and, @@ -60881,8 +58472,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [41236] = 19, + [41287] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(1647), 1, @@ -60903,7 +58493,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET, ACTIONS(1675), 1, anon_sym_is, - STATE(881), 1, + STATE(884), 1, aux_sym_comparison_operator_repeat1, ACTIONS(1651), 2, anon_sym_STAR, @@ -60917,7 +58507,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(1673), 2, anon_sym_LT, anon_sym_GT, - STATE(847), 2, + STATE(818), 2, sym_argument_list, sym_generator_expression, ACTIONS(1665), 3, @@ -60931,7 +58521,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, - ACTIONS(1479), 7, + ACTIONS(1439), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -60939,40 +58529,38 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COLON, anon_sym_and, anon_sym_or, - [41312] = 13, + [41363] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(1610), 1, + ACTIONS(1617), 1, anon_sym_DOT, - ACTIONS(1612), 1, + ACTIONS(1619), 1, anon_sym_LPAREN, - ACTIONS(1624), 1, + ACTIONS(1631), 1, anon_sym_LBRACK, - ACTIONS(1626), 1, + ACTIONS(1633), 1, anon_sym_STAR_STAR, - ACTIONS(1634), 1, - anon_sym_CARET, - ACTIONS(1614), 2, + ACTIONS(1621), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1616), 2, + ACTIONS(1623), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1622), 2, + ACTIONS(1629), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(792), 2, + STATE(798), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1573), 3, + ACTIONS(1581), 3, anon_sym_EQ, anon_sym_LT, anon_sym_GT, - ACTIONS(1628), 3, + ACTIONS(1635), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1571), 17, + ACTIONS(1579), 18, sym__newline, anon_sym_from, anon_sym_COMMA, @@ -60983,88 +58571,48 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_and, anon_sym_or, anon_sym_AMP, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - sym__semicolon, - [41376] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(646), 1, - sym__string_start, - STATE(678), 2, - sym_string, - aux_sym_concatenated_string_repeat1, - ACTIONS(1053), 4, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1048), 29, - anon_sym_DOT, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_as, - anon_sym_GT_GT, - anon_sym_if, - anon_sym_COLON, - anon_sym_in, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, anon_sym_CARET, - anon_sym_LT_LT, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [41424] = 12, + anon_sym_SEMI, + [41425] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(1610), 1, + ACTIONS(1617), 1, anon_sym_DOT, - ACTIONS(1612), 1, + ACTIONS(1619), 1, anon_sym_LPAREN, - ACTIONS(1624), 1, + ACTIONS(1631), 1, anon_sym_LBRACK, - ACTIONS(1626), 1, + ACTIONS(1633), 1, anon_sym_STAR_STAR, - ACTIONS(1614), 2, + ACTIONS(1641), 1, + anon_sym_CARET, + ACTIONS(1621), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1616), 2, + ACTIONS(1623), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1622), 2, + ACTIONS(1629), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(792), 2, + STATE(798), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1573), 3, + ACTIONS(1581), 3, anon_sym_EQ, anon_sym_LT, anon_sym_GT, - ACTIONS(1628), 3, + ACTIONS(1635), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1571), 18, + ACTIONS(1579), 17, sym__newline, anon_sym_from, anon_sym_COMMA, @@ -61075,15 +58623,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_and, anon_sym_or, anon_sym_AMP, - anon_sym_CARET, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [41486] = 3, + anon_sym_SEMI, + [41489] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1405), 4, @@ -61124,94 +58671,101 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [41530] = 8, + [41533] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(1610), 1, + ACTIONS(1617), 1, anon_sym_DOT, - ACTIONS(1612), 1, + ACTIONS(1619), 1, anon_sym_LPAREN, - ACTIONS(1624), 1, + ACTIONS(1627), 1, + anon_sym_PIPE, + ACTIONS(1631), 1, anon_sym_LBRACK, - ACTIONS(1626), 1, + ACTIONS(1633), 1, anon_sym_STAR_STAR, - STATE(792), 2, + ACTIONS(1639), 1, + anon_sym_AMP, + ACTIONS(1641), 1, + anon_sym_CARET, + ACTIONS(1621), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1623), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1629), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(798), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1577), 5, - anon_sym_STAR, + ACTIONS(1585), 3, anon_sym_EQ, - anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1575), 25, + ACTIONS(1635), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1583), 15, sym__newline, anon_sym_from, anon_sym_COMMA, - anon_sym_GT_GT, anon_sym_if, anon_sym_in, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_AT, anon_sym_not, anon_sym_and, anon_sym_or, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [41584] = 15, + anon_sym_SEMI, + [41601] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(1647), 1, + ACTIONS(1617), 1, anon_sym_DOT, - ACTIONS(1649), 1, + ACTIONS(1619), 1, anon_sym_LPAREN, - ACTIONS(1657), 1, + ACTIONS(1627), 1, anon_sym_PIPE, - ACTIONS(1661), 1, + ACTIONS(1631), 1, anon_sym_LBRACK, - ACTIONS(1663), 1, + ACTIONS(1633), 1, anon_sym_STAR_STAR, - ACTIONS(1669), 1, + ACTIONS(1639), 1, anon_sym_AMP, - ACTIONS(1671), 1, + ACTIONS(1641), 1, anon_sym_CARET, - ACTIONS(1589), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1651), 2, + ACTIONS(1621), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1653), 2, + ACTIONS(1623), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1659), 2, + ACTIONS(1629), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(847), 2, + STATE(798), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1665), 3, + ACTIONS(1589), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1635), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, ACTIONS(1587), 15, - anon_sym_RPAREN, + sym__newline, + anon_sym_from, anon_sym_COMMA, - anon_sym_as, anon_sym_if, - anon_sym_COLON, anon_sym_in, anon_sym_not, anon_sym_and, @@ -61222,37 +58776,38 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [41651] = 10, + anon_sym_SEMI, + [41669] = 10, ACTIONS(3), 1, sym_comment, - ACTIONS(1647), 1, + ACTIONS(1617), 1, anon_sym_DOT, - ACTIONS(1649), 1, + ACTIONS(1619), 1, anon_sym_LPAREN, - ACTIONS(1661), 1, + ACTIONS(1631), 1, anon_sym_LBRACK, - ACTIONS(1663), 1, + ACTIONS(1633), 1, anon_sym_STAR_STAR, - ACTIONS(1573), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1651), 2, + ACTIONS(1621), 2, anon_sym_STAR, anon_sym_SLASH, - STATE(847), 2, + STATE(798), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1665), 3, + ACTIONS(1581), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1635), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1571), 22, - anon_sym_RPAREN, + ACTIONS(1579), 22, + sym__newline, + anon_sym_from, anon_sym_COMMA, - anon_sym_as, anon_sym_GT_GT, anon_sym_if, - anon_sym_COLON, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, @@ -61269,7 +58824,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [41708] = 4, + anon_sym_SEMI, + [41727] = 4, ACTIONS(3), 1, sym_comment, ACTIONS(303), 3, @@ -61290,7 +58846,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP, anon_sym_CARET, anon_sym_LT_LT, - ACTIONS(307), 19, + ACTIONS(566), 19, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -61310,55 +58866,199 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_EQ, anon_sym_CARET_EQ, anon_sym_PIPE_EQ, - [41753] = 5, + [41772] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(1591), 1, - anon_sym_COLON_EQ, - ACTIONS(1050), 3, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(1053), 4, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1048), 27, + ACTIONS(1647), 1, anon_sym_DOT, + ACTIONS(1649), 1, anon_sym_LPAREN, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + ACTIONS(1671), 1, + anon_sym_CARET, + ACTIONS(1581), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1651), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1653), 2, anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1659), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(818), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1665), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1579), 17, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, anon_sym_if, - anon_sym_async, - anon_sym_for, + anon_sym_COLON, anon_sym_in, anon_sym_PIPE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [41835] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1165), 3, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_LBRACK, + ACTIONS(1170), 13, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, anon_sym_DASH, anon_sym_PLUS, - anon_sym_LBRACK, anon_sym_STAR_STAR, anon_sym_AT, - anon_sym_not, - anon_sym_and, - anon_sym_or, + anon_sym_SLASH, anon_sym_PERCENT, anon_sym_SLASH_SLASH, anon_sym_AMP, anon_sym_CARET, anon_sym_LT_LT, + ACTIONS(1172), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [41880] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1657), 1, + anon_sym_PIPE, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + ACTIONS(1669), 1, + anon_sym_AMP, + ACTIONS(1671), 1, + anon_sym_CARET, + ACTIONS(1589), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1651), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1653), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1659), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(818), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1665), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1587), 15, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_not, + anon_sym_and, + anon_sym_or, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [41800] = 14, + [41947] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1138), 3, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_LBRACK, + ACTIONS(1143), 13, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + ACTIONS(1145), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [41992] = 15, ACTIONS(3), 1, sym_comment, ACTIONS(1647), 1, anon_sym_DOT, ACTIONS(1649), 1, anon_sym_LPAREN, + ACTIONS(1657), 1, + anon_sym_PIPE, ACTIONS(1661), 1, anon_sym_LBRACK, ACTIONS(1663), 1, @@ -61367,7 +59067,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP, ACTIONS(1671), 1, anon_sym_CARET, - ACTIONS(1573), 2, + ACTIONS(1585), 2, anon_sym_LT, anon_sym_GT, ACTIONS(1651), 2, @@ -61379,21 +59079,20 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(1659), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(847), 2, + STATE(818), 2, sym_argument_list, sym_generator_expression, ACTIONS(1665), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1571), 16, + ACTIONS(1583), 15, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, anon_sym_if, anon_sym_COLON, anon_sym_in, - anon_sym_PIPE, anon_sym_not, anon_sym_and, anon_sym_or, @@ -61403,15 +59102,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [41865] = 15, + [42059] = 14, ACTIONS(3), 1, sym_comment, ACTIONS(1647), 1, anon_sym_DOT, ACTIONS(1649), 1, anon_sym_LPAREN, - ACTIONS(1657), 1, - anon_sym_PIPE, ACTIONS(1661), 1, anon_sym_LBRACK, ACTIONS(1663), 1, @@ -61432,20 +59129,21 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(1659), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(847), 2, + STATE(818), 2, sym_argument_list, sym_generator_expression, ACTIONS(1665), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1579), 15, + ACTIONS(1579), 16, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, anon_sym_if, anon_sym_COLON, anon_sym_in, + anon_sym_PIPE, anon_sym_not, anon_sym_and, anon_sym_or, @@ -61455,7 +59153,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [41932] = 11, + [42124] = 10, ACTIONS(3), 1, sym_comment, ACTIONS(1647), 1, @@ -61466,23 +59164,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(1663), 1, anon_sym_STAR_STAR, - ACTIONS(1573), 2, + ACTIONS(1581), 2, anon_sym_LT, anon_sym_GT, ACTIONS(1651), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1659), 2, - anon_sym_DASH, - anon_sym_PLUS, - STATE(847), 2, + STATE(818), 2, sym_argument_list, sym_generator_expression, ACTIONS(1665), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1571), 20, + ACTIONS(1579), 22, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -61491,6 +59186,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COLON, anon_sym_in, anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_not, anon_sym_and, anon_sym_or, @@ -61503,7 +59200,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [41991] = 8, + [42181] = 8, ACTIONS(3), 1, sym_comment, ACTIONS(1647), 1, @@ -61514,7 +59211,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(1663), 1, anon_sym_STAR_STAR, - STATE(847), 2, + STATE(818), 2, sym_argument_list, sym_generator_expression, ACTIONS(1573), 4, @@ -61548,18 +59245,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [42044] = 4, + [42234] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1055), 1, + ACTIONS(287), 1, anon_sym_COLON_EQ, - ACTIONS(1053), 5, + ACTIONS(276), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1048), 29, + ACTIONS(303), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -61588,20 +59285,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [42089] = 4, + anon_sym_SEMI, + [42279] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(287), 1, - anon_sym_COLON_EQ, - ACTIONS(276), 5, + ACTIONS(1405), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(303), 29, + ACTIONS(1403), 30, sym__newline, + sym__string_start, anon_sym_DOT, anon_sym_from, anon_sym_LPAREN, @@ -61629,37 +59325,34 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [42134] = 8, + anon_sym_SEMI, + [42322] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1647), 1, - anon_sym_DOT, - ACTIONS(1649), 1, - anon_sym_LPAREN, - ACTIONS(1661), 1, - anon_sym_LBRACK, - ACTIONS(1663), 1, - anon_sym_STAR_STAR, - STATE(847), 2, - sym_argument_list, - sym_generator_expression, - ACTIONS(1573), 4, + ACTIONS(608), 1, + anon_sym_COLON_EQ, + ACTIONS(620), 1, + anon_sym_EQ, + ACTIONS(276), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1571), 25, + ACTIONS(303), 29, + anon_sym_DOT, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_as, anon_sym_GT_GT, anon_sym_if, - anon_sym_COLON, + anon_sym_async, + anon_sym_for, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, anon_sym_AT, anon_sym_not, anon_sym_and, @@ -61675,76 +59368,72 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [42187] = 15, + [42369] = 8, ACTIONS(3), 1, sym_comment, ACTIONS(1647), 1, anon_sym_DOT, ACTIONS(1649), 1, anon_sym_LPAREN, - ACTIONS(1657), 1, - anon_sym_PIPE, ACTIONS(1661), 1, anon_sym_LBRACK, ACTIONS(1663), 1, anon_sym_STAR_STAR, - ACTIONS(1669), 1, - anon_sym_AMP, - ACTIONS(1671), 1, - anon_sym_CARET, - ACTIONS(1585), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1651), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(1653), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1659), 2, - anon_sym_DASH, - anon_sym_PLUS, - STATE(847), 2, + STATE(818), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1665), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1583), 15, + ACTIONS(1581), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1579), 25, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, + anon_sym_GT_GT, anon_sym_if, anon_sym_COLON, anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_AT, anon_sym_not, anon_sym_and, anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [42254] = 3, + [42422] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1401), 5, + ACTIONS(1606), 1, + anon_sym_COLON_EQ, + ACTIONS(1073), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1036), 4, anon_sym_STAR, - anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1399), 30, - sym__newline, - sym__string_start, + ACTIONS(1031), 27, anon_sym_DOT, - anon_sym_from, anon_sym_LPAREN, - anon_sym_COMMA, anon_sym_GT_GT, anon_sym_if, + anon_sym_async, + anon_sym_for, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, @@ -61766,20 +59455,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [42297] = 5, + [42469] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1591), 1, + ACTIONS(1606), 1, anon_sym_COLON_EQ, ACTIONS(1677), 1, anon_sym_EQ, - ACTIONS(1053), 4, + ACTIONS(1036), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1048), 29, + ACTIONS(1031), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -61809,27 +59497,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [42344] = 5, + [42516] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(608), 1, + ACTIONS(1076), 1, anon_sym_COLON_EQ, - ACTIONS(620), 1, - anon_sym_EQ, - ACTIONS(276), 4, + ACTIONS(1036), 5, anon_sym_STAR, + anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(303), 29, + ACTIONS(1031), 29, + sym__newline, anon_sym_DOT, + anon_sym_from, anon_sym_LPAREN, - anon_sym_RPAREN, anon_sym_COMMA, anon_sym_GT_GT, anon_sym_if, - anon_sym_async, - anon_sym_for, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, @@ -61851,7 +59537,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [42391] = 13, + anon_sym_SEMI, + [42561] = 12, ACTIONS(3), 1, sym_comment, ACTIONS(1647), 1, @@ -61862,9 +59549,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(1663), 1, anon_sym_STAR_STAR, - ACTIONS(1671), 1, - anon_sym_CARET, - ACTIONS(1573), 2, + ACTIONS(1581), 2, anon_sym_LT, anon_sym_GT, ACTIONS(1651), 2, @@ -61876,14 +59561,14 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(1659), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(847), 2, + STATE(818), 2, sym_argument_list, sym_generator_expression, ACTIONS(1665), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1571), 17, + ACTIONS(1579), 18, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -61895,54 +59580,66 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_and, anon_sym_or, anon_sym_AMP, + anon_sym_CARET, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [42454] = 4, + [42622] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(1048), 3, + ACTIONS(1647), 1, anon_sym_DOT, + ACTIONS(1649), 1, anon_sym_LPAREN, + ACTIONS(1657), 1, + anon_sym_PIPE, + ACTIONS(1661), 1, anon_sym_LBRACK, - ACTIONS(1053), 13, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + ACTIONS(1669), 1, + anon_sym_AMP, + ACTIONS(1671), 1, + anon_sym_CARET, + ACTIONS(1577), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1651), 2, anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1653), 2, anon_sym_GT_GT, - anon_sym_PIPE, + anon_sym_LT_LT, + ACTIONS(1659), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, + STATE(818), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1665), 3, anon_sym_AT, - anon_sym_SLASH, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - ACTIONS(1078), 19, + ACTIONS(1575), 15, anon_sym_RPAREN, anon_sym_COMMA, + anon_sym_as, + anon_sym_if, anon_sym_COLON, anon_sym_in, - anon_sym_RBRACK, - anon_sym_EQ, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - [42499] = 12, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [42689] = 11, ACTIONS(3), 1, sym_comment, ACTIONS(1647), 1, @@ -61953,29 +59650,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(1663), 1, anon_sym_STAR_STAR, - ACTIONS(1573), 2, + ACTIONS(1581), 2, anon_sym_LT, anon_sym_GT, ACTIONS(1651), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1653), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, ACTIONS(1659), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(847), 2, + STATE(818), 2, sym_argument_list, sym_generator_expression, ACTIONS(1665), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1571), 18, + ACTIONS(1579), 20, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, + anon_sym_GT_GT, anon_sym_if, anon_sym_COLON, anon_sym_in, @@ -61985,33 +59680,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_or, anon_sym_AMP, anon_sym_CARET, + anon_sym_LT_LT, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [42560] = 5, + [42748] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(608), 1, - anon_sym_COLON_EQ, - ACTIONS(280), 3, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(276), 4, + ACTIONS(1401), 5, anon_sym_STAR, + anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(303), 27, + ACTIONS(1399), 30, + sym__newline, + sym__string_start, anon_sym_DOT, + anon_sym_from, anon_sym_LPAREN, + anon_sym_COMMA, anon_sym_GT_GT, anon_sym_if, - anon_sym_async, - anon_sym_for, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, @@ -62033,14 +59726,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [42607] = 4, + anon_sym_SEMI, + [42791] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1165), 3, + ACTIONS(1031), 3, anon_sym_DOT, anon_sym_LPAREN, anon_sym_LBRACK, - ACTIONS(1170), 13, + ACTIONS(1036), 13, anon_sym_STAR, anon_sym_GT_GT, anon_sym_PIPE, @@ -62054,7 +59748,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP, anon_sym_CARET, anon_sym_LT_LT, - ACTIONS(1172), 19, + ACTIONS(1042), 19, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -62074,52 +59768,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_EQ, anon_sym_CARET_EQ, anon_sym_PIPE_EQ, - [42652] = 8, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1647), 1, - anon_sym_DOT, - ACTIONS(1649), 1, - anon_sym_LPAREN, - ACTIONS(1661), 1, - anon_sym_LBRACK, - ACTIONS(1663), 1, - anon_sym_STAR_STAR, - STATE(847), 2, - sym_argument_list, - sym_generator_expression, - ACTIONS(1577), 4, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1575), 25, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_as, - anon_sym_GT_GT, - anon_sym_if, - anon_sym_COLON, - anon_sym_in, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_AT, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - [42705] = 4, + [42836] = 4, ACTIONS(3), 1, sym_comment, ACTIONS(303), 3, @@ -62140,7 +59789,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP, anon_sym_CARET, anon_sym_LT_LT, - ACTIONS(572), 19, + ACTIONS(307), 19, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -62160,65 +59809,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_EQ, anon_sym_CARET_EQ, anon_sym_PIPE_EQ, - [42750] = 4, + [42881] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1146), 3, - anon_sym_DOT, - anon_sym_LPAREN, - anon_sym_LBRACK, - ACTIONS(1151), 13, - anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_SLASH, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - ACTIONS(1153), 19, + ACTIONS(608), 1, + anon_sym_COLON_EQ, + ACTIONS(280), 3, anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_COLON, - anon_sym_in, anon_sym_RBRACK, - anon_sym_EQ, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - [42795] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1405), 5, + ACTIONS(276), 4, anon_sym_STAR, - anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1403), 30, - sym__newline, - sym__string_start, + ACTIONS(303), 27, anon_sym_DOT, - anon_sym_from, anon_sym_LPAREN, - anon_sym_COMMA, anon_sym_GT_GT, anon_sym_if, + anon_sym_async, + anon_sym_for, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, @@ -62240,15 +59851,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [42838] = 4, + [42928] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1048), 3, + ACTIONS(1031), 3, anon_sym_DOT, anon_sym_LPAREN, anon_sym_LBRACK, - ACTIONS(1053), 13, + ACTIONS(1036), 13, anon_sym_STAR, anon_sym_GT_GT, anon_sym_PIPE, @@ -62262,7 +59872,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP, anon_sym_CARET, anon_sym_LT_LT, - ACTIONS(1059), 19, + ACTIONS(1080), 19, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -62282,224 +59892,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_EQ, anon_sym_CARET_EQ, anon_sym_PIPE_EQ, - [42883] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1461), 5, - anon_sym_STAR, - anon_sym_EQ, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1459), 29, - sym__newline, - anon_sym_DOT, - anon_sym_from, - anon_sym_LPAREN, - anon_sym_COMMA, - anon_sym_GT_GT, - anon_sym_if, - anon_sym_in, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - sym__semicolon, - [42925] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1425), 5, - anon_sym_STAR, - anon_sym_EQ, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1423), 29, - sym__newline, - anon_sym_DOT, - anon_sym_from, - anon_sym_LPAREN, - anon_sym_COMMA, - anon_sym_GT_GT, - anon_sym_if, - anon_sym_in, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - sym__semicolon, - [42967] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1457), 5, - anon_sym_STAR, - anon_sym_EQ, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1455), 29, - sym__newline, - anon_sym_DOT, - anon_sym_from, - anon_sym_LPAREN, - anon_sym_COMMA, - anon_sym_GT_GT, - anon_sym_if, - anon_sym_in, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - sym__semicolon, - [43009] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1453), 5, - anon_sym_STAR, - anon_sym_EQ, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1451), 29, - sym__newline, - anon_sym_DOT, - anon_sym_from, - anon_sym_LPAREN, - anon_sym_COMMA, - anon_sym_GT_GT, - anon_sym_if, - anon_sym_in, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - sym__semicolon, - [43051] = 3, + [42973] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1533), 5, - anon_sym_STAR, - anon_sym_EQ, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1531), 29, - sym__newline, + ACTIONS(1647), 1, anon_sym_DOT, - anon_sym_from, + ACTIONS(1649), 1, anon_sym_LPAREN, - anon_sym_COMMA, - anon_sym_GT_GT, - anon_sym_if, - anon_sym_in, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(1661), 1, anon_sym_LBRACK, + ACTIONS(1663), 1, anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_not, - anon_sym_and, - anon_sym_or, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - anon_sym_LT_EQ, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - sym__semicolon, - [43093] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1437), 5, + STATE(818), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1581), 4, anon_sym_STAR, - anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1435), 29, - sym__newline, - anon_sym_DOT, - anon_sym_from, - anon_sym_LPAREN, + ACTIONS(1579), 25, + anon_sym_RPAREN, anon_sym_COMMA, + anon_sym_as, anon_sym_GT_GT, anon_sym_if, + anon_sym_COLON, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_STAR_STAR, anon_sym_AT, anon_sym_not, anon_sym_and, @@ -62515,17 +59937,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [43135] = 3, + [43026] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1449), 5, + ACTIONS(1537), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1447), 29, + ACTIONS(1535), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -62554,17 +59975,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [43177] = 3, + anon_sym_SEMI, + [43068] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1429), 5, + ACTIONS(1421), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1427), 29, + ACTIONS(1419), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -62593,26 +60014,65 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [43219] = 4, + anon_sym_SEMI, + [43110] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1167), 3, - anon_sym_RPAREN, + ACTIONS(1485), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1483), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(1170), 4, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_SEMI, + [43152] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(628), 1, + anon_sym_COLON_EQ, + ACTIONS(276), 5, anon_sym_STAR, + anon_sym_COLON, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1165), 27, + ACTIONS(303), 28, anon_sym_DOT, anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, anon_sym_GT_GT, anon_sym_if, - anon_sym_async, - anon_sym_for, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, @@ -62634,16 +60094,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [43263] = 3, + [43196] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1445), 5, + ACTIONS(1413), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1443), 29, + ACTIONS(1411), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -62672,17 +60132,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [43305] = 3, + anon_sym_SEMI, + [43238] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1473), 5, + ACTIONS(1521), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1471), 29, + ACTIONS(1519), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -62711,17 +60171,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [43347] = 3, + anon_sym_SEMI, + [43280] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1417), 5, + ACTIONS(1429), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1415), 29, + ACTIONS(1427), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -62750,17 +60210,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [43389] = 3, + anon_sym_SEMI, + [43322] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1425), 5, + ACTIONS(1561), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1423), 29, + ACTIONS(1559), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -62789,17 +60249,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [43431] = 3, + anon_sym_SEMI, + [43364] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1465), 5, + ACTIONS(1545), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1463), 29, + ACTIONS(1543), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -62828,17 +60288,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [43473] = 3, + anon_sym_SEMI, + [43406] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1469), 5, + ACTIONS(1541), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1467), 29, + ACTIONS(1539), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -62867,17 +60327,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [43515] = 3, + anon_sym_SEMI, + [43448] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1151), 5, + ACTIONS(1425), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1146), 29, + ACTIONS(1423), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -62906,17 +60366,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [43557] = 3, + anon_sym_SEMI, + [43490] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1170), 5, + ACTIONS(1525), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1165), 29, + ACTIONS(1523), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -62945,17 +60405,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [43599] = 3, + anon_sym_SEMI, + [43532] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1511), 5, + ACTIONS(1489), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1509), 29, + ACTIONS(1487), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -62984,26 +60444,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [43641] = 4, + anon_sym_SEMI, + [43574] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1148), 3, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(1151), 4, + ACTIONS(1533), 5, anon_sym_STAR, + anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1146), 27, + ACTIONS(1531), 29, + sym__newline, anon_sym_DOT, + anon_sym_from, anon_sym_LPAREN, + anon_sym_COMMA, anon_sym_GT_GT, anon_sym_if, - anon_sym_async, - anon_sym_for, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, @@ -63025,16 +60483,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [43685] = 3, + anon_sym_SEMI, + [43616] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1519), 5, + ACTIONS(1493), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1517), 29, + ACTIONS(1491), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -63063,17 +60522,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [43727] = 3, + anon_sym_SEMI, + [43658] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1523), 5, + ACTIONS(1549), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1521), 29, + ACTIONS(1547), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -63102,17 +60561,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [43769] = 3, + anon_sym_SEMI, + [43700] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1515), 5, + ACTIONS(1409), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1513), 29, + ACTIONS(1407), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -63141,8 +60600,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [43811] = 3, + anon_sym_SEMI, + [43742] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1417), 5, @@ -63180,17 +60639,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [43853] = 3, + anon_sym_SEMI, + [43784] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(276), 5, + ACTIONS(1421), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(303), 29, + ACTIONS(1419), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -63219,17 +60678,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [43895] = 3, + anon_sym_SEMI, + [43826] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1413), 5, + ACTIONS(1565), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1411), 29, + ACTIONS(1563), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -63258,17 +60717,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [43937] = 3, + anon_sym_SEMI, + [43868] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1519), 5, + ACTIONS(1433), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1517), 29, + ACTIONS(1431), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -63297,17 +60756,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [43979] = 3, + anon_sym_SEMI, + [43910] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1053), 5, + ACTIONS(1413), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1048), 29, + ACTIONS(1411), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -63336,24 +60795,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [44021] = 4, + anon_sym_SEMI, + [43952] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1679), 1, - anon_sym_COLON_EQ, - ACTIONS(1053), 5, + ACTIONS(1493), 5, anon_sym_STAR, - anon_sym_COLON, + anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1048), 28, + ACTIONS(1491), 29, + sym__newline, anon_sym_DOT, + anon_sym_from, anon_sym_LPAREN, - anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_as, anon_sym_GT_GT, anon_sym_if, anon_sym_in, @@ -63377,16 +60834,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [44065] = 3, + anon_sym_SEMI, + [43994] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1441), 5, + ACTIONS(1036), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1439), 29, + ACTIONS(1031), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -63415,17 +60873,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [44107] = 3, + anon_sym_SEMI, + [44036] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1541), 5, + ACTIONS(1143), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1539), 29, + ACTIONS(1138), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -63454,26 +60912,26 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [44149] = 4, + anon_sym_SEMI, + [44078] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(628), 1, - anon_sym_COLON_EQ, - ACTIONS(276), 5, + ACTIONS(1073), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1036), 4, anon_sym_STAR, - anon_sym_COLON, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(303), 28, + ACTIONS(1031), 27, anon_sym_DOT, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_as, anon_sym_GT_GT, anon_sym_if, + anon_sym_async, + anon_sym_for, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, @@ -63495,16 +60953,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [44193] = 3, + [44122] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1569), 5, + ACTIONS(1529), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1567), 29, + ACTIONS(1527), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -63533,17 +60991,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [44235] = 3, + anon_sym_SEMI, + [44164] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1433), 5, + ACTIONS(1477), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1431), 29, + ACTIONS(1475), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -63572,17 +61030,57 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [44277] = 3, + anon_sym_SEMI, + [44206] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1409), 5, + ACTIONS(1167), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1170), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1165), 27, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44250] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1170), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1407), 29, + ACTIONS(1165), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -63611,17 +61109,57 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [44319] = 3, + anon_sym_SEMI, + [44292] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1537), 5, + ACTIONS(1679), 1, + anon_sym_COLON_EQ, + ACTIONS(1036), 5, + anon_sym_STAR, + anon_sym_COLON, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1031), 28, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44336] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1481), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1535), 29, + ACTIONS(1479), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -63650,26 +61188,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [44361] = 4, + anon_sym_SEMI, + [44378] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1050), 3, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(1053), 4, + ACTIONS(1553), 5, anon_sym_STAR, + anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1048), 27, + ACTIONS(1551), 29, + sym__newline, anon_sym_DOT, + anon_sym_from, anon_sym_LPAREN, + anon_sym_COMMA, anon_sym_GT_GT, anon_sym_if, - anon_sym_async, - anon_sym_for, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, @@ -63691,16 +61227,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [44405] = 3, + anon_sym_SEMI, + [44420] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1421), 5, + ACTIONS(1477), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1419), 29, + ACTIONS(1475), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -63729,17 +61266,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [44447] = 3, + anon_sym_SEMI, + [44462] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1421), 5, + ACTIONS(1569), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1419), 29, + ACTIONS(1567), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -63768,24 +61305,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [44489] = 3, + anon_sym_SEMI, + [44504] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1519), 4, + ACTIONS(1557), 5, anon_sym_STAR, + anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1517), 29, + ACTIONS(1555), 29, + sym__newline, anon_sym_DOT, + anon_sym_from, anon_sym_LPAREN, - anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_as, anon_sym_GT_GT, anon_sym_if, - anon_sym_COLON, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, @@ -63807,23 +61344,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [44530] = 3, + anon_sym_SEMI, + [44546] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(832), 4, + ACTIONS(276), 5, anon_sym_STAR, + anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(830), 29, + ACTIONS(303), 29, + sym__newline, anon_sym_DOT, + anon_sym_from, anon_sym_LPAREN, - anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_as, anon_sym_GT_GT, anon_sym_if, - anon_sym_COLON, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, @@ -63845,23 +61383,26 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [44571] = 3, + anon_sym_SEMI, + [44588] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1053), 4, + ACTIONS(1140), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1143), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1048), 29, + ACTIONS(1138), 27, anon_sym_DOT, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_as, anon_sym_GT_GT, anon_sym_if, - anon_sym_COLON, + anon_sym_async, + anon_sym_for, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, @@ -63883,25 +61424,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [44612] = 5, + [44632] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1074), 1, - anon_sym_COLON_EQ, - ACTIONS(1677), 1, - anon_sym_EQ, - ACTIONS(1053), 4, + ACTIONS(1545), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1048), 27, + ACTIONS(1543), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, + anon_sym_as, anon_sym_GT_GT, anon_sym_if, + anon_sym_COLON, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, @@ -63923,15 +61462,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [44657] = 3, + [44673] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1461), 4, + ACTIONS(1477), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1459), 29, + ACTIONS(1475), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -63961,15 +61500,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [44698] = 3, + [44714] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1457), 4, + ACTIONS(1541), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1455), 29, + ACTIONS(1539), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -63999,15 +61538,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [44739] = 3, + [44755] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 4, + ACTIONS(1036), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1451), 29, + ACTIONS(1031), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -64037,15 +61576,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [44780] = 3, + [44796] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1449), 4, + ACTIONS(1493), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1447), 29, + ACTIONS(1491), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -64075,15 +61614,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [44821] = 3, + [44837] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1409), 4, + ACTIONS(276), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1407), 29, + ACTIONS(303), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -64113,15 +61652,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [44862] = 3, + [44878] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1445), 4, + ACTIONS(1485), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1443), 29, + ACTIONS(1483), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -64151,15 +61690,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [44903] = 3, + [44919] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1533), 4, + ACTIONS(1413), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1531), 29, + ACTIONS(1411), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -64189,15 +61728,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [44944] = 3, + [44960] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1441), 4, + ACTIONS(1529), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1439), 29, + ACTIONS(1527), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -64227,15 +61766,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [44985] = 3, + [45001] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1437), 4, + ACTIONS(1413), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1435), 29, + ACTIONS(1411), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -64265,15 +61804,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45026] = 3, + [45042] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(828), 4, + ACTIONS(1561), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(826), 29, + ACTIONS(1559), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -64303,15 +61842,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45067] = 3, + [45083] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1421), 4, + ACTIONS(1569), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1419), 29, + ACTIONS(1567), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -64341,15 +61880,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45108] = 3, + [45124] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1421), 4, + ACTIONS(1533), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1419), 29, + ACTIONS(1531), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -64379,15 +61918,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45149] = 3, + [45165] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1473), 4, + ACTIONS(1525), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1471), 29, + ACTIONS(1523), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -64417,15 +61956,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45190] = 3, + [45206] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1541), 4, + ACTIONS(1521), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1539), 29, + ACTIONS(1519), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -64455,15 +61994,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45231] = 3, + [45247] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1417), 4, + ACTIONS(1433), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1415), 29, + ACTIONS(1431), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -64493,7 +62032,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45272] = 3, + [45288] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1537), 4, @@ -64531,7 +62070,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45313] = 3, + [45329] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(840), 4, @@ -64569,15 +62108,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45354] = 3, + [45370] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1569), 4, + ACTIONS(1553), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1567), 29, + ACTIONS(1551), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -64607,15 +62146,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45395] = 3, + [45411] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1417), 4, + ACTIONS(828), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1415), 29, + ACTIONS(826), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -64645,15 +62184,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45436] = 3, + [45452] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(276), 4, + ACTIONS(828), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(303), 29, + ACTIONS(826), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -64683,23 +62222,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45477] = 3, + [45493] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1511), 4, + ACTIONS(1038), 1, + anon_sym_COLON_EQ, + ACTIONS(1677), 1, + anon_sym_EQ, + ACTIONS(1036), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1509), 29, + ACTIONS(1031), 27, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_as, anon_sym_GT_GT, anon_sym_if, - anon_sym_COLON, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, @@ -64721,15 +62262,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45518] = 3, + [45538] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(836), 4, + ACTIONS(1557), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(834), 29, + ACTIONS(1555), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -64759,15 +62300,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45559] = 3, + [45579] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1519), 4, + ACTIONS(1481), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1517), 29, + ACTIONS(1479), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -64797,15 +62338,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45600] = 3, + [45620] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(832), 4, + ACTIONS(1477), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(830), 29, + ACTIONS(1475), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -64835,25 +62376,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45641] = 5, + [45661] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(568), 1, - anon_sym_COLON_EQ, - ACTIONS(620), 1, - anon_sym_EQ, - ACTIONS(276), 4, + ACTIONS(832), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(303), 27, + ACTIONS(830), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, + anon_sym_as, anon_sym_GT_GT, anon_sym_if, + anon_sym_COLON, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, @@ -64875,7 +62414,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45686] = 3, + [45702] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1425), 4, @@ -64913,15 +62452,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45727] = 3, + [45743] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1413), 4, + ACTIONS(1493), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1411), 29, + ACTIONS(1491), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -64951,15 +62490,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45768] = 3, + [45784] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1465), 4, + ACTIONS(832), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1463), 29, + ACTIONS(830), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -64989,15 +62528,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45809] = 3, + [45825] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1429), 4, + ACTIONS(836), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1427), 29, + ACTIONS(834), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -65027,15 +62566,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45850] = 3, + [45866] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1469), 4, + ACTIONS(1565), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1467), 29, + ACTIONS(1563), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -65065,15 +62604,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45891] = 3, + [45907] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1425), 4, + ACTIONS(1417), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1423), 29, + ACTIONS(1415), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -65103,7 +62642,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45932] = 3, + [45948] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(824), 4, @@ -65141,15 +62680,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [45973] = 3, + [45989] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(824), 4, + ACTIONS(1549), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(822), 29, + ACTIONS(1547), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -65179,15 +62718,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [46014] = 3, + [46030] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1433), 4, + ACTIONS(1421), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1431), 29, + ACTIONS(1419), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -65217,15 +62756,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [46055] = 3, + [46071] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1515), 4, + ACTIONS(1409), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1513), 29, + ACTIONS(1407), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -65255,15 +62794,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [46096] = 3, + [46112] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1523), 4, + ACTIONS(1489), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1521), 29, + ACTIONS(1487), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -65293,61 +62832,123 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [46137] = 20, + [46153] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(646), 1, - sym__string_start, - ACTIONS(1681), 1, - sym_identifier, - ACTIONS(1683), 1, + ACTIONS(1421), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1419), 29, + anon_sym_DOT, anon_sym_LPAREN, - ACTIONS(1685), 1, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [46194] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1429), 4, anon_sym_STAR, - ACTIONS(1687), 1, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1427), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, anon_sym_DASH, - ACTIONS(1689), 1, - sym_match_wildcard_pattern, - ACTIONS(1691), 1, + anon_sym_PLUS, anon_sym_LBRACK, - ACTIONS(1693), 1, - anon_sym_LBRACE, - ACTIONS(1695), 1, - sym_integer, - ACTIONS(1697), 1, - sym_float, - STATE(913), 1, - sym_string, - STATE(975), 1, - sym_concatenated_string, - STATE(1406), 1, - sym_pattern_class_name, - STATE(1024), 2, - sym__match_or_pattern, - sym_match_or_pattern, - STATE(1286), 2, - sym__match_patterns, - sym_open_sequence_match_pattern, - STATE(1287), 2, - sym__match_pattern, - sym_match_as_pattern, - STATE(1404), 2, - sym__match_maybe_star_pattern, - sym_match_star_pattern, - ACTIONS(1699), 3, - sym_true, - sym_false, - sym_none, - STATE(971), 8, - sym__closed_pattern, - sym_match_literal_pattern, - sym_match_capture_pattern, - sym_match_value_pattern, - sym_match_group_pattern, - sym_match_sequence_pattern, - sym_match_mapping_pattern, - sym_match_class_pattern, - [46211] = 20, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [46235] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(562), 1, + anon_sym_COLON_EQ, + ACTIONS(620), 1, + anon_sym_EQ, + ACTIONS(276), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 27, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [46280] = 20, ACTIONS(3), 1, sym_comment, ACTIONS(646), 1, @@ -65359,40 +62960,40 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(1685), 1, anon_sym_STAR, ACTIONS(1687), 1, - anon_sym_DASH, + anon_sym_if, ACTIONS(1689), 1, - sym_match_wildcard_pattern, + anon_sym_COLON, ACTIONS(1691), 1, - anon_sym_LBRACK, + anon_sym_DASH, ACTIONS(1693), 1, - anon_sym_LBRACE, + sym_match_wildcard_pattern, ACTIONS(1695), 1, - sym_integer, + anon_sym_LBRACK, ACTIONS(1697), 1, - sym_float, + anon_sym_LBRACE, + ACTIONS(1699), 1, + sym_integer, ACTIONS(1701), 1, - anon_sym_if, - ACTIONS(1703), 1, - anon_sym_COLON, - STATE(913), 1, + sym_float, + STATE(933), 1, sym_string, - STATE(975), 1, + STATE(1007), 1, sym_concatenated_string, - STATE(1406), 1, + STATE(1447), 1, sym_pattern_class_name, - STATE(1024), 2, + STATE(1038), 2, sym__match_or_pattern, sym_match_or_pattern, - ACTIONS(1699), 3, + ACTIONS(1703), 3, sym_true, sym_false, sym_none, - STATE(1106), 4, + STATE(1104), 4, sym__match_pattern, sym_match_as_pattern, sym__match_maybe_star_pattern, sym_match_star_pattern, - STATE(971), 8, + STATE(1014), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -65401,7 +63002,7 @@ static const uint16_t ts_small_parse_table[] = { sym_match_sequence_pattern, sym_match_mapping_pattern, sym_match_class_pattern, - [46285] = 20, + [46354] = 20, ACTIONS(3), 1, sym_comment, ACTIONS(646), 1, @@ -65412,41 +63013,41 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(1685), 1, anon_sym_STAR, - ACTIONS(1687), 1, + ACTIONS(1691), 1, anon_sym_DASH, - ACTIONS(1689), 1, + ACTIONS(1693), 1, sym_match_wildcard_pattern, - ACTIONS(1691), 1, + ACTIONS(1695), 1, anon_sym_LBRACK, - ACTIONS(1693), 1, + ACTIONS(1697), 1, anon_sym_LBRACE, - ACTIONS(1695), 1, + ACTIONS(1699), 1, sym_integer, - ACTIONS(1697), 1, + ACTIONS(1701), 1, sym_float, - ACTIONS(1705), 1, - anon_sym_if, - ACTIONS(1707), 1, - anon_sym_COLON, - STATE(913), 1, + STATE(933), 1, sym_string, - STATE(975), 1, + STATE(1007), 1, sym_concatenated_string, - STATE(1406), 1, + STATE(1447), 1, sym_pattern_class_name, - STATE(1024), 2, + STATE(1038), 2, sym__match_or_pattern, sym_match_or_pattern, - ACTIONS(1699), 3, - sym_true, - sym_false, - sym_none, - STATE(1106), 4, + STATE(1336), 2, + sym__match_patterns, + sym_open_sequence_match_pattern, + STATE(1338), 2, sym__match_pattern, sym_match_as_pattern, + STATE(1359), 2, sym__match_maybe_star_pattern, sym_match_star_pattern, - STATE(971), 8, + ACTIONS(1703), 3, + sym_true, + sym_false, + sym_none, + STATE(1014), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -65455,7 +63056,7 @@ static const uint16_t ts_small_parse_table[] = { sym_match_sequence_pattern, sym_match_mapping_pattern, sym_match_class_pattern, - [46359] = 20, + [46428] = 20, ACTIONS(3), 1, sym_comment, ACTIONS(646), 1, @@ -65466,41 +63067,41 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(1685), 1, anon_sym_STAR, - ACTIONS(1687), 1, + ACTIONS(1691), 1, anon_sym_DASH, - ACTIONS(1689), 1, + ACTIONS(1693), 1, sym_match_wildcard_pattern, - ACTIONS(1691), 1, + ACTIONS(1695), 1, anon_sym_LBRACK, - ACTIONS(1693), 1, + ACTIONS(1697), 1, anon_sym_LBRACE, - ACTIONS(1695), 1, + ACTIONS(1699), 1, sym_integer, - ACTIONS(1697), 1, + ACTIONS(1701), 1, sym_float, - STATE(913), 1, + STATE(933), 1, sym_string, - STATE(975), 1, + STATE(1007), 1, sym_concatenated_string, - STATE(1406), 1, + STATE(1447), 1, sym_pattern_class_name, - STATE(1024), 2, + STATE(1038), 2, sym__match_or_pattern, sym_match_or_pattern, - STATE(1221), 2, + STATE(1292), 2, sym__match_patterns, sym_open_sequence_match_pattern, - STATE(1287), 2, + STATE(1338), 2, sym__match_pattern, sym_match_as_pattern, - STATE(1404), 2, + STATE(1359), 2, sym__match_maybe_star_pattern, sym_match_star_pattern, - ACTIONS(1699), 3, + ACTIONS(1703), 3, sym_true, sym_false, sym_none, - STATE(971), 8, + STATE(1014), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -65509,7 +63110,7 @@ static const uint16_t ts_small_parse_table[] = { sym_match_sequence_pattern, sym_match_mapping_pattern, sym_match_class_pattern, - [46433] = 20, + [46502] = 20, ACTIONS(3), 1, sym_comment, ACTIONS(646), 1, @@ -65520,40 +63121,41 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(1685), 1, anon_sym_STAR, - ACTIONS(1687), 1, + ACTIONS(1691), 1, anon_sym_DASH, - ACTIONS(1689), 1, + ACTIONS(1693), 1, sym_match_wildcard_pattern, - ACTIONS(1691), 1, + ACTIONS(1695), 1, anon_sym_LBRACK, - ACTIONS(1693), 1, + ACTIONS(1697), 1, anon_sym_LBRACE, - ACTIONS(1695), 1, + ACTIONS(1699), 1, sym_integer, - ACTIONS(1697), 1, + ACTIONS(1701), 1, sym_float, - ACTIONS(1709), 1, - anon_sym_RPAREN, - STATE(913), 1, + ACTIONS(1705), 1, + anon_sym_if, + ACTIONS(1707), 1, + anon_sym_COLON, + STATE(933), 1, sym_string, - STATE(975), 1, + STATE(1007), 1, sym_concatenated_string, - STATE(1406), 1, + STATE(1447), 1, sym_pattern_class_name, - STATE(1024), 2, + STATE(1038), 2, sym__match_or_pattern, sym_match_or_pattern, - STATE(1392), 2, + ACTIONS(1703), 3, + sym_true, + sym_false, + sym_none, + STATE(1104), 4, sym__match_pattern, sym_match_as_pattern, - STATE(1396), 2, sym__match_maybe_star_pattern, sym_match_star_pattern, - ACTIONS(1699), 3, - sym_true, - sym_false, - sym_none, - STATE(971), 8, + STATE(1014), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -65562,7 +63164,7 @@ static const uint16_t ts_small_parse_table[] = { sym_match_sequence_pattern, sym_match_mapping_pattern, sym_match_class_pattern, - [46506] = 19, + [46576] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(646), 1, @@ -65573,39 +63175,39 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(1685), 1, anon_sym_STAR, - ACTIONS(1687), 1, + ACTIONS(1691), 1, anon_sym_DASH, - ACTIONS(1689), 1, + ACTIONS(1693), 1, sym_match_wildcard_pattern, - ACTIONS(1691), 1, + ACTIONS(1695), 1, anon_sym_LBRACK, - ACTIONS(1693), 1, + ACTIONS(1697), 1, anon_sym_LBRACE, - ACTIONS(1695), 1, + ACTIONS(1699), 1, sym_integer, - ACTIONS(1697), 1, + ACTIONS(1701), 1, sym_float, - ACTIONS(1711), 1, - anon_sym_RPAREN, - STATE(913), 1, + ACTIONS(1709), 1, + anon_sym_RBRACK, + STATE(933), 1, sym_string, - STATE(975), 1, + STATE(1007), 1, sym_concatenated_string, - STATE(1406), 1, + STATE(1447), 1, sym_pattern_class_name, - STATE(1024), 2, + STATE(1038), 2, sym__match_or_pattern, sym_match_or_pattern, - ACTIONS(1699), 3, + ACTIONS(1703), 3, sym_true, sym_false, sym_none, - STATE(1106), 4, + STATE(1257), 4, sym__match_pattern, sym_match_as_pattern, sym__match_maybe_star_pattern, sym_match_star_pattern, - STATE(971), 8, + STATE(1014), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -65614,7 +63216,7 @@ static const uint16_t ts_small_parse_table[] = { sym_match_sequence_pattern, sym_match_mapping_pattern, sym_match_class_pattern, - [46577] = 19, + [46647] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(646), 1, @@ -65625,39 +63227,39 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(1685), 1, anon_sym_STAR, - ACTIONS(1687), 1, + ACTIONS(1691), 1, anon_sym_DASH, - ACTIONS(1689), 1, + ACTIONS(1693), 1, sym_match_wildcard_pattern, - ACTIONS(1691), 1, + ACTIONS(1695), 1, anon_sym_LBRACK, - ACTIONS(1693), 1, + ACTIONS(1697), 1, anon_sym_LBRACE, - ACTIONS(1695), 1, + ACTIONS(1699), 1, sym_integer, - ACTIONS(1697), 1, + ACTIONS(1701), 1, sym_float, ACTIONS(1711), 1, anon_sym_RBRACK, - STATE(913), 1, + STATE(933), 1, sym_string, - STATE(975), 1, + STATE(1007), 1, sym_concatenated_string, - STATE(1406), 1, + STATE(1447), 1, sym_pattern_class_name, - STATE(1024), 2, + STATE(1038), 2, sym__match_or_pattern, sym_match_or_pattern, - ACTIONS(1699), 3, + ACTIONS(1703), 3, sym_true, sym_false, sym_none, - STATE(1106), 4, + STATE(1104), 4, sym__match_pattern, sym_match_as_pattern, sym__match_maybe_star_pattern, sym_match_star_pattern, - STATE(971), 8, + STATE(1014), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -65666,7 +63268,7 @@ static const uint16_t ts_small_parse_table[] = { sym_match_sequence_pattern, sym_match_mapping_pattern, sym_match_class_pattern, - [46648] = 19, + [46718] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(646), 1, @@ -65677,39 +63279,39 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(1685), 1, anon_sym_STAR, - ACTIONS(1687), 1, + ACTIONS(1691), 1, anon_sym_DASH, - ACTIONS(1689), 1, + ACTIONS(1693), 1, sym_match_wildcard_pattern, - ACTIONS(1691), 1, + ACTIONS(1695), 1, anon_sym_LBRACK, - ACTIONS(1693), 1, + ACTIONS(1697), 1, anon_sym_LBRACE, - ACTIONS(1695), 1, + ACTIONS(1699), 1, sym_integer, - ACTIONS(1697), 1, + ACTIONS(1701), 1, sym_float, - ACTIONS(1709), 1, + ACTIONS(1713), 1, anon_sym_RBRACK, - STATE(913), 1, + STATE(933), 1, sym_string, - STATE(975), 1, + STATE(1007), 1, sym_concatenated_string, - STATE(1406), 1, + STATE(1447), 1, sym_pattern_class_name, - STATE(1024), 2, + STATE(1038), 2, sym__match_or_pattern, sym_match_or_pattern, - ACTIONS(1699), 3, + ACTIONS(1703), 3, sym_true, sym_false, sym_none, - STATE(1202), 4, + STATE(1104), 4, sym__match_pattern, sym_match_as_pattern, sym__match_maybe_star_pattern, sym_match_star_pattern, - STATE(971), 8, + STATE(1014), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -65718,7 +63320,7 @@ static const uint16_t ts_small_parse_table[] = { sym_match_sequence_pattern, sym_match_mapping_pattern, sym_match_class_pattern, - [46719] = 19, + [46789] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(646), 1, @@ -65729,39 +63331,39 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(1685), 1, anon_sym_STAR, - ACTIONS(1687), 1, + ACTIONS(1691), 1, anon_sym_DASH, - ACTIONS(1689), 1, + ACTIONS(1693), 1, sym_match_wildcard_pattern, - ACTIONS(1691), 1, + ACTIONS(1695), 1, anon_sym_LBRACK, - ACTIONS(1693), 1, + ACTIONS(1697), 1, anon_sym_LBRACE, - ACTIONS(1695), 1, + ACTIONS(1699), 1, sym_integer, - ACTIONS(1697), 1, + ACTIONS(1701), 1, sym_float, ACTIONS(1713), 1, - anon_sym_RBRACK, - STATE(913), 1, + anon_sym_RPAREN, + STATE(933), 1, sym_string, - STATE(975), 1, + STATE(1007), 1, sym_concatenated_string, - STATE(1406), 1, + STATE(1447), 1, sym_pattern_class_name, - STATE(1024), 2, + STATE(1038), 2, sym__match_or_pattern, sym_match_or_pattern, - ACTIONS(1699), 3, + ACTIONS(1703), 3, sym_true, sym_false, sym_none, - STATE(1106), 4, + STATE(1104), 4, sym__match_pattern, sym_match_as_pattern, sym__match_maybe_star_pattern, sym_match_star_pattern, - STATE(971), 8, + STATE(1014), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -65770,7 +63372,7 @@ static const uint16_t ts_small_parse_table[] = { sym_match_sequence_pattern, sym_match_mapping_pattern, sym_match_class_pattern, - [46790] = 19, + [46860] = 20, ACTIONS(3), 1, sym_comment, ACTIONS(646), 1, @@ -65781,39 +63383,40 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(1685), 1, anon_sym_STAR, - ACTIONS(1687), 1, + ACTIONS(1691), 1, anon_sym_DASH, - ACTIONS(1689), 1, + ACTIONS(1693), 1, sym_match_wildcard_pattern, - ACTIONS(1691), 1, + ACTIONS(1695), 1, anon_sym_LBRACK, - ACTIONS(1693), 1, + ACTIONS(1697), 1, anon_sym_LBRACE, - ACTIONS(1695), 1, + ACTIONS(1699), 1, sym_integer, - ACTIONS(1697), 1, + ACTIONS(1701), 1, sym_float, - ACTIONS(1713), 1, + ACTIONS(1709), 1, anon_sym_RPAREN, - STATE(913), 1, + STATE(933), 1, sym_string, - STATE(975), 1, + STATE(1007), 1, sym_concatenated_string, - STATE(1406), 1, + STATE(1447), 1, sym_pattern_class_name, - STATE(1024), 2, + STATE(1038), 2, sym__match_or_pattern, sym_match_or_pattern, - ACTIONS(1699), 3, - sym_true, - sym_false, - sym_none, - STATE(1106), 4, + STATE(1385), 2, sym__match_pattern, sym_match_as_pattern, + STATE(1388), 2, sym__match_maybe_star_pattern, sym_match_star_pattern, - STATE(971), 8, + ACTIONS(1703), 3, + sym_true, + sym_false, + sym_none, + STATE(1014), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -65822,7 +63425,7 @@ static const uint16_t ts_small_parse_table[] = { sym_match_sequence_pattern, sym_match_mapping_pattern, sym_match_class_pattern, - [46861] = 18, + [46933] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(646), 1, @@ -65833,37 +63436,39 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(1685), 1, anon_sym_STAR, - ACTIONS(1687), 1, + ACTIONS(1691), 1, anon_sym_DASH, - ACTIONS(1689), 1, + ACTIONS(1693), 1, sym_match_wildcard_pattern, - ACTIONS(1691), 1, + ACTIONS(1695), 1, anon_sym_LBRACK, - ACTIONS(1693), 1, + ACTIONS(1697), 1, anon_sym_LBRACE, - ACTIONS(1695), 1, + ACTIONS(1699), 1, sym_integer, - ACTIONS(1697), 1, + ACTIONS(1701), 1, sym_float, - STATE(913), 1, + ACTIONS(1711), 1, + anon_sym_RPAREN, + STATE(933), 1, sym_string, - STATE(975), 1, + STATE(1007), 1, sym_concatenated_string, - STATE(1406), 1, + STATE(1447), 1, sym_pattern_class_name, - STATE(1024), 2, + STATE(1038), 2, sym__match_or_pattern, sym_match_or_pattern, - ACTIONS(1699), 3, + ACTIONS(1703), 3, sym_true, sym_false, sym_none, - STATE(1106), 4, + STATE(1104), 4, sym__match_pattern, sym_match_as_pattern, sym__match_maybe_star_pattern, sym_match_star_pattern, - STATE(971), 8, + STATE(1014), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -65872,50 +63477,50 @@ static const uint16_t ts_small_parse_table[] = { sym_match_sequence_pattern, sym_match_mapping_pattern, sym_match_class_pattern, - [46929] = 20, + [47004] = 20, ACTIONS(3), 1, sym_comment, ACTIONS(646), 1, sym__string_start, ACTIONS(1683), 1, anon_sym_LPAREN, - ACTIONS(1687), 1, + ACTIONS(1691), 1, anon_sym_DASH, - ACTIONS(1689), 1, + ACTIONS(1693), 1, sym_match_wildcard_pattern, - ACTIONS(1691), 1, + ACTIONS(1695), 1, anon_sym_LBRACK, - ACTIONS(1693), 1, + ACTIONS(1697), 1, anon_sym_LBRACE, - ACTIONS(1695), 1, + ACTIONS(1699), 1, sym_integer, - ACTIONS(1697), 1, + ACTIONS(1701), 1, sym_float, ACTIONS(1715), 1, sym_identifier, ACTIONS(1717), 1, anon_sym_RPAREN, - STATE(913), 1, + STATE(933), 1, sym_string, - STATE(975), 1, + STATE(1007), 1, sym_concatenated_string, - STATE(1212), 1, - sym_match_positional_pattern, - STATE(1330), 1, + STATE(1295), 1, sym_match_keyword_pattern, - STATE(1406), 1, + STATE(1374), 1, + sym_match_positional_pattern, + STATE(1447), 1, sym_pattern_class_name, - STATE(1024), 2, + STATE(1038), 2, sym__match_or_pattern, sym_match_or_pattern, - STATE(1364), 2, + STATE(1357), 2, sym__match_pattern, sym_match_as_pattern, - ACTIONS(1699), 3, + ACTIONS(1703), 3, sym_true, sym_false, sym_none, - STATE(971), 8, + STATE(1014), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -65924,50 +63529,100 @@ static const uint16_t ts_small_parse_table[] = { sym_match_sequence_pattern, sym_match_mapping_pattern, sym_match_class_pattern, - [47001] = 20, + [47076] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(646), 1, sym__string_start, + ACTIONS(1681), 1, + sym_identifier, ACTIONS(1683), 1, anon_sym_LPAREN, - ACTIONS(1687), 1, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1691), 1, anon_sym_DASH, - ACTIONS(1689), 1, + ACTIONS(1693), 1, sym_match_wildcard_pattern, - ACTIONS(1691), 1, + ACTIONS(1695), 1, anon_sym_LBRACK, - ACTIONS(1693), 1, + ACTIONS(1697), 1, anon_sym_LBRACE, - ACTIONS(1695), 1, + ACTIONS(1699), 1, sym_integer, + ACTIONS(1701), 1, + sym_float, + STATE(933), 1, + sym_string, + STATE(1007), 1, + sym_concatenated_string, + STATE(1447), 1, + sym_pattern_class_name, + STATE(1038), 2, + sym__match_or_pattern, + sym_match_or_pattern, + ACTIONS(1703), 3, + sym_true, + sym_false, + sym_none, + STATE(1104), 4, + sym__match_pattern, + sym_match_as_pattern, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + STATE(1014), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [47144] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1691), 1, + anon_sym_DASH, + ACTIONS(1693), 1, + sym_match_wildcard_pattern, + ACTIONS(1695), 1, + anon_sym_LBRACK, ACTIONS(1697), 1, + anon_sym_LBRACE, + ACTIONS(1699), 1, + sym_integer, + ACTIONS(1701), 1, sym_float, ACTIONS(1715), 1, sym_identifier, ACTIONS(1719), 1, anon_sym_RPAREN, - STATE(913), 1, + STATE(933), 1, sym_string, - STATE(975), 1, + STATE(1007), 1, sym_concatenated_string, - STATE(1290), 1, + STATE(1323), 1, sym_match_keyword_pattern, - STATE(1403), 1, + STATE(1324), 1, sym_match_positional_pattern, - STATE(1406), 1, + STATE(1447), 1, sym_pattern_class_name, - STATE(1024), 2, + STATE(1038), 2, sym__match_or_pattern, sym_match_or_pattern, - STATE(1364), 2, + STATE(1357), 2, sym__match_pattern, sym_match_as_pattern, - ACTIONS(1699), 3, + ACTIONS(1703), 3, sym_true, sym_false, sym_none, - STATE(971), 8, + STATE(1014), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -65976,50 +63631,50 @@ static const uint16_t ts_small_parse_table[] = { sym_match_sequence_pattern, sym_match_mapping_pattern, sym_match_class_pattern, - [47073] = 20, + [47216] = 20, ACTIONS(3), 1, sym_comment, ACTIONS(646), 1, sym__string_start, ACTIONS(1683), 1, anon_sym_LPAREN, - ACTIONS(1687), 1, + ACTIONS(1691), 1, anon_sym_DASH, - ACTIONS(1689), 1, + ACTIONS(1693), 1, sym_match_wildcard_pattern, - ACTIONS(1691), 1, + ACTIONS(1695), 1, anon_sym_LBRACK, - ACTIONS(1693), 1, + ACTIONS(1697), 1, anon_sym_LBRACE, - ACTIONS(1695), 1, + ACTIONS(1699), 1, sym_integer, - ACTIONS(1697), 1, + ACTIONS(1701), 1, sym_float, ACTIONS(1715), 1, sym_identifier, ACTIONS(1721), 1, anon_sym_RPAREN, - STATE(913), 1, + STATE(933), 1, sym_string, - STATE(975), 1, + STATE(1007), 1, sym_concatenated_string, - STATE(1326), 1, + STATE(1246), 1, sym_match_keyword_pattern, - STATE(1403), 1, + STATE(1374), 1, sym_match_positional_pattern, - STATE(1406), 1, + STATE(1447), 1, sym_pattern_class_name, - STATE(1024), 2, + STATE(1038), 2, sym__match_or_pattern, sym_match_or_pattern, - STATE(1364), 2, + STATE(1357), 2, sym__match_pattern, sym_match_as_pattern, - ACTIONS(1699), 3, + ACTIONS(1703), 3, sym_true, sym_false, sym_none, - STATE(971), 8, + STATE(1014), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -66028,7 +63683,7 @@ static const uint16_t ts_small_parse_table[] = { sym_match_sequence_pattern, sym_match_mapping_pattern, sym_match_class_pattern, - [47145] = 18, + [47288] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(646), 1, @@ -66037,37 +63692,37 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(1683), 1, anon_sym_LPAREN, - ACTIONS(1687), 1, + ACTIONS(1691), 1, anon_sym_DASH, - ACTIONS(1689), 1, + ACTIONS(1693), 1, sym_match_wildcard_pattern, - ACTIONS(1691), 1, + ACTIONS(1695), 1, anon_sym_LBRACK, - ACTIONS(1693), 1, + ACTIONS(1697), 1, anon_sym_LBRACE, - ACTIONS(1695), 1, + ACTIONS(1699), 1, sym_integer, - ACTIONS(1697), 1, + ACTIONS(1701), 1, sym_float, - STATE(913), 1, + STATE(933), 1, sym_string, - STATE(975), 1, + STATE(1007), 1, sym_concatenated_string, - STATE(1403), 1, + STATE(1374), 1, sym_match_positional_pattern, - STATE(1406), 1, + STATE(1447), 1, sym_pattern_class_name, - STATE(1024), 2, + STATE(1038), 2, sym__match_or_pattern, sym_match_or_pattern, - STATE(1364), 2, + STATE(1357), 2, sym__match_pattern, sym_match_as_pattern, - ACTIONS(1699), 3, + ACTIONS(1703), 3, sym_true, sym_false, sym_none, - STATE(971), 8, + STATE(1014), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -66076,7 +63731,7 @@ static const uint16_t ts_small_parse_table[] = { sym_match_sequence_pattern, sym_match_mapping_pattern, sym_match_class_pattern, - [47211] = 17, + [47354] = 17, ACTIONS(3), 1, sym_comment, ACTIONS(646), 1, @@ -66085,35 +63740,35 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(1683), 1, anon_sym_LPAREN, - ACTIONS(1687), 1, + ACTIONS(1691), 1, anon_sym_DASH, - ACTIONS(1689), 1, + ACTIONS(1693), 1, sym_match_wildcard_pattern, - ACTIONS(1691), 1, + ACTIONS(1695), 1, anon_sym_LBRACK, - ACTIONS(1693), 1, + ACTIONS(1697), 1, anon_sym_LBRACE, - ACTIONS(1695), 1, + ACTIONS(1699), 1, sym_integer, - ACTIONS(1697), 1, + ACTIONS(1701), 1, sym_float, - STATE(913), 1, + STATE(933), 1, sym_string, - STATE(975), 1, + STATE(1007), 1, sym_concatenated_string, - STATE(1406), 1, + STATE(1447), 1, sym_pattern_class_name, - STATE(1024), 2, + STATE(1038), 2, sym__match_or_pattern, sym_match_or_pattern, - STATE(1355), 2, + STATE(1377), 2, sym__match_pattern, sym_match_as_pattern, - ACTIONS(1699), 3, + ACTIONS(1703), 3, sym_true, sym_false, sym_none, - STATE(971), 8, + STATE(1014), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -66122,7 +63777,7 @@ static const uint16_t ts_small_parse_table[] = { sym_match_sequence_pattern, sym_match_mapping_pattern, sym_match_class_pattern, - [47274] = 17, + [47417] = 17, ACTIONS(3), 1, sym_comment, ACTIONS(646), 1, @@ -66131,35 +63786,35 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(1683), 1, anon_sym_LPAREN, - ACTIONS(1687), 1, + ACTIONS(1691), 1, anon_sym_DASH, - ACTIONS(1689), 1, + ACTIONS(1693), 1, sym_match_wildcard_pattern, - ACTIONS(1691), 1, + ACTIONS(1695), 1, anon_sym_LBRACK, - ACTIONS(1693), 1, + ACTIONS(1697), 1, anon_sym_LBRACE, - ACTIONS(1695), 1, + ACTIONS(1699), 1, sym_integer, - ACTIONS(1697), 1, + ACTIONS(1701), 1, sym_float, - STATE(913), 1, + STATE(933), 1, sym_string, - STATE(975), 1, + STATE(1007), 1, sym_concatenated_string, - STATE(1406), 1, + STATE(1447), 1, sym_pattern_class_name, - STATE(1024), 2, + STATE(1038), 2, sym__match_or_pattern, sym_match_or_pattern, - STATE(1399), 2, + STATE(1353), 2, sym__match_pattern, sym_match_as_pattern, - ACTIONS(1699), 3, + ACTIONS(1703), 3, sym_true, sym_false, sym_none, - STATE(971), 8, + STATE(1014), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -66168,7 +63823,7 @@ static const uint16_t ts_small_parse_table[] = { sym_match_sequence_pattern, sym_match_mapping_pattern, sym_match_class_pattern, - [47337] = 15, + [47480] = 15, ACTIONS(3), 1, sym_comment, ACTIONS(646), 1, @@ -66177,29 +63832,29 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(1683), 1, anon_sym_LPAREN, - ACTIONS(1687), 1, - anon_sym_DASH, ACTIONS(1691), 1, + anon_sym_DASH, + ACTIONS(1695), 1, anon_sym_LBRACK, - ACTIONS(1693), 1, + ACTIONS(1697), 1, anon_sym_LBRACE, - ACTIONS(1695), 1, + ACTIONS(1699), 1, sym_integer, - ACTIONS(1697), 1, + ACTIONS(1701), 1, sym_float, ACTIONS(1723), 1, sym_match_wildcard_pattern, - STATE(913), 1, + STATE(933), 1, sym_string, - STATE(975), 1, + STATE(1007), 1, sym_concatenated_string, - STATE(1406), 1, + STATE(1447), 1, sym_pattern_class_name, - ACTIONS(1699), 3, + ACTIONS(1703), 3, sym_true, sym_false, sym_none, - STATE(984), 8, + STATE(957), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -66208,7 +63863,7 @@ static const uint16_t ts_small_parse_table[] = { sym_match_sequence_pattern, sym_match_mapping_pattern, sym_match_class_pattern, - [47392] = 15, + [47535] = 15, ACTIONS(3), 1, sym_comment, ACTIONS(646), 1, @@ -66217,29 +63872,29 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(1683), 1, anon_sym_LPAREN, - ACTIONS(1687), 1, - anon_sym_DASH, ACTIONS(1691), 1, + anon_sym_DASH, + ACTIONS(1695), 1, anon_sym_LBRACK, - ACTIONS(1693), 1, + ACTIONS(1697), 1, anon_sym_LBRACE, - ACTIONS(1695), 1, + ACTIONS(1699), 1, sym_integer, - ACTIONS(1697), 1, + ACTIONS(1701), 1, sym_float, ACTIONS(1725), 1, sym_match_wildcard_pattern, - STATE(913), 1, + STATE(933), 1, sym_string, - STATE(975), 1, + STATE(1007), 1, sym_concatenated_string, - STATE(1406), 1, + STATE(1447), 1, sym_pattern_class_name, - ACTIONS(1699), 3, + ACTIONS(1703), 3, sym_true, sym_false, sym_none, - STATE(957), 8, + STATE(986), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -66248,21 +63903,21 @@ static const uint16_t ts_small_parse_table[] = { sym_match_sequence_pattern, sym_match_mapping_pattern, sym_match_class_pattern, - [47447] = 8, + [47590] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1729), 1, - anon_sym_as, - ACTIONS(1734), 1, + ACTIONS(1459), 1, anon_sym_not, - ACTIONS(1740), 1, + ACTIONS(1467), 1, anon_sym_is, - STATE(868), 1, + ACTIONS(1729), 1, + anon_sym_as, + STATE(870), 1, aux_sym_comparison_operator_repeat1, - ACTIONS(1737), 2, + ACTIONS(1465), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1731), 6, + ACTIONS(1447), 6, anon_sym_in, anon_sym_LT_EQ, anon_sym_EQ_EQ, @@ -66280,60 +63935,60 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACE, anon_sym_and, anon_sym_or, - [47487] = 8, + [47630] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1729), 1, - anon_sym_EQ, - ACTIONS(1746), 1, + ACTIONS(1733), 1, + anon_sym_as, + ACTIONS(1738), 1, anon_sym_not, - ACTIONS(1752), 1, + ACTIONS(1744), 1, anon_sym_is, - STATE(869), 1, + STATE(870), 1, aux_sym_comparison_operator_repeat1, - ACTIONS(1749), 2, + ACTIONS(1741), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1743), 6, + ACTIONS(1735), 6, anon_sym_in, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, - ACTIONS(1727), 10, + ACTIONS(1731), 10, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, anon_sym_COLON, - anon_sym_else, + anon_sym_async, + anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, anon_sym_and, anon_sym_or, - sym_type_conversion, - [47527] = 8, + [47670] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1499), 1, + ACTIONS(1509), 1, anon_sym_not, - ACTIONS(1507), 1, + ACTIONS(1517), 1, anon_sym_is, - ACTIONS(1757), 1, + ACTIONS(1729), 1, anon_sym_EQ, - STATE(869), 1, + STATE(872), 1, aux_sym_comparison_operator_repeat1, - ACTIONS(1505), 2, + ACTIONS(1515), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1485), 6, + ACTIONS(1499), 6, anon_sym_in, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, - ACTIONS(1755), 10, + ACTIONS(1727), 10, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, @@ -66344,44 +63999,44 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_and, anon_sym_or, sym_type_conversion, - [47567] = 8, + [47710] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1557), 1, + ACTIONS(1733), 1, + anon_sym_EQ, + ACTIONS(1750), 1, anon_sym_not, - ACTIONS(1565), 1, + ACTIONS(1756), 1, anon_sym_is, - ACTIONS(1757), 1, - anon_sym_as, - STATE(868), 1, + STATE(872), 1, aux_sym_comparison_operator_repeat1, - ACTIONS(1563), 2, + ACTIONS(1753), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1547), 6, + ACTIONS(1747), 6, anon_sym_in, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, - ACTIONS(1755), 10, + ACTIONS(1731), 10, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, anon_sym_COLON, - anon_sym_async, - anon_sym_for, + anon_sym_else, anon_sym_RBRACK, anon_sym_RBRACE, anon_sym_and, anon_sym_or, - [47607] = 4, + sym_type_conversion, + [47750] = 4, ACTIONS(3), 1, sym_comment, ACTIONS(1761), 1, anon_sym_COMMA, - STATE(872), 1, + STATE(873), 1, aux_sym__patterns_repeat1, ACTIONS(1759), 18, anon_sym_RPAREN, @@ -66402,10 +64057,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_EQ, anon_sym_CARET_EQ, anon_sym_PIPE_EQ, - [47637] = 2, + [47780] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1764), 19, + ACTIONS(276), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1764), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + ACTIONS(303), 14, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + [47809] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1766), 19, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -66425,10 +64105,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_EQ, anon_sym_CARET_EQ, anon_sym_PIPE_EQ, - [47662] = 2, + [47834] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1766), 19, + ACTIONS(1768), 19, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -66448,10 +64128,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_EQ, anon_sym_CARET_EQ, anon_sym_PIPE_EQ, - [47687] = 2, + [47859] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1059), 19, + ACTIONS(1770), 19, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -66471,10 +64151,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_EQ, anon_sym_CARET_EQ, anon_sym_PIPE_EQ, - [47712] = 2, + [47884] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1768), 19, + ACTIONS(1080), 19, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -66494,21 +64174,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_EQ, anon_sym_CARET_EQ, anon_sym_PIPE_EQ, - [47737] = 8, + [47909] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1729), 1, - anon_sym_EQ, - ACTIONS(1773), 1, + ACTIONS(1637), 1, anon_sym_not, - ACTIONS(1779), 1, + ACTIONS(1645), 1, anon_sym_is, - STATE(877), 1, + ACTIONS(1729), 1, + anon_sym_EQ, + STATE(880), 1, aux_sym_comparison_operator_repeat1, - ACTIONS(1776), 2, + ACTIONS(1643), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1770), 6, + ACTIONS(1625), 6, anon_sym_in, anon_sym_LT_EQ, anon_sym_EQ_EQ, @@ -66522,72 +64202,47 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_and, anon_sym_or, - sym__semicolon, - [47774] = 8, + anon_sym_SEMI, + [47946] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1630), 1, + ACTIONS(1733), 1, + anon_sym_EQ, + ACTIONS(1775), 1, anon_sym_not, - ACTIONS(1638), 1, + ACTIONS(1781), 1, anon_sym_is, - ACTIONS(1757), 1, - anon_sym_EQ, - STATE(877), 1, + STATE(880), 1, aux_sym_comparison_operator_repeat1, - ACTIONS(1636), 2, + ACTIONS(1778), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1618), 6, + ACTIONS(1772), 6, anon_sym_in, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, - ACTIONS(1755), 7, + ACTIONS(1731), 7, sym__newline, anon_sym_from, anon_sym_COMMA, anon_sym_if, anon_sym_and, anon_sym_or, - sym__semicolon, - [47811] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1053), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(1782), 3, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_COLON, - ACTIONS(1048), 14, - anon_sym_DOT, - anon_sym_LPAREN, - anon_sym_GT_GT, - anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - [47840] = 4, + anon_sym_SEMI, + [47983] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(276), 2, + ACTIONS(1036), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(1784), 3, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, - ACTIONS(303), 14, + ACTIONS(1031), 14, anon_sym_DOT, anon_sym_LPAREN, anon_sym_GT_GT, @@ -66602,26 +64257,26 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP, anon_sym_CARET, anon_sym_LT_LT, - [47869] = 7, + [48012] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(1667), 1, + ACTIONS(1789), 1, anon_sym_not, - ACTIONS(1675), 1, + ACTIONS(1795), 1, anon_sym_is, - STATE(883), 1, + STATE(882), 1, aux_sym_comparison_operator_repeat1, - ACTIONS(1673), 2, + ACTIONS(1792), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1655), 6, + ACTIONS(1786), 6, anon_sym_in, anon_sym_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, - ACTIONS(1755), 7, + ACTIONS(1731), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -66629,52 +64284,52 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COLON, anon_sym_and, anon_sym_or, - [47903] = 13, + [48046] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(1475), 1, + ACTIONS(1435), 1, anon_sym_DOT, - ACTIONS(1477), 1, + ACTIONS(1437), 1, anon_sym_LPAREN, - ACTIONS(1487), 1, - anon_sym_PIPE, - ACTIONS(1491), 1, + ACTIONS(1453), 1, anon_sym_LBRACK, - ACTIONS(1493), 1, - anon_sym_STAR_STAR, ACTIONS(1501), 1, + anon_sym_PIPE, + ACTIONS(1505), 1, + anon_sym_STAR_STAR, + ACTIONS(1511), 1, anon_sym_AMP, - ACTIONS(1503), 1, + ACTIONS(1513), 1, anon_sym_CARET, - ACTIONS(1481), 2, + ACTIONS(1495), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1483), 2, + ACTIONS(1497), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1489), 2, + ACTIONS(1503), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(633), 2, + STATE(634), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1497), 3, + ACTIONS(1507), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - [47949] = 7, + [48092] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(1789), 1, + ACTIONS(1667), 1, anon_sym_not, - ACTIONS(1795), 1, + ACTIONS(1675), 1, anon_sym_is, - STATE(883), 1, + STATE(882), 1, aux_sym_comparison_operator_repeat1, - ACTIONS(1792), 2, + ACTIONS(1673), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1786), 6, + ACTIONS(1655), 6, anon_sym_in, anon_sym_LT_EQ, anon_sym_EQ_EQ, @@ -66689,12 +64344,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COLON, anon_sym_and, anon_sym_or, - [47983] = 4, + [48126] = 4, ACTIONS(3), 1, sym_comment, ACTIONS(1798), 1, anon_sym_COMMA, - STATE(872), 1, + STATE(873), 1, aux_sym__patterns_repeat1, ACTIONS(1800), 16, anon_sym_COLON, @@ -66713,7 +64368,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_EQ, anon_sym_CARET_EQ, anon_sym_PIPE_EQ, - [48011] = 12, + [48154] = 12, ACTIONS(3), 1, sym_comment, ACTIONS(1802), 1, @@ -66728,23 +64383,48 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, ACTIONS(1812), 1, anon_sym_SLASH, - STATE(1334), 1, + STATE(1214), 1, sym_parameter, - STATE(1453), 1, - sym_lambda_parameters, - STATE(1521), 1, + STATE(1414), 1, sym__parameters, - STATE(1347), 2, + STATE(1435), 1, + sym_lambda_parameters, + STATE(1349), 2, sym_list_splat_pattern, sym_dictionary_splat_pattern, - STATE(1333), 6, + STATE(1339), 6, sym_tuple_pattern, sym_default_parameter, sym_typed_default_parameter, sym_typed_parameter, sym_positional_separator, sym_keyword_separator, - [48054] = 12, + [48197] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1814), 1, + anon_sym_COMMA, + ACTIONS(1816), 1, + anon_sym_COLON, + ACTIONS(1818), 1, + anon_sym_EQ, + STATE(885), 1, + aux_sym__patterns_repeat1, + ACTIONS(1820), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [48228] = 12, ACTIONS(3), 1, sym_comment, ACTIONS(1802), 1, @@ -66757,25 +64437,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, ACTIONS(1812), 1, anon_sym_SLASH, - ACTIONS(1814), 1, + ACTIONS(1822), 1, anon_sym_COLON, - STATE(1334), 1, + STATE(1214), 1, sym_parameter, - STATE(1458), 1, - sym_lambda_parameters, - STATE(1521), 1, + STATE(1414), 1, sym__parameters, - STATE(1347), 2, + STATE(1425), 1, + sym_lambda_parameters, + STATE(1349), 2, sym_list_splat_pattern, sym_dictionary_splat_pattern, - STATE(1333), 6, + STATE(1339), 6, sym_tuple_pattern, sym_default_parameter, sym_typed_default_parameter, sym_typed_parameter, sym_positional_separator, sym_keyword_separator, - [48097] = 12, + [48271] = 12, ACTIONS(3), 1, sym_comment, ACTIONS(1802), 1, @@ -66788,25 +64468,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, ACTIONS(1812), 1, anon_sym_SLASH, - ACTIONS(1816), 1, + ACTIONS(1824), 1, anon_sym_COLON, - STATE(1334), 1, + STATE(1214), 1, sym_parameter, - STATE(1413), 1, - sym_lambda_parameters, - STATE(1521), 1, + STATE(1414), 1, sym__parameters, - STATE(1347), 2, + STATE(1444), 1, + sym_lambda_parameters, + STATE(1349), 2, sym_list_splat_pattern, sym_dictionary_splat_pattern, - STATE(1333), 6, + STATE(1339), 6, sym_tuple_pattern, sym_default_parameter, sym_typed_default_parameter, sym_typed_parameter, sym_positional_separator, sym_keyword_separator, - [48140] = 12, + [48314] = 12, ACTIONS(3), 1, sym_comment, ACTIONS(1802), 1, @@ -66819,50 +64499,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, ACTIONS(1812), 1, anon_sym_SLASH, - ACTIONS(1818), 1, - anon_sym_COLON, - STATE(1334), 1, - sym_parameter, - STATE(1427), 1, - sym_lambda_parameters, - STATE(1521), 1, - sym__parameters, - STATE(1347), 2, - sym_list_splat_pattern, - sym_dictionary_splat_pattern, - STATE(1333), 6, - sym_tuple_pattern, - sym_default_parameter, - sym_typed_default_parameter, - sym_typed_parameter, - sym_positional_separator, - sym_keyword_separator, - [48183] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1820), 1, - anon_sym_COMMA, - ACTIONS(1822), 1, - anon_sym_COLON, - ACTIONS(1824), 1, - anon_sym_EQ, - STATE(884), 1, - aux_sym__patterns_repeat1, - ACTIONS(1826), 13, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_EQ, - anon_sym_AT_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_PERCENT_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_GT_GT_EQ, - anon_sym_LT_LT_EQ, - anon_sym_AMP_EQ, - anon_sym_CARET_EQ, - anon_sym_PIPE_EQ, - [48214] = 12, + ACTIONS(1826), 1, + anon_sym_COLON, + STATE(1214), 1, + sym_parameter, + STATE(1414), 1, + sym__parameters, + STATE(1430), 1, + sym_lambda_parameters, + STATE(1349), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1339), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48357] = 12, ACTIONS(3), 1, sym_comment, ACTIONS(1802), 1, @@ -66877,32 +64532,32 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_SLASH, ACTIONS(1828), 1, anon_sym_COLON, - STATE(1334), 1, + STATE(1214), 1, sym_parameter, - STATE(1521), 1, + STATE(1414), 1, sym__parameters, - STATE(1524), 1, + STATE(1521), 1, sym_lambda_parameters, - STATE(1347), 2, + STATE(1349), 2, sym_list_splat_pattern, sym_dictionary_splat_pattern, - STATE(1333), 6, + STATE(1339), 6, sym_tuple_pattern, sym_default_parameter, sym_typed_default_parameter, sym_typed_parameter, sym_positional_separator, sym_keyword_separator, - [48257] = 14, + [48400] = 14, ACTIONS(3), 1, sym_comment, ACTIONS(315), 1, sym__string_start, - ACTIONS(1687), 1, + ACTIONS(1691), 1, anon_sym_DASH, - ACTIONS(1695), 1, + ACTIONS(1699), 1, sym_integer, - ACTIONS(1697), 1, + ACTIONS(1701), 1, sym_float, ACTIONS(1830), 1, sym_identifier, @@ -66910,31 +64565,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACE, ACTIONS(1834), 1, anon_sym_STAR_STAR, - STATE(975), 1, + STATE(1007), 1, sym_concatenated_string, - STATE(1168), 1, + STATE(1182), 1, sym_string, - STATE(1359), 1, - sym_match_double_star_pattern, - STATE(1362), 1, + STATE(1367), 1, sym_match_key_value_pattern, - STATE(1486), 2, + STATE(1378), 1, + sym_match_double_star_pattern, + STATE(1473), 2, sym_match_literal_pattern, sym_match_value_pattern, - ACTIONS(1699), 3, + ACTIONS(1703), 3, sym_true, sym_false, sym_none, - [48303] = 14, + [48446] = 14, ACTIONS(3), 1, sym_comment, ACTIONS(315), 1, sym__string_start, - ACTIONS(1687), 1, + ACTIONS(1691), 1, anon_sym_DASH, - ACTIONS(1695), 1, + ACTIONS(1699), 1, sym_integer, - ACTIONS(1697), 1, + ACTIONS(1701), 1, sym_float, ACTIONS(1830), 1, sym_identifier, @@ -66942,22 +64597,54 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, ACTIONS(1836), 1, anon_sym_RBRACE, - STATE(975), 1, + STATE(1007), 1, sym_concatenated_string, - STATE(1168), 1, + STATE(1182), 1, sym_string, - STATE(1218), 1, + STATE(1222), 1, sym_match_key_value_pattern, - STATE(1368), 1, + STATE(1407), 1, + sym_match_double_star_pattern, + STATE(1473), 2, + sym_match_literal_pattern, + sym_match_value_pattern, + ACTIONS(1703), 3, + sym_true, + sym_false, + sym_none, + [48492] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1691), 1, + anon_sym_DASH, + ACTIONS(1699), 1, + sym_integer, + ACTIONS(1701), 1, + sym_float, + ACTIONS(1830), 1, + sym_identifier, + ACTIONS(1834), 1, + anon_sym_STAR_STAR, + ACTIONS(1838), 1, + anon_sym_RBRACE, + STATE(1007), 1, + sym_concatenated_string, + STATE(1182), 1, + sym_string, + STATE(1365), 1, sym_match_double_star_pattern, - STATE(1486), 2, + STATE(1367), 1, + sym_match_key_value_pattern, + STATE(1473), 2, sym_match_literal_pattern, sym_match_value_pattern, - ACTIONS(1699), 3, + ACTIONS(1703), 3, sym_true, sym_false, sym_none, - [48349] = 11, + [48538] = 11, ACTIONS(3), 1, sym_comment, ACTIONS(1804), 1, @@ -66968,57 +64655,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, ACTIONS(1812), 1, anon_sym_SLASH, - ACTIONS(1838), 1, - sym_identifier, ACTIONS(1840), 1, + sym_identifier, + ACTIONS(1842), 1, anon_sym_RPAREN, - STATE(1229), 1, + STATE(1230), 1, sym_parameter, - STATE(1455), 1, + STATE(1483), 1, sym__parameters, - STATE(1267), 2, + STATE(1298), 2, sym_list_splat_pattern, sym_dictionary_splat_pattern, - STATE(1333), 6, + STATE(1339), 6, sym_tuple_pattern, sym_default_parameter, sym_typed_default_parameter, sym_typed_parameter, sym_positional_separator, sym_keyword_separator, - [48389] = 14, - ACTIONS(3), 1, - sym_comment, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(1687), 1, - anon_sym_DASH, - ACTIONS(1695), 1, - sym_integer, - ACTIONS(1697), 1, - sym_float, - ACTIONS(1830), 1, - sym_identifier, - ACTIONS(1834), 1, - anon_sym_STAR_STAR, - ACTIONS(1842), 1, - anon_sym_RBRACE, - STATE(975), 1, - sym_concatenated_string, - STATE(1168), 1, - sym_string, - STATE(1362), 1, - sym_match_key_value_pattern, - STATE(1401), 1, - sym_match_double_star_pattern, - STATE(1486), 2, - sym_match_literal_pattern, - sym_match_value_pattern, - ACTIONS(1699), 3, - sym_true, - sym_false, - sym_none, - [48435] = 10, + [48578] = 10, ACTIONS(3), 1, sym_comment, ACTIONS(1804), 1, @@ -67029,23 +64684,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, ACTIONS(1812), 1, anon_sym_SLASH, - ACTIONS(1838), 1, + ACTIONS(1840), 1, sym_identifier, ACTIONS(1844), 1, anon_sym_RPAREN, - STATE(1201), 1, + STATE(1276), 1, sym_parameter, - STATE(1267), 2, + STATE(1298), 2, sym_list_splat_pattern, sym_dictionary_splat_pattern, - STATE(1333), 6, + STATE(1339), 6, sym_tuple_pattern, sym_default_parameter, sym_typed_default_parameter, sym_typed_parameter, sym_positional_separator, sym_keyword_separator, - [48472] = 10, + [48615] = 10, ACTIONS(3), 1, sym_comment, ACTIONS(1802), 1, @@ -67058,28 +64713,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, ACTIONS(1812), 1, anon_sym_SLASH, - ACTIONS(1846), 1, + ACTIONS(1844), 1, anon_sym_COLON, - STATE(1201), 1, + STATE(1276), 1, sym_parameter, - STATE(1347), 2, + STATE(1349), 2, sym_list_splat_pattern, sym_dictionary_splat_pattern, - STATE(1333), 6, + STATE(1339), 6, sym_tuple_pattern, sym_default_parameter, sym_typed_default_parameter, sym_typed_parameter, sym_positional_separator, sym_keyword_separator, - [48509] = 4, + [48652] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1822), 1, + ACTIONS(1816), 1, anon_sym_COLON, - ACTIONS(1824), 1, + ACTIONS(1818), 1, anon_sym_EQ, - ACTIONS(1826), 13, + ACTIONS(1820), 13, anon_sym_PLUS_EQ, anon_sym_DASH_EQ, anon_sym_STAR_EQ, @@ -67093,7 +64748,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_EQ, anon_sym_CARET_EQ, anon_sym_PIPE_EQ, - [48534] = 10, + [48677] = 10, ACTIONS(3), 1, sym_comment, ACTIONS(1802), 1, @@ -67106,21 +64761,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, ACTIONS(1812), 1, anon_sym_SLASH, - ACTIONS(1844), 1, + ACTIONS(1846), 1, anon_sym_COLON, - STATE(1201), 1, + STATE(1276), 1, sym_parameter, - STATE(1347), 2, + STATE(1349), 2, sym_list_splat_pattern, sym_dictionary_splat_pattern, - STATE(1333), 6, + STATE(1339), 6, sym_tuple_pattern, sym_default_parameter, sym_typed_default_parameter, sym_typed_parameter, sym_positional_separator, sym_keyword_separator, - [48571] = 10, + [48714] = 10, ACTIONS(3), 1, sym_comment, ACTIONS(1804), 1, @@ -67131,42 +64786,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, ACTIONS(1812), 1, anon_sym_SLASH, - ACTIONS(1838), 1, + ACTIONS(1840), 1, sym_identifier, ACTIONS(1846), 1, anon_sym_RPAREN, - STATE(1201), 1, + STATE(1276), 1, sym_parameter, - STATE(1267), 2, + STATE(1298), 2, sym_list_splat_pattern, sym_dictionary_splat_pattern, - STATE(1333), 6, + STATE(1339), 6, sym_tuple_pattern, sym_default_parameter, sym_typed_default_parameter, sym_typed_parameter, sym_positional_separator, sym_keyword_separator, - [48608] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1495), 1, - anon_sym_as, - ACTIONS(1479), 13, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_if, - anon_sym_COLON, - anon_sym_else, - anon_sym_async, - anon_sym_for, - anon_sym_RBRACK, - anon_sym_RBRACE, - anon_sym_EQ, - anon_sym_and, - anon_sym_or, - sym_type_conversion, - [48630] = 3, + [48751] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1850), 1, @@ -67185,7 +64821,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_and, anon_sym_or, sym_type_conversion, - [48652] = 9, + [48773] = 9, ACTIONS(3), 1, sym_comment, ACTIONS(1802), 1, @@ -67198,19 +64834,38 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, ACTIONS(1812), 1, anon_sym_SLASH, - STATE(1201), 1, + STATE(1276), 1, sym_parameter, - STATE(1347), 2, + STATE(1349), 2, sym_list_splat_pattern, sym_dictionary_splat_pattern, - STATE(1333), 6, + STATE(1339), 6, sym_tuple_pattern, sym_default_parameter, sym_typed_default_parameter, sym_typed_parameter, sym_positional_separator, sym_keyword_separator, - [48686] = 9, + [48807] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1854), 1, + anon_sym_as, + ACTIONS(1852), 13, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + anon_sym_and, + anon_sym_or, + sym_type_conversion, + [48829] = 9, ACTIONS(3), 1, sym_comment, ACTIONS(1804), 1, @@ -67221,26 +64876,26 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, ACTIONS(1812), 1, anon_sym_SLASH, - ACTIONS(1838), 1, + ACTIONS(1840), 1, sym_identifier, - STATE(1201), 1, + STATE(1276), 1, sym_parameter, - STATE(1267), 2, + STATE(1298), 2, sym_list_splat_pattern, sym_dictionary_splat_pattern, - STATE(1333), 6, + STATE(1339), 6, sym_tuple_pattern, sym_default_parameter, sym_typed_default_parameter, sym_typed_parameter, sym_positional_separator, sym_keyword_separator, - [48720] = 3, + [48863] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1854), 1, + ACTIONS(1441), 1, anon_sym_as, - ACTIONS(1852), 13, + ACTIONS(1439), 13, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, @@ -67254,38 +64909,38 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_and, anon_sym_or, sym_type_conversion, - [48742] = 11, + [48885] = 11, ACTIONS(3), 1, sym_comment, ACTIONS(315), 1, sym__string_start, - ACTIONS(1687), 1, + ACTIONS(1691), 1, anon_sym_DASH, - ACTIONS(1695), 1, + ACTIONS(1699), 1, sym_integer, - ACTIONS(1697), 1, + ACTIONS(1701), 1, sym_float, ACTIONS(1830), 1, sym_identifier, - STATE(975), 1, + STATE(1007), 1, sym_concatenated_string, - STATE(1168), 1, + STATE(1182), 1, sym_string, - STATE(1362), 1, + STATE(1367), 1, sym_match_key_value_pattern, - STATE(1486), 2, + STATE(1473), 2, sym_match_literal_pattern, sym_match_value_pattern, - ACTIONS(1699), 3, + ACTIONS(1703), 3, sym_true, sym_false, sym_none, - [48779] = 4, + [48922] = 4, ACTIONS(3), 1, sym_comment, ACTIONS(1858), 1, anon_sym_DOT, - STATE(906), 1, + STATE(907), 1, aux_sym_match_value_pattern_repeat1, ACTIONS(1856), 10, anon_sym_import, @@ -67298,78 +64953,103 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [48801] = 12, + [48944] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1861), 1, - anon_sym_COMMA, ACTIONS(1863), 1, - anon_sym_if, + anon_sym_as, ACTIONS(1865), 1, - anon_sym_COLON, + anon_sym_and, ACTIONS(1867), 1, + anon_sym_or, + ACTIONS(1861), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, anon_sym_async, - ACTIONS(1869), 1, anon_sym_for, - ACTIONS(1871), 1, + anon_sym_RBRACK, anon_sym_RBRACE, + [48967] = 9, + ACTIONS(1869), 1, + anon_sym_LBRACE2, ACTIONS(1873), 1, - anon_sym_and, + anon_sym_BSLASH, + ACTIONS(1875), 1, + sym_comment, + ACTIONS(1877), 1, + sym__string_end, + STATE(921), 1, + aux_sym_string_repeat1, + STATE(1088), 1, + sym_interpolation, + STATE(1089), 1, + sym_string_content, + STATE(990), 2, + sym__not_escape_sequence, + aux_sym_string_content_repeat1, + ACTIONS(1871), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [48998] = 9, + ACTIONS(1869), 1, + anon_sym_LBRACE2, + ACTIONS(1873), 1, + anon_sym_BSLASH, ACTIONS(1875), 1, - anon_sym_or, - STATE(956), 1, - sym_for_in_clause, - STATE(1111), 1, - aux_sym__collection_elements_repeat1, - STATE(1438), 1, - sym__comprehension_clauses, - [48838] = 5, - ACTIONS(3), 1, sym_comment, ACTIONS(1879), 1, - anon_sym_if, - ACTIONS(1881), 1, - anon_sym_and, - ACTIONS(1883), 1, - anon_sym_or, - ACTIONS(1877), 8, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_else, - anon_sym_RBRACK, - anon_sym_RBRACE, - anon_sym_EQ, - sym_type_conversion, - [48861] = 6, + sym__string_end, + STATE(927), 1, + aux_sym_string_repeat1, + STATE(1088), 1, + sym_interpolation, + STATE(1089), 1, + sym_string_content, + STATE(990), 2, + sym__not_escape_sequence, + aux_sym_string_content_repeat1, + ACTIONS(1871), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49029] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(1863), 1, - anon_sym_if, - ACTIONS(1873), 1, + ACTIONS(1865), 1, anon_sym_and, - ACTIONS(1875), 1, + ACTIONS(1867), 1, anon_sym_or, - ACTIONS(1887), 1, - anon_sym_as, - ACTIONS(1885), 7, + ACTIONS(1881), 1, anon_sym_RPAREN, + ACTIONS(1883), 1, anon_sym_COMMA, - anon_sym_COLON, + ACTIONS(1886), 1, + anon_sym_as, + ACTIONS(1888), 1, + anon_sym_if, + ACTIONS(1890), 1, anon_sym_async, + ACTIONS(1892), 1, anon_sym_for, - anon_sym_RBRACK, - anon_sym_RBRACE, - [48886] = 5, + STATE(958), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1421), 1, + sym__comprehension_clauses, + [49066] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1889), 1, + ACTIONS(1894), 1, anon_sym_DOT, - ACTIONS(1891), 1, + ACTIONS(1896), 1, anon_sym_LPAREN, - STATE(906), 1, + STATE(907), 1, aux_sym_match_value_pattern_repeat1, - ACTIONS(1893), 8, + ACTIONS(1898), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -67378,77 +65058,98 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [48909] = 12, + [49089] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(1861), 1, - anon_sym_COMMA, - ACTIONS(1863), 1, - anon_sym_if, ACTIONS(1865), 1, - anon_sym_COLON, + anon_sym_and, ACTIONS(1867), 1, + anon_sym_or, + ACTIONS(1888), 1, + anon_sym_if, + ACTIONS(1890), 1, anon_sym_async, - ACTIONS(1869), 1, + ACTIONS(1892), 1, anon_sym_for, - ACTIONS(1871), 1, + ACTIONS(1900), 1, + anon_sym_COMMA, + ACTIONS(1902), 1, + anon_sym_COLON, + ACTIONS(1904), 1, anon_sym_RBRACE, - ACTIONS(1873), 1, - anon_sym_and, - ACTIONS(1875), 1, - anon_sym_or, - STATE(956), 1, + STATE(958), 1, sym_for_in_clause, STATE(1111), 1, aux_sym__collection_elements_repeat1, - STATE(1405), 1, + STATE(1418), 1, sym__comprehension_clauses, - [48946] = 6, + [49126] = 9, + ACTIONS(1869), 1, + anon_sym_LBRACE2, + ACTIONS(1873), 1, + anon_sym_BSLASH, + ACTIONS(1875), 1, + sym_comment, + ACTIONS(1906), 1, + sym__string_end, + STATE(921), 1, + aux_sym_string_repeat1, + STATE(1088), 1, + sym_interpolation, + STATE(1089), 1, + sym_string_content, + STATE(990), 2, + sym__not_escape_sequence, + aux_sym_string_content_repeat1, + ACTIONS(1871), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49157] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1863), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1873), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1875), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(1897), 1, - anon_sym_as, - ACTIONS(1895), 7, + ACTIONS(1908), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, - anon_sym_async, - anon_sym_for, + anon_sym_else, anon_sym_RBRACK, anon_sym_RBRACE, - [48971] = 4, + anon_sym_EQ, + sym_type_conversion, + [49180] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(646), 1, - sym__string_start, - STATE(678), 2, - sym_string, - aux_sym_concatenated_string_repeat1, - ACTIONS(1899), 8, + ACTIONS(1865), 1, + anon_sym_and, + ACTIONS(1918), 1, + anon_sym_as, + ACTIONS(1916), 9, anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_as, anon_sym_if, anon_sym_COLON, - anon_sym_PIPE, + anon_sym_async, + anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, - [48992] = 5, + anon_sym_or, + [49201] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1873), 1, + ACTIONS(1865), 1, anon_sym_and, - ACTIONS(1875), 1, + ACTIONS(1867), 1, anon_sym_or, - ACTIONS(1903), 1, + ACTIONS(1918), 1, anon_sym_as, - ACTIONS(1901), 8, + ACTIONS(1916), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, @@ -67457,98 +65158,97 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, - [49015] = 12, + [49224] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1863), 1, - anon_sym_if, - ACTIONS(1867), 1, - anon_sym_async, - ACTIONS(1869), 1, - anon_sym_for, - ACTIONS(1873), 1, + ACTIONS(1865), 1, anon_sym_and, - ACTIONS(1875), 1, + ACTIONS(1867), 1, anon_sym_or, - ACTIONS(1905), 1, - anon_sym_RPAREN, - ACTIONS(1907), 1, - anon_sym_COMMA, - ACTIONS(1910), 1, + ACTIONS(1922), 1, anon_sym_as, - STATE(956), 1, - sym_for_in_clause, - STATE(1111), 1, - aux_sym__collection_elements_repeat1, - STATE(1464), 1, - sym__comprehension_clauses, - [49052] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1881), 1, - anon_sym_and, - ACTIONS(1883), 1, - anon_sym_or, - ACTIONS(1912), 9, + ACTIONS(1920), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, anon_sym_COLON, - anon_sym_else, + anon_sym_async, + anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, - anon_sym_EQ, - sym_type_conversion, - [49073] = 2, + [49247] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(1856), 11, - anon_sym_import, - anon_sym_DOT, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_as, + ACTIONS(1865), 1, + anon_sym_and, + ACTIONS(1867), 1, + anon_sym_or, + ACTIONS(1888), 1, anon_sym_if, - anon_sym_COLON, - anon_sym_PIPE, - anon_sym_RBRACK, - anon_sym_RBRACE, - [49090] = 12, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1861), 1, + ACTIONS(1926), 1, + anon_sym_as, + ACTIONS(1924), 7, + anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(1863), 1, - anon_sym_if, - ACTIONS(1865), 1, anon_sym_COLON, - ACTIONS(1867), 1, anon_sym_async, - ACTIONS(1869), 1, anon_sym_for, - ACTIONS(1871), 1, + anon_sym_RBRACK, anon_sym_RBRACE, + [49272] = 9, + ACTIONS(1869), 1, + anon_sym_LBRACE2, ACTIONS(1873), 1, - anon_sym_and, + anon_sym_BSLASH, ACTIONS(1875), 1, - anon_sym_or, - STATE(956), 1, - sym_for_in_clause, - STATE(1111), 1, - aux_sym__collection_elements_repeat1, - STATE(1410), 1, - sym__comprehension_clauses, - [49127] = 5, + sym_comment, + ACTIONS(1928), 1, + sym__string_end, + STATE(909), 1, + aux_sym_string_repeat1, + STATE(1088), 1, + sym_interpolation, + STATE(1089), 1, + sym_string_content, + STATE(990), 2, + sym__not_escape_sequence, + aux_sym_string_content_repeat1, + ACTIONS(1871), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49303] = 9, + ACTIONS(1875), 1, + sym_comment, + ACTIONS(1930), 1, + anon_sym_LBRACE2, + ACTIONS(1936), 1, + anon_sym_BSLASH, + ACTIONS(1939), 1, + sym__string_end, + STATE(921), 1, + aux_sym_string_repeat1, + STATE(1088), 1, + sym_interpolation, + STATE(1089), 1, + sym_string_content, + STATE(990), 2, + sym__not_escape_sequence, + aux_sym_string_content_repeat1, + ACTIONS(1933), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49334] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(1885), 8, + ACTIONS(1924), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -67557,12 +65257,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACE, anon_sym_EQ, sym_type_conversion, - [49150] = 3, + [49357] = 9, + ACTIONS(1869), 1, + anon_sym_LBRACE2, + ACTIONS(1873), 1, + anon_sym_BSLASH, + ACTIONS(1875), 1, + sym_comment, + ACTIONS(1941), 1, + sym__string_end, + STATE(914), 1, + aux_sym_string_repeat1, + STATE(1088), 1, + sym_interpolation, + STATE(1089), 1, + sym_string_content, + STATE(990), 2, + sym__not_escape_sequence, + aux_sym_string_content_repeat1, + ACTIONS(1871), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49388] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1912), 10, + ACTIONS(1914), 1, + anon_sym_or, + ACTIONS(1920), 9, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, @@ -67571,55 +65295,145 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_RBRACE, anon_sym_EQ, - anon_sym_or, sym_type_conversion, - [49169] = 4, + [49409] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(1881), 1, + ACTIONS(1865), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1867), 1, anon_sym_or, - ACTIONS(1901), 9, + ACTIONS(1888), 1, + anon_sym_if, + ACTIONS(1945), 1, + anon_sym_as, + ACTIONS(1943), 7, anon_sym_RPAREN, anon_sym_COMMA, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [49434] = 9, + ACTIONS(1869), 1, + anon_sym_LBRACE2, + ACTIONS(1873), 1, + anon_sym_BSLASH, + ACTIONS(1875), 1, + sym_comment, + ACTIONS(1947), 1, + sym__string_end, + STATE(921), 1, + aux_sym_string_repeat1, + STATE(1088), 1, + sym_interpolation, + STATE(1089), 1, + sym_string_content, + STATE(990), 2, + sym__not_escape_sequence, + aux_sym_string_content_repeat1, + ACTIONS(1871), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49465] = 9, + ACTIONS(1869), 1, + anon_sym_LBRACE2, + ACTIONS(1873), 1, + anon_sym_BSLASH, + ACTIONS(1875), 1, + sym_comment, + ACTIONS(1949), 1, + sym__string_end, + STATE(921), 1, + aux_sym_string_repeat1, + STATE(1088), 1, + sym_interpolation, + STATE(1089), 1, + sym_string_content, + STATE(990), 2, + sym__not_escape_sequence, + aux_sym_string_content_repeat1, + ACTIONS(1871), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49496] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1910), 1, anon_sym_if, + ACTIONS(1912), 1, + anon_sym_and, + ACTIONS(1914), 1, + anon_sym_or, + ACTIONS(1953), 1, + anon_sym_COMMA, + STATE(993), 1, + aux_sym_expression_list_repeat1, + ACTIONS(1951), 6, + anon_sym_RPAREN, anon_sym_COLON, - anon_sym_else, anon_sym_RBRACK, anon_sym_RBRACE, anon_sym_EQ, sym_type_conversion, - [49190] = 5, + [49523] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(1873), 1, + ACTIONS(1865), 1, anon_sym_and, - ACTIONS(1875), 1, + ACTIONS(1867), 1, anon_sym_or, - ACTIONS(1914), 1, - anon_sym_as, - ACTIONS(1912), 8, - anon_sym_RPAREN, - anon_sym_COMMA, + ACTIONS(1888), 1, anon_sym_if, - anon_sym_COLON, + ACTIONS(1890), 1, anon_sym_async, + ACTIONS(1892), 1, anon_sym_for, - anon_sym_RBRACK, + ACTIONS(1900), 1, + anon_sym_COMMA, + ACTIONS(1902), 1, + anon_sym_COLON, + ACTIONS(1904), 1, anon_sym_RBRACE, - [49213] = 6, + STATE(958), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1491), 1, + sym__comprehension_clauses, + [49560] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1863), 1, + ACTIONS(1894), 1, + anon_sym_DOT, + ACTIONS(1955), 1, + anon_sym_LPAREN, + STATE(912), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(1957), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, anon_sym_if, - ACTIONS(1873), 1, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [49583] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1865), 1, anon_sym_and, - ACTIONS(1875), 1, + ACTIONS(1867), 1, anon_sym_or, - ACTIONS(1916), 1, + ACTIONS(1888), 1, + anon_sym_if, + ACTIONS(1959), 1, anon_sym_as, - ACTIONS(1877), 7, + ACTIONS(1908), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -67627,34 +65441,55 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, - [49238] = 5, + [49608] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, - anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1865), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1867), 1, anon_sym_or, - ACTIONS(1895), 8, + ACTIONS(1888), 1, + anon_sym_if, + ACTIONS(1890), 1, + anon_sym_async, + ACTIONS(1892), 1, + anon_sym_for, + ACTIONS(1900), 1, + anon_sym_COMMA, + ACTIONS(1902), 1, + anon_sym_COLON, + ACTIONS(1904), 1, + anon_sym_RBRACE, + STATE(958), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1506), 1, + sym__comprehension_clauses, + [49645] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + STATE(678), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1961), 8, anon_sym_RPAREN, anon_sym_COMMA, + anon_sym_as, + anon_sym_if, anon_sym_COLON, - anon_sym_else, + anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - anon_sym_EQ, - sym_type_conversion, - [49261] = 5, + [49666] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1889), 1, + ACTIONS(1856), 11, + anon_sym_import, anon_sym_DOT, - ACTIONS(1918), 1, anon_sym_LPAREN, - STATE(910), 1, - aux_sym_match_value_pattern_repeat1, - ACTIONS(1920), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -67663,157 +65498,129 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [49284] = 4, + [49683] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1881), 1, + ACTIONS(1910), 1, + anon_sym_if, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(1922), 9, + ACTIONS(1943), 8, anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_if, anon_sym_COLON, anon_sym_else, anon_sym_RBRACK, anon_sym_RBRACE, anon_sym_EQ, sym_type_conversion, - [49305] = 4, + [49706] = 9, + ACTIONS(1869), 1, + anon_sym_LBRACE2, + ACTIONS(1873), 1, + anon_sym_BSLASH, + ACTIONS(1875), 1, + sym_comment, + ACTIONS(1963), 1, + sym__string_end, + STATE(926), 1, + aux_sym_string_repeat1, + STATE(1088), 1, + sym_interpolation, + STATE(1089), 1, + sym_string_content, + STATE(990), 2, + sym__not_escape_sequence, + aux_sym_string_content_repeat1, + ACTIONS(1871), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49737] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1873), 1, + ACTIONS(1912), 1, anon_sym_and, ACTIONS(1914), 1, - anon_sym_as, - ACTIONS(1912), 9, + anon_sym_or, + ACTIONS(1861), 9, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, anon_sym_COLON, - anon_sym_async, - anon_sym_for, + anon_sym_else, anon_sym_RBRACK, anon_sym_RBRACE, - anon_sym_or, - [49326] = 5, + anon_sym_EQ, + sym_type_conversion, + [49758] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1873), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1875), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(1924), 1, - anon_sym_as, - ACTIONS(1922), 8, + ACTIONS(1916), 9, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, anon_sym_COLON, - anon_sym_async, - anon_sym_for, + anon_sym_else, anon_sym_RBRACK, anon_sym_RBRACE, - [49349] = 7, + anon_sym_EQ, + sym_type_conversion, + [49779] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, - anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, - anon_sym_or, - ACTIONS(1928), 1, - anon_sym_COMMA, - STATE(964), 1, - aux_sym_expression_list_repeat1, - ACTIONS(1926), 6, + ACTIONS(1916), 10, anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, anon_sym_COLON, + anon_sym_else, anon_sym_RBRACK, anon_sym_RBRACE, anon_sym_EQ, + anon_sym_or, sym_type_conversion, - [49376] = 11, + [49798] = 11, ACTIONS(3), 1, sym_comment, - ACTIONS(1861), 1, - anon_sym_COMMA, - ACTIONS(1863), 1, - anon_sym_if, - ACTIONS(1867), 1, - anon_sym_async, - ACTIONS(1869), 1, - anon_sym_for, - ACTIONS(1873), 1, + ACTIONS(1865), 1, anon_sym_and, - ACTIONS(1875), 1, - anon_sym_or, - ACTIONS(1930), 1, - anon_sym_RPAREN, - STATE(956), 1, - sym_for_in_clause, - STATE(1111), 1, - aux_sym__collection_elements_repeat1, - STATE(1442), 1, - sym__comprehension_clauses, - [49410] = 11, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1861), 1, - anon_sym_COMMA, - ACTIONS(1863), 1, - anon_sym_if, ACTIONS(1867), 1, - anon_sym_async, - ACTIONS(1869), 1, - anon_sym_for, - ACTIONS(1873), 1, - anon_sym_and, - ACTIONS(1875), 1, anon_sym_or, - ACTIONS(1932), 1, + ACTIONS(1881), 1, anon_sym_RPAREN, - STATE(956), 1, - sym_for_in_clause, - STATE(1111), 1, - aux_sym__collection_elements_repeat1, - STATE(1417), 1, - sym__comprehension_clauses, - [49444] = 11, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1861), 1, - anon_sym_COMMA, - ACTIONS(1863), 1, + ACTIONS(1888), 1, anon_sym_if, - ACTIONS(1867), 1, + ACTIONS(1890), 1, anon_sym_async, - ACTIONS(1869), 1, + ACTIONS(1892), 1, anon_sym_for, - ACTIONS(1871), 1, - anon_sym_RBRACK, - ACTIONS(1873), 1, - anon_sym_and, - ACTIONS(1875), 1, - anon_sym_or, - STATE(956), 1, + ACTIONS(1900), 1, + anon_sym_COMMA, + STATE(958), 1, sym_for_in_clause, STATE(1111), 1, aux_sym__collection_elements_repeat1, - STATE(1429), 1, + STATE(1421), 1, sym__comprehension_clauses, - [49478] = 5, + [49832] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(1934), 7, + ACTIONS(1965), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -67821,123 +65628,39 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACE, anon_sym_EQ, sym_type_conversion, - [49500] = 9, - ACTIONS(1936), 1, - anon_sym_LBRACE2, - ACTIONS(1940), 1, - sym__not_escape_sequence, - ACTIONS(1942), 1, - sym_comment, - ACTIONS(1944), 1, - sym__string_end, - STATE(936), 1, - aux_sym_string_repeat1, - STATE(1031), 1, - aux_sym_string_content_repeat1, - STATE(1072), 1, - sym_string_content, - STATE(1076), 1, - sym_interpolation, - ACTIONS(1938), 3, - sym__string_content, - sym__escape_interpolation, - sym_escape_sequence, - [49530] = 11, + [49854] = 11, ACTIONS(3), 1, sym_comment, - ACTIONS(1861), 1, - anon_sym_COMMA, - ACTIONS(1863), 1, - anon_sym_if, + ACTIONS(1865), 1, + anon_sym_and, ACTIONS(1867), 1, + anon_sym_or, + ACTIONS(1888), 1, + anon_sym_if, + ACTIONS(1890), 1, anon_sym_async, - ACTIONS(1869), 1, + ACTIONS(1892), 1, anon_sym_for, - ACTIONS(1871), 1, - anon_sym_RBRACK, - ACTIONS(1873), 1, - anon_sym_and, - ACTIONS(1875), 1, - anon_sym_or, - STATE(956), 1, + ACTIONS(1967), 1, + anon_sym_RPAREN, + ACTIONS(1969), 1, + anon_sym_COMMA, + STATE(958), 1, sym_for_in_clause, - STATE(1111), 1, - aux_sym__collection_elements_repeat1, - STATE(1407), 1, + STATE(1287), 1, + aux_sym_argument_list_repeat1, + STATE(1508), 1, sym__comprehension_clauses, - [49564] = 9, - ACTIONS(1936), 1, - anon_sym_LBRACE2, - ACTIONS(1940), 1, - sym__not_escape_sequence, - ACTIONS(1942), 1, - sym_comment, - ACTIONS(1946), 1, - sym__string_end, - STATE(937), 1, - aux_sym_string_repeat1, - STATE(1031), 1, - aux_sym_string_content_repeat1, - STATE(1072), 1, - sym_string_content, - STATE(1076), 1, - sym_interpolation, - ACTIONS(1938), 3, - sym__string_content, - sym__escape_interpolation, - sym_escape_sequence, - [49594] = 9, - ACTIONS(1942), 1, - sym_comment, - ACTIONS(1948), 1, - anon_sym_LBRACE2, - ACTIONS(1954), 1, - sym__not_escape_sequence, - ACTIONS(1957), 1, - sym__string_end, - STATE(937), 1, - aux_sym_string_repeat1, - STATE(1031), 1, - aux_sym_string_content_repeat1, - STATE(1072), 1, - sym_string_content, - STATE(1076), 1, - sym_interpolation, - ACTIONS(1951), 3, - sym__string_content, - sym__escape_interpolation, - sym_escape_sequence, - [49624] = 9, - ACTIONS(1936), 1, - anon_sym_LBRACE2, - ACTIONS(1940), 1, - sym__not_escape_sequence, - ACTIONS(1942), 1, - sym_comment, - ACTIONS(1959), 1, - sym__string_end, - STATE(937), 1, - aux_sym_string_repeat1, - STATE(1031), 1, - aux_sym_string_content_repeat1, - STATE(1072), 1, - sym_string_content, - STATE(1076), 1, - sym_interpolation, - ACTIONS(1938), 3, - sym__string_content, - sym__escape_interpolation, - sym_escape_sequence, - [49654] = 5, + [49888] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(1961), 7, + ACTIONS(1971), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -67945,80 +65668,59 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACE, anon_sym_EQ, sym_type_conversion, - [49676] = 11, + [49910] = 11, ACTIONS(3), 1, sym_comment, - ACTIONS(1863), 1, - anon_sym_if, + ACTIONS(1865), 1, + anon_sym_and, ACTIONS(1867), 1, + anon_sym_or, + ACTIONS(1888), 1, + anon_sym_if, + ACTIONS(1890), 1, anon_sym_async, - ACTIONS(1869), 1, + ACTIONS(1892), 1, anon_sym_for, - ACTIONS(1873), 1, - anon_sym_and, - ACTIONS(1875), 1, - anon_sym_or, - ACTIONS(1963), 1, - anon_sym_RPAREN, - ACTIONS(1965), 1, + ACTIONS(1900), 1, anon_sym_COMMA, - STATE(956), 1, + ACTIONS(1904), 1, + anon_sym_RBRACK, + STATE(958), 1, sym_for_in_clause, - STATE(1228), 1, - aux_sym_argument_list_repeat1, - STATE(1417), 1, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1507), 1, sym__comprehension_clauses, - [49710] = 11, + [49944] = 11, ACTIONS(3), 1, sym_comment, - ACTIONS(1861), 1, - anon_sym_COMMA, - ACTIONS(1863), 1, - anon_sym_if, + ACTIONS(1865), 1, + anon_sym_and, ACTIONS(1867), 1, + anon_sym_or, + ACTIONS(1888), 1, + anon_sym_if, + ACTIONS(1890), 1, anon_sym_async, - ACTIONS(1869), 1, + ACTIONS(1892), 1, anon_sym_for, - ACTIONS(1871), 1, - anon_sym_RBRACK, - ACTIONS(1873), 1, - anon_sym_and, - ACTIONS(1875), 1, - anon_sym_or, - STATE(956), 1, + ACTIONS(1973), 1, + anon_sym_RPAREN, + ACTIONS(1975), 1, + anon_sym_COMMA, + STATE(958), 1, sym_for_in_clause, - STATE(1111), 1, - aux_sym__collection_elements_repeat1, - STATE(1437), 1, + STATE(1247), 1, + aux_sym_argument_list_repeat1, + STATE(1421), 1, sym__comprehension_clauses, - [49744] = 9, - ACTIONS(1936), 1, - anon_sym_LBRACE2, - ACTIONS(1940), 1, - sym__not_escape_sequence, - ACTIONS(1942), 1, - sym_comment, - ACTIONS(1967), 1, - sym__string_end, - STATE(937), 1, - aux_sym_string_repeat1, - STATE(1031), 1, - aux_sym_string_content_repeat1, - STATE(1072), 1, - sym_string_content, - STATE(1076), 1, - sym_interpolation, - ACTIONS(1938), 3, - sym__string_content, - sym__escape_interpolation, - sym_escape_sequence, - [49774] = 3, + [49978] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1971), 2, + ACTIONS(1979), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(1969), 8, + ACTIONS(1977), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -68027,83 +65729,62 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [49792] = 9, - ACTIONS(1936), 1, - anon_sym_LBRACE2, - ACTIONS(1940), 1, - sym__not_escape_sequence, - ACTIONS(1942), 1, - sym_comment, - ACTIONS(1973), 1, - sym__string_end, - STATE(942), 1, - aux_sym_string_repeat1, - STATE(1031), 1, - aux_sym_string_content_repeat1, - STATE(1072), 1, - sym_string_content, - STATE(1076), 1, - sym_interpolation, - ACTIONS(1938), 3, - sym__string_content, - sym__escape_interpolation, - sym_escape_sequence, - [49822] = 11, + [49996] = 11, ACTIONS(3), 1, sym_comment, - ACTIONS(1861), 1, - anon_sym_COMMA, - ACTIONS(1863), 1, - anon_sym_if, + ACTIONS(1865), 1, + anon_sym_and, ACTIONS(1867), 1, + anon_sym_or, + ACTIONS(1888), 1, + anon_sym_if, + ACTIONS(1890), 1, anon_sym_async, - ACTIONS(1869), 1, + ACTIONS(1892), 1, anon_sym_for, - ACTIONS(1873), 1, - anon_sym_and, - ACTIONS(1875), 1, - anon_sym_or, - ACTIONS(1905), 1, + ACTIONS(1900), 1, + anon_sym_COMMA, + ACTIONS(1981), 1, anon_sym_RPAREN, - STATE(956), 1, + STATE(958), 1, sym_for_in_clause, STATE(1111), 1, aux_sym__collection_elements_repeat1, - STATE(1464), 1, + STATE(1508), 1, sym__comprehension_clauses, - [49856] = 11, + [50030] = 11, ACTIONS(3), 1, sym_comment, - ACTIONS(1863), 1, - anon_sym_if, + ACTIONS(1865), 1, + anon_sym_and, ACTIONS(1867), 1, + anon_sym_or, + ACTIONS(1888), 1, + anon_sym_if, + ACTIONS(1890), 1, anon_sym_async, - ACTIONS(1869), 1, + ACTIONS(1892), 1, anon_sym_for, - ACTIONS(1873), 1, - anon_sym_and, - ACTIONS(1875), 1, - anon_sym_or, - ACTIONS(1975), 1, + ACTIONS(1983), 1, anon_sym_RPAREN, - ACTIONS(1977), 1, + ACTIONS(1985), 1, anon_sym_COMMA, - STATE(956), 1, + STATE(958), 1, sym_for_in_clause, - STATE(1273), 1, + STATE(1314), 1, aux_sym_argument_list_repeat1, - STATE(1464), 1, + STATE(1469), 1, sym__comprehension_clauses, - [49890] = 5, + [50064] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(1979), 7, + ACTIONS(1987), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -68111,72 +65792,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACE, anon_sym_EQ, sym_type_conversion, - [49912] = 5, + [50086] = 11, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, - anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1865), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1867), 1, anon_sym_or, - ACTIONS(1981), 7, - anon_sym_RPAREN, + ACTIONS(1888), 1, + anon_sym_if, + ACTIONS(1890), 1, + anon_sym_async, + ACTIONS(1892), 1, + anon_sym_for, + ACTIONS(1900), 1, anon_sym_COMMA, - anon_sym_COLON, - anon_sym_RBRACK, - anon_sym_RBRACE, - anon_sym_EQ, - sym_type_conversion, - [49934] = 9, - ACTIONS(1936), 1, - anon_sym_LBRACE2, - ACTIONS(1940), 1, - sym__not_escape_sequence, - ACTIONS(1942), 1, - sym_comment, - ACTIONS(1983), 1, - sym__string_end, - STATE(937), 1, - aux_sym_string_repeat1, - STATE(1031), 1, - aux_sym_string_content_repeat1, - STATE(1072), 1, - sym_string_content, - STATE(1076), 1, - sym_interpolation, - ACTIONS(1938), 3, - sym__string_content, - sym__escape_interpolation, - sym_escape_sequence, - [49964] = 9, - ACTIONS(1936), 1, - anon_sym_LBRACE2, - ACTIONS(1940), 1, - sym__not_escape_sequence, - ACTIONS(1942), 1, - sym_comment, - ACTIONS(1985), 1, - sym__string_end, - STATE(949), 1, - aux_sym_string_repeat1, - STATE(1031), 1, - aux_sym_string_content_repeat1, - STATE(1072), 1, - sym_string_content, - STATE(1076), 1, - sym_interpolation, - ACTIONS(1938), 3, - sym__string_content, - sym__escape_interpolation, - sym_escape_sequence, - [49994] = 3, + ACTIONS(1989), 1, + anon_sym_RPAREN, + STATE(958), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1469), 1, + sym__comprehension_clauses, + [50120] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1989), 2, + ACTIONS(1993), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(1987), 8, + ACTIONS(1991), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -68185,75 +65830,79 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [50012] = 9, - ACTIONS(1936), 1, - anon_sym_LBRACE2, - ACTIONS(1940), 1, - sym__not_escape_sequence, - ACTIONS(1942), 1, - sym_comment, - ACTIONS(1991), 1, - sym__string_end, - STATE(938), 1, - aux_sym_string_repeat1, - STATE(1031), 1, - aux_sym_string_content_repeat1, - STATE(1072), 1, - sym_string_content, - STATE(1076), 1, - sym_interpolation, - ACTIONS(1938), 3, - sym__string_content, - sym__escape_interpolation, - sym_escape_sequence, - [50042] = 11, + [50138] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1863), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1867), 1, - anon_sym_async, - ACTIONS(1869), 1, - anon_sym_for, - ACTIONS(1873), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1875), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(1993), 1, + ACTIONS(1995), 7, anon_sym_RPAREN, - ACTIONS(1995), 1, anon_sym_COMMA, - STATE(956), 1, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [50160] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1865), 1, + anon_sym_and, + ACTIONS(1867), 1, + anon_sym_or, + ACTIONS(1888), 1, + anon_sym_if, + ACTIONS(1890), 1, + anon_sym_async, + ACTIONS(1892), 1, + anon_sym_for, + ACTIONS(1900), 1, + anon_sym_COMMA, + ACTIONS(1904), 1, + anon_sym_RBRACK, + STATE(958), 1, sym_for_in_clause, - STATE(1280), 1, - aux_sym_argument_list_repeat1, - STATE(1442), 1, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1484), 1, sym__comprehension_clauses, - [50076] = 4, + [50194] = 11, ACTIONS(3), 1, sym_comment, - ACTIONS(1999), 1, - anon_sym_PIPE, - STATE(954), 1, - aux_sym_match_or_pattern_repeat1, - ACTIONS(1997), 7, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_as, + ACTIONS(1865), 1, + anon_sym_and, + ACTIONS(1867), 1, + anon_sym_or, + ACTIONS(1888), 1, anon_sym_if, - anon_sym_COLON, + ACTIONS(1890), 1, + anon_sym_async, + ACTIONS(1892), 1, + anon_sym_for, + ACTIONS(1900), 1, + anon_sym_COMMA, + ACTIONS(1904), 1, anon_sym_RBRACK, - anon_sym_RBRACE, - [50095] = 6, + STATE(958), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1419), 1, + sym__comprehension_clauses, + [50228] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(2004), 1, + ACTIONS(1999), 1, anon_sym_if, - ACTIONS(2007), 1, + ACTIONS(2002), 1, anon_sym_async, - ACTIONS(2010), 1, + ACTIONS(2005), 1, anon_sym_for, - ACTIONS(2002), 3, + ACTIONS(1997), 3, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_RBRACE, @@ -68261,31 +65910,29 @@ static const uint16_t ts_small_parse_table[] = { sym_for_in_clause, sym_if_clause, aux_sym__comprehension_clauses_repeat1, - [50118] = 6, + [50251] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1867), 1, - anon_sym_async, - ACTIONS(1869), 1, - anon_sym_for, - ACTIONS(2015), 1, - anon_sym_if, - ACTIONS(2013), 3, + ACTIONS(2010), 1, + anon_sym_PIPE, + STATE(956), 1, + aux_sym_match_or_pattern_repeat1, + ACTIONS(2008), 7, anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, anon_sym_RBRACK, anon_sym_RBRACE, - STATE(959), 3, - sym_for_in_clause, - sym_if_clause, - aux_sym__comprehension_clauses_repeat1, - [50141] = 4, + [50270] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2019), 1, + ACTIONS(2015), 1, anon_sym_PIPE, - STATE(961), 1, + STATE(960), 1, aux_sym_match_or_pattern_repeat1, - ACTIONS(2017), 7, + ACTIONS(2013), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -68293,12 +65940,29 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COLON, anon_sym_RBRACK, anon_sym_RBRACE, - [50160] = 4, + [50289] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1890), 1, + anon_sym_async, + ACTIONS(1892), 1, + anon_sym_for, + ACTIONS(2019), 1, + anon_sym_if, + ACTIONS(2017), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + STATE(964), 3, + sym_for_in_clause, + sym_if_clause, + aux_sym__comprehension_clauses_repeat1, + [50312] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1873), 1, + ACTIONS(1865), 1, anon_sym_and, - ACTIONS(1875), 1, + ACTIONS(1867), 1, anon_sym_or, ACTIONS(2021), 7, anon_sym_RPAREN, @@ -68308,62 +65972,45 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, - [50179] = 6, + [50331] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1867), 1, - anon_sym_async, - ACTIONS(1869), 1, - anon_sym_for, ACTIONS(2015), 1, - anon_sym_if, - ACTIONS(2023), 3, + anon_sym_PIPE, + STATE(956), 1, + aux_sym_match_or_pattern_repeat1, + ACTIONS(2023), 7, anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, anon_sym_RBRACK, anon_sym_RBRACE, - STATE(955), 3, - sym_for_in_clause, - sym_if_clause, - aux_sym__comprehension_clauses_repeat1, - [50202] = 7, + [50350] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(1928), 1, + ACTIONS(1953), 1, anon_sym_COMMA, - STATE(964), 1, + STATE(993), 1, aux_sym_expression_list_repeat1, ACTIONS(2025), 4, anon_sym_COLON, anon_sym_RBRACE, anon_sym_EQ, sym_type_conversion, - [50227] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2019), 1, - anon_sym_PIPE, - STATE(954), 1, - aux_sym_match_or_pattern_repeat1, - ACTIONS(2027), 7, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_as, - anon_sym_if, - anon_sym_COLON, - anon_sym_RBRACK, - anon_sym_RBRACE, - [50246] = 4, + [50375] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1873), 1, + ACTIONS(1865), 1, anon_sym_and, - ACTIONS(1875), 1, + ACTIONS(1867), 1, anon_sym_or, ACTIONS(2021), 7, anon_sym_RPAREN, @@ -68373,12 +66020,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, - [50265] = 4, + [50394] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1873), 1, + ACTIONS(1865), 1, anon_sym_and, - ACTIONS(1875), 1, + ACTIONS(1867), 1, anon_sym_or, ACTIONS(2021), 7, anon_sym_RPAREN, @@ -68388,65 +66035,42 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, - [50284] = 4, + [50413] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(2031), 1, - anon_sym_COMMA, - STATE(1005), 1, - aux_sym_expression_list_repeat1, - ACTIONS(2029), 6, + ACTIONS(1890), 1, + anon_sym_async, + ACTIONS(1892), 1, + anon_sym_for, + ACTIONS(2019), 1, + anon_sym_if, + ACTIONS(2027), 3, anon_sym_RPAREN, - anon_sym_COLON, anon_sym_RBRACK, anon_sym_RBRACE, - anon_sym_EQ, - sym_type_conversion, - [50302] = 7, - ACTIONS(3), 1, - sym_comment, - ACTIONS(854), 1, - anon_sym_except_STAR, - ACTIONS(862), 1, - anon_sym_except, - ACTIONS(2033), 1, - anon_sym_finally, - STATE(568), 1, - sym_finally_clause, - STATE(229), 2, - sym_except_group_clause, - aux_sym_try_statement_repeat2, - STATE(241), 2, - sym_except_clause, - aux_sym_try_statement_repeat1, - [50326] = 2, + STATE(955), 3, + sym_for_in_clause, + sym_if_clause, + aux_sym__comprehension_clauses_repeat1, + [50436] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2035), 8, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_as, + ACTIONS(2029), 1, anon_sym_if, - anon_sym_COLON, - anon_sym_PIPE, - anon_sym_RBRACK, - anon_sym_RBRACE, - [50340] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1852), 8, + ACTIONS(2031), 1, + anon_sym_and, + ACTIONS(2033), 1, + anon_sym_or, + ACTIONS(1908), 5, sym__newline, anon_sym_from, anon_sym_COMMA, - anon_sym_if, anon_sym_EQ, - anon_sym_and, - anon_sym_or, - sym__semicolon, - [50354] = 2, + anon_sym_SEMI, + [50456] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2037), 8, + ACTIONS(2035), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -68455,22 +66079,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [50368] = 2, + [50470] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(2039), 8, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_as, - anon_sym_if, - anon_sym_COLON, - anon_sym_PIPE, - anon_sym_RBRACK, - anon_sym_RBRACE, - [50382] = 2, + ACTIONS(67), 1, + anon_sym_AT, + ACTIONS(2037), 1, + anon_sym_async, + ACTIONS(2039), 1, + anon_sym_def, + ACTIONS(2041), 1, + anon_sym_class, + STATE(563), 2, + sym_function_definition, + sym_class_definition, + STATE(1070), 2, + sym_decorator, + aux_sym_decorated_definition_repeat1, + [50494] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2041), 8, + ACTIONS(2043), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -68479,23 +66108,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [50396] = 3, + [50508] = 8, ACTIONS(3), 1, sym_comment, + ACTIONS(2029), 1, + anon_sym_if, + ACTIONS(2031), 1, + anon_sym_and, + ACTIONS(2033), 1, + anon_sym_or, ACTIONS(2045), 1, - anon_sym_PIPE, - ACTIONS(2043), 7, - anon_sym_RPAREN, + anon_sym_from, + ACTIONS(2047), 1, anon_sym_COMMA, - anon_sym_as, - anon_sym_if, - anon_sym_COLON, - anon_sym_RBRACK, - anon_sym_RBRACE, - [50412] = 2, + STATE(1106), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2049), 2, + sym__newline, + anon_sym_SEMI, + [50534] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2047), 8, + ACTIONS(2051), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -68504,10 +66138,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [50426] = 2, + [50548] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2049), 8, + ACTIONS(2053), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -68516,36 +66150,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [50440] = 4, + [50562] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(2031), 1, anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(1901), 6, + ACTIONS(1916), 7, sym__newline, anon_sym_from, anon_sym_COMMA, anon_sym_if, anon_sym_EQ, - sym__semicolon, - [50458] = 2, + anon_sym_or, + anon_sym_SEMI, + [50578] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1899), 8, - anon_sym_RPAREN, + ACTIONS(2031), 1, + anon_sym_and, + ACTIONS(2033), 1, + anon_sym_or, + ACTIONS(1916), 6, + sym__newline, + anon_sym_from, anon_sym_COMMA, - anon_sym_as, anon_sym_if, - anon_sym_COLON, - anon_sym_PIPE, - anon_sym_RBRACK, - anon_sym_RBRACE, - [50472] = 2, + anon_sym_EQ, + anon_sym_SEMI, + [50596] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1848), 8, + ACTIONS(1439), 8, sym__newline, anon_sym_from, anon_sym_COMMA, @@ -68553,11 +66188,42 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_and, anon_sym_or, - sym__semicolon, - [50486] = 2, + anon_sym_SEMI, + [50610] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2031), 1, + anon_sym_and, + ACTIONS(2033), 1, + anon_sym_or, + ACTIONS(1861), 6, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_EQ, + anon_sym_SEMI, + [50628] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(848), 1, + anon_sym_except_STAR, + ACTIONS(856), 1, + anon_sym_except, + ACTIONS(2055), 1, + anon_sym_finally, + STATE(580), 1, + sym_finally_clause, + STATE(230), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + STATE(232), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + [50652] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2055), 8, + ACTIONS(2057), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -68566,52 +66232,34 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [50500] = 4, + [50666] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2059), 1, - anon_sym_COMMA, - STATE(1012), 1, - aux_sym_for_in_clause_repeat1, - ACTIONS(2057), 6, + ACTIONS(2059), 8, anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, anon_sym_if, - anon_sym_async, - anon_sym_for, + anon_sym_COLON, + anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [50518] = 4, + [50680] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2063), 1, - anon_sym_COMMA, - STATE(995), 1, - aux_sym_for_in_clause_repeat1, - ACTIONS(2061), 6, + ACTIONS(2061), 8, anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, anon_sym_if, - anon_sym_async, - anon_sym_for, + anon_sym_COLON, + anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [50536] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(1922), 6, - sym__newline, - anon_sym_from, - anon_sym_COMMA, - anon_sym_if, - anon_sym_EQ, - sym__semicolon, - [50554] = 2, + [50694] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2065), 8, + ACTIONS(2063), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -68620,45 +66268,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [50568] = 8, + [50708] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, + ACTIONS(67), 1, + anon_sym_AT, + ACTIONS(2065), 1, + anon_sym_async, ACTIONS(2067), 1, - anon_sym_from, + anon_sym_def, ACTIONS(2069), 1, - anon_sym_COMMA, - ACTIONS(2071), 1, - anon_sym_if, - STATE(1092), 1, - aux_sym_expression_list_repeat1, - ACTIONS(2073), 2, - sym__newline, - sym__semicolon, - [50594] = 7, - ACTIONS(3), 1, - sym_comment, - ACTIONS(854), 1, - anon_sym_except_STAR, - ACTIONS(862), 1, - anon_sym_except, - ACTIONS(2033), 1, - anon_sym_finally, - STATE(516), 1, - sym_finally_clause, - STATE(232), 2, - sym_except_clause, - aux_sym_try_statement_repeat1, - STATE(234), 2, - sym_except_group_clause, - aux_sym_try_statement_repeat2, - [50618] = 2, + anon_sym_class, + STATE(578), 2, + sym_function_definition, + sym_class_definition, + STATE(1070), 2, + sym_decorator, + aux_sym_decorated_definition_repeat1, + [50732] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1997), 8, + ACTIONS(2071), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -68667,24 +66297,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [50632] = 4, + [50746] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2075), 1, - anon_sym_COMMA, - STATE(1005), 1, - aux_sym_expression_list_repeat1, - ACTIONS(2029), 6, + ACTIONS(2073), 8, anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, anon_sym_COLON, + anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - anon_sym_EQ, - sym_type_conversion, - [50650] = 2, + [50760] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2077), 8, + ACTIONS(2075), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -68693,10 +66321,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [50664] = 2, + [50774] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2079), 8, + ACTIONS(2077), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -68705,10 +66333,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [50678] = 2, + [50788] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2081), 8, + ACTIONS(2008), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -68717,10 +66345,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [50692] = 2, + [50802] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2083), 8, + ACTIONS(2079), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -68729,10 +66357,55 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [50706] = 2, + [50816] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2029), 1, + anon_sym_if, + ACTIONS(2031), 1, + anon_sym_and, + ACTIONS(2033), 1, + anon_sym_or, + ACTIONS(1943), 5, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_EQ, + anon_sym_SEMI, + [50836] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2083), 1, + anon_sym_COMMA, + STATE(1005), 1, + aux_sym_for_in_clause_repeat1, + ACTIONS(2081), 6, + anon_sym_RPAREN, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50854] = 6, + ACTIONS(1875), 1, + sym_comment, + ACTIONS(2085), 1, + anon_sym_LBRACE2, + ACTIONS(2089), 1, + anon_sym_BSLASH, + ACTIONS(2091), 1, + sym__string_end, + STATE(1010), 2, + sym__not_escape_sequence, + aux_sym_string_content_repeat1, + ACTIONS(2087), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [50876] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2085), 8, + ACTIONS(2093), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -68741,42 +66414,38 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [50720] = 7, + [50890] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(848), 1, - anon_sym_except, - ACTIONS(864), 1, - anon_sym_except_STAR, - ACTIONS(2087), 1, - anon_sym_finally, - STATE(514), 1, - sym_finally_clause, - STATE(228), 2, - sym_except_clause, - aux_sym_try_statement_repeat1, - STATE(240), 2, - sym_except_group_clause, - aux_sym_try_statement_repeat2, - [50744] = 5, + ACTIONS(2097), 1, + anon_sym_COMMA, + STATE(1015), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2095), 6, + anon_sym_RPAREN, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [50908] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2071), 1, - anon_sym_if, - ACTIONS(1885), 5, - sym__newline, - anon_sym_from, + ACTIONS(2099), 1, anon_sym_COMMA, + STATE(1015), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2095), 6, + anon_sym_RPAREN, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, anon_sym_EQ, - sym__semicolon, - [50764] = 2, + sym_type_conversion, + [50926] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2089), 8, + ACTIONS(2101), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -68785,159 +66454,126 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [50778] = 4, + [50940] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1873), 1, - anon_sym_and, - ACTIONS(1875), 1, - anon_sym_or, - ACTIONS(2091), 6, + ACTIONS(2103), 8, anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, anon_sym_if, - anon_sym_async, - anon_sym_for, + anon_sym_COLON, + anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [50796] = 4, + [50954] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2095), 1, + ACTIONS(2107), 1, anon_sym_COMMA, - STATE(1012), 1, + STATE(996), 1, aux_sym_for_in_clause_repeat1, - ACTIONS(2093), 6, + ACTIONS(2105), 6, anon_sym_RPAREN, anon_sym_if, anon_sym_async, anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, - [50814] = 7, - ACTIONS(3), 1, - sym_comment, - ACTIONS(67), 1, - anon_sym_AT, - ACTIONS(2097), 1, - anon_sym_async, - ACTIONS(2099), 1, - anon_sym_def, - ACTIONS(2101), 1, - anon_sym_class, - STATE(584), 2, - sym_function_definition, - sym_class_definition, - STATE(1062), 2, - sym_decorator, - aux_sym_decorated_definition_repeat1, - [50838] = 5, + [50972] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2071), 1, - anon_sym_if, - ACTIONS(1895), 5, - sym__newline, - anon_sym_from, + ACTIONS(2112), 1, anon_sym_COMMA, - anon_sym_EQ, - sym__semicolon, - [50858] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2103), 8, + STATE(996), 1, + aux_sym_for_in_clause_repeat1, + ACTIONS(2110), 6, anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_as, anon_sym_if, - anon_sym_COLON, - anon_sym_PIPE, + anon_sym_async, + anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, - [50872] = 6, + [50990] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(1889), 1, + ACTIONS(1894), 1, anon_sym_DOT, - ACTIONS(1918), 1, + ACTIONS(1955), 1, anon_sym_LPAREN, - ACTIONS(2105), 1, + ACTIONS(2114), 1, anon_sym_EQ, - STATE(910), 1, + STATE(912), 1, aux_sym_match_value_pattern_repeat1, - ACTIONS(1920), 4, + ACTIONS(1957), 4, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, anon_sym_PIPE, - [50894] = 4, + [51012] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(1912), 6, - sym__newline, - anon_sym_from, + ACTIONS(2118), 1, anon_sym_COMMA, + STATE(997), 1, + aux_sym_for_in_clause_repeat1, + ACTIONS(2116), 6, + anon_sym_RPAREN, anon_sym_if, - anon_sym_EQ, - sym__semicolon, - [50912] = 3, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51030] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(1912), 7, - sym__newline, - anon_sym_from, + ACTIONS(2120), 8, + anon_sym_RPAREN, anon_sym_COMMA, + anon_sym_as, anon_sym_if, - anon_sym_EQ, - anon_sym_or, - sym__semicolon, - [50928] = 7, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51044] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(67), 1, - anon_sym_AT, - ACTIONS(2107), 1, - anon_sym_async, - ACTIONS(2109), 1, - anon_sym_def, - ACTIONS(2111), 1, - anon_sym_class, - STATE(499), 2, - sym_function_definition, - sym_class_definition, - STATE(1062), 2, - sym_decorator, - aux_sym_decorated_definition_repeat1, - [50952] = 7, + ACTIONS(860), 1, + anon_sym_except, + ACTIONS(864), 1, + anon_sym_except_STAR, + ACTIONS(2122), 1, + anon_sym_finally, + STATE(510), 1, + sym_finally_clause, + STATE(235), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + STATE(236), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + [51068] = 7, ACTIONS(3), 1, sym_comment, ACTIONS(848), 1, - anon_sym_except, - ACTIONS(864), 1, anon_sym_except_STAR, - ACTIONS(2087), 1, + ACTIONS(856), 1, + anon_sym_except, + ACTIONS(2055), 1, anon_sym_finally, - STATE(507), 1, + STATE(511), 1, sym_finally_clause, - STATE(237), 2, + STATE(228), 2, sym_except_group_clause, aux_sym_try_statement_repeat2, - STATE(238), 2, + STATE(242), 2, sym_except_clause, aux_sym_try_statement_repeat1, - [50976] = 2, + [51092] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2113), 8, + ACTIONS(2124), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -68946,24 +66582,55 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [50990] = 4, + [51106] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(860), 1, + anon_sym_except, + ACTIONS(864), 1, + anon_sym_except_STAR, + ACTIONS(2122), 1, + anon_sym_finally, + STATE(576), 1, + sym_finally_clause, + STATE(233), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + STATE(234), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + [51130] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2117), 1, + ACTIONS(2128), 1, anon_sym_COMMA, - STATE(1005), 1, - aux_sym_expression_list_repeat1, - ACTIONS(2115), 6, + STATE(996), 1, + aux_sym_for_in_clause_repeat1, + ACTIONS(2126), 6, anon_sym_RPAREN, - anon_sym_COLON, + anon_sym_if, + anon_sym_async, + anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, + [51148] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2031), 1, + anon_sym_and, + ACTIONS(2033), 1, + anon_sym_or, + ACTIONS(1920), 6, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, anon_sym_EQ, - sym_type_conversion, - [51008] = 2, + anon_sym_SEMI, + [51166] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2120), 8, + ACTIONS(1961), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -68972,25 +66639,52 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [51022] = 5, + [51180] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(1865), 1, anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(1867), 1, anon_sym_or, - ACTIONS(2071), 1, + ACTIONS(2130), 6, + anon_sym_RPAREN, anon_sym_if, - ACTIONS(1877), 5, - sym__newline, - anon_sym_from, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51198] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2132), 8, + anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_EQ, - sym__semicolon, - [51042] = 2, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51212] = 6, + ACTIONS(1875), 1, + sym_comment, + ACTIONS(2134), 1, + anon_sym_LBRACE2, + ACTIONS(2139), 1, + anon_sym_BSLASH, + ACTIONS(2142), 1, + sym__string_end, + STATE(1010), 2, + sym__not_escape_sequence, + aux_sym_string_content_repeat1, + ACTIONS(2136), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [51234] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2122), 8, + ACTIONS(2144), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -68999,10 +66693,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [51056] = 2, + [51248] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1479), 8, + ACTIONS(1852), 8, sym__newline, anon_sym_from, anon_sym_COMMA, @@ -69010,439 +66704,449 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_and, anon_sym_or, - sym__semicolon, - [51070] = 2, + anon_sym_SEMI, + [51262] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2124), 8, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_as, + ACTIONS(2029), 1, anon_sym_if, - anon_sym_COLON, - anon_sym_PIPE, - anon_sym_RBRACK, - anon_sym_RBRACE, - [51084] = 2, + ACTIONS(2031), 1, + anon_sym_and, + ACTIONS(2033), 1, + anon_sym_or, + ACTIONS(1924), 5, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_EQ, + anon_sym_SEMI, + [51282] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2126), 8, + ACTIONS(2148), 1, + anon_sym_PIPE, + ACTIONS(2146), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, anon_sym_if, anon_sym_COLON, - anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [51098] = 4, + [51298] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2130), 1, + ACTIONS(2152), 1, anon_sym_COMMA, - STATE(1012), 1, - aux_sym_for_in_clause_repeat1, - ACTIONS(2128), 6, + STATE(1015), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2150), 6, anon_sym_RPAREN, - anon_sym_if, - anon_sym_async, - anon_sym_for, + anon_sym_COLON, anon_sym_RBRACK, anon_sym_RBRACE, - [51116] = 4, + anon_sym_EQ, + sym_type_conversion, + [51316] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2135), 1, + ACTIONS(1848), 8, + sym__newline, + anon_sym_from, anon_sym_COMMA, - STATE(978), 1, - aux_sym_for_in_clause_repeat1, - ACTIONS(2133), 6, + anon_sym_if, + anon_sym_EQ, + anon_sym_and, + anon_sym_or, + anon_sym_SEMI, + [51330] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2155), 7, anon_sym_RPAREN, + anon_sym_COMMA, anon_sym_if, anon_sym_async, anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, - [51134] = 7, + [51343] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2157), 1, + sym_identifier, + ACTIONS(2159), 1, + anon_sym_LPAREN, + ACTIONS(2161), 1, + anon_sym_STAR, + STATE(1094), 1, + sym_dotted_name, + STATE(1146), 1, + sym_aliased_import, + STATE(1394), 1, + sym_wildcard_import, + STATE(1398), 1, + sym__import_list, + [51368] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(2029), 1, + anon_sym_if, + ACTIONS(2031), 1, anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(2033), 1, anon_sym_or, - ACTIONS(2069), 1, - anon_sym_COMMA, - ACTIONS(2071), 1, - anon_sym_if, - STATE(1092), 1, - aux_sym_expression_list_repeat1, - ACTIONS(1926), 2, + ACTIONS(1965), 4, sym__newline, - sym__semicolon, - [51157] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1479), 7, - anon_sym_RPAREN, + anon_sym_from, anon_sym_COMMA, - anon_sym_as, - anon_sym_if, - anon_sym_COLON, - anon_sym_and, - anon_sym_or, - [51170] = 7, + anon_sym_SEMI, + [51387] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(2137), 1, + ACTIONS(2163), 1, sym_identifier, - ACTIONS(2139), 1, + ACTIONS(2165), 1, anon_sym_DOT, - ACTIONS(2141), 1, + ACTIONS(2167), 1, anon_sym___future__, - STATE(1144), 1, + STATE(1186), 1, aux_sym_import_prefix_repeat1, - STATE(1236), 1, + STATE(1331), 1, sym_import_prefix, - STATE(1441), 2, + STATE(1451), 2, sym_relative_import, sym_dotted_name, - [51193] = 2, + [51410] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(2143), 7, - anon_sym_RPAREN, - anon_sym_COMMA, + ACTIONS(2029), 1, anon_sym_if, - anon_sym_async, - anon_sym_for, - anon_sym_RBRACK, - anon_sym_RBRACE, - [51206] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2128), 7, - anon_sym_RPAREN, + ACTIONS(2031), 1, + anon_sym_and, + ACTIONS(2033), 1, + anon_sym_or, + ACTIONS(2047), 1, anon_sym_COMMA, - anon_sym_if, - anon_sym_async, - anon_sym_for, - anon_sym_RBRACK, - anon_sym_RBRACE, - [51219] = 7, + STATE(1106), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2169), 2, + sym__newline, + anon_sym_SEMI, + [51433] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(2029), 1, + anon_sym_if, + ACTIONS(2031), 1, anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(2033), 1, anon_sym_or, - ACTIONS(2069), 1, + ACTIONS(2047), 1, anon_sym_COMMA, - ACTIONS(2071), 1, - anon_sym_if, - STATE(1092), 1, + STATE(1106), 1, aux_sym_expression_list_repeat1, - ACTIONS(2145), 2, + ACTIONS(2171), 2, sym__newline, - sym__semicolon, - [51242] = 5, + anon_sym_SEMI, + [51456] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(2147), 1, - sym_identifier, - ACTIONS(2149), 1, - anon_sym_STAR, - ACTIONS(2151), 1, - anon_sym_STAR_STAR, - STATE(1388), 4, - sym_typevar_parameter, - sym_typevartuple_parameter, - sym_paramspec_parameter, - sym__type_parameter, - [51261] = 8, + ACTIONS(1890), 1, + anon_sym_async, + ACTIONS(1892), 1, + anon_sym_for, + ACTIONS(2173), 1, + anon_sym_COMMA, + ACTIONS(2175), 1, + anon_sym_RBRACE, + STATE(958), 1, + sym_for_in_clause, + STATE(1252), 1, + aux_sym_dictionary_repeat1, + STATE(1504), 1, + sym__comprehension_clauses, + [51481] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2153), 1, + ACTIONS(2177), 1, anon_sym_COMMA, - ACTIONS(2155), 1, + ACTIONS(2179), 1, anon_sym_COLON, - ACTIONS(2157), 1, + ACTIONS(2181), 1, anon_sym_RBRACK, - STATE(1203), 1, + STATE(1251), 1, aux_sym_subscript_repeat1, - [51286] = 5, + [51506] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2159), 4, - anon_sym_RPAREN, - anon_sym_COMMA, + ACTIONS(2179), 1, anon_sym_COLON, - anon_sym_EQ, - [51305] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1934), 7, - anon_sym_RPAREN, + ACTIONS(2183), 1, anon_sym_COMMA, - anon_sym_COLON, + ACTIONS(2185), 1, anon_sym_RBRACK, - anon_sym_RBRACE, - anon_sym_EQ, - sym_type_conversion, - [51318] = 3, + STATE(1317), 1, + aux_sym_subscript_repeat1, + [51531] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(2163), 1, + ACTIONS(2189), 1, anon_sym_as, - ACTIONS(2161), 6, + ACTIONS(2191), 1, + anon_sym_if, + ACTIONS(2193), 1, + anon_sym_and, + ACTIONS(2195), 1, + anon_sym_or, + ACTIONS(2187), 3, anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_if, anon_sym_COLON, - anon_sym_RBRACK, - anon_sym_RBRACE, - [51333] = 4, + [51552] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2165), 1, + ACTIONS(2191), 1, + anon_sym_if, + ACTIONS(2193), 1, anon_sym_and, - ACTIONS(2167), 1, + ACTIONS(2195), 1, anon_sym_or, - ACTIONS(1922), 5, + ACTIONS(1908), 4, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, - anon_sym_if, anon_sym_COLON, - [51350] = 7, + [51571] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2071), 1, + ACTIONS(2191), 1, anon_sym_if, - ACTIONS(2169), 1, - anon_sym_COMMA, - STATE(1137), 1, - aux_sym_assert_statement_repeat1, - ACTIONS(2171), 2, - sym__newline, - sym__semicolon, - [51373] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2165), 1, + ACTIONS(2193), 1, anon_sym_and, - ACTIONS(2167), 1, + ACTIONS(2195), 1, anon_sym_or, - ACTIONS(2173), 1, - anon_sym_if, - ACTIONS(1895), 4, + ACTIONS(1924), 4, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, anon_sym_COLON, - [51392] = 4, + [51590] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2165), 1, + ACTIONS(2193), 1, anon_sym_and, - ACTIONS(2167), 1, + ACTIONS(2195), 1, anon_sym_or, - ACTIONS(1901), 5, + ACTIONS(1916), 5, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, anon_sym_if, anon_sym_COLON, - [51409] = 3, + [51607] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2165), 1, + ACTIONS(2197), 1, + sym_identifier, + ACTIONS(2199), 1, + anon_sym_STAR, + ACTIONS(2201), 1, + anon_sym_STAR_STAR, + STATE(1380), 4, + sym_typevar_parameter, + sym_typevartuple_parameter, + sym_paramspec_parameter, + sym__type_parameter, + [51626] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2193), 1, anon_sym_and, - ACTIONS(1912), 6, + ACTIONS(1916), 6, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, anon_sym_if, anon_sym_COLON, anon_sym_or, - [51424] = 4, + [51641] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2165), 1, + ACTIONS(2193), 1, anon_sym_and, - ACTIONS(2167), 1, + ACTIONS(2195), 1, anon_sym_or, - ACTIONS(1912), 5, + ACTIONS(1861), 5, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, anon_sym_if, anon_sym_COLON, - [51441] = 6, - ACTIONS(1942), 1, - sym_comment, - ACTIONS(2175), 1, - anon_sym_LBRACE2, - ACTIONS(2179), 1, - sym__not_escape_sequence, - ACTIONS(2181), 1, - sym__string_end, - STATE(1055), 1, - aux_sym_string_content_repeat1, - ACTIONS(2177), 3, - sym__string_content, - sym__escape_interpolation, - sym_escape_sequence, - [51462] = 5, + [51658] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2165), 1, + ACTIONS(2191), 1, + anon_sym_if, + ACTIONS(2193), 1, anon_sym_and, - ACTIONS(2167), 1, + ACTIONS(2195), 1, anon_sym_or, - ACTIONS(2173), 1, - anon_sym_if, - ACTIONS(1877), 4, + ACTIONS(1943), 4, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, anon_sym_COLON, - [51481] = 2, + [51677] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2183), 7, + ACTIONS(2193), 1, + anon_sym_and, + ACTIONS(2195), 1, + anon_sym_or, + ACTIONS(1920), 5, anon_sym_RPAREN, anon_sym_COMMA, + anon_sym_as, anon_sym_if, - anon_sym_async, - anon_sym_for, - anon_sym_RBRACK, - anon_sym_RBRACE, - [51494] = 7, + anon_sym_COLON, + [51694] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(2029), 1, + anon_sym_if, + ACTIONS(2031), 1, anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(2033), 1, anon_sym_or, - ACTIONS(2069), 1, + ACTIONS(2047), 1, anon_sym_COMMA, - ACTIONS(2071), 1, - anon_sym_if, - STATE(1092), 1, + STATE(1106), 1, aux_sym_expression_list_repeat1, - ACTIONS(2185), 2, + ACTIONS(1951), 2, sym__newline, - sym__semicolon, - [51517] = 5, + anon_sym_SEMI, + [51717] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(2165), 1, + ACTIONS(2029), 1, + anon_sym_if, + ACTIONS(2031), 1, anon_sym_and, - ACTIONS(2167), 1, + ACTIONS(2033), 1, anon_sym_or, - ACTIONS(2173), 1, - anon_sym_if, - ACTIONS(1885), 4, - anon_sym_RPAREN, + ACTIONS(2047), 1, anon_sym_COMMA, - anon_sym_as, - anon_sym_COLON, - [51536] = 5, + STATE(1106), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2203), 2, + sym__newline, + anon_sym_SEMI, + [51740] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(2029), 1, + anon_sym_if, + ACTIONS(2031), 1, anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(2033), 1, anon_sym_or, - ACTIONS(2071), 1, - anon_sym_if, - ACTIONS(1934), 4, - sym__newline, - anon_sym_from, + ACTIONS(2047), 1, anon_sym_COMMA, - sym__semicolon, - [51555] = 5, + STATE(1106), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2205), 2, + sym__newline, + anon_sym_SEMI, + [51763] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2147), 1, - sym_identifier, - ACTIONS(2149), 1, - anon_sym_STAR, - ACTIONS(2151), 1, - anon_sym_STAR_STAR, - STATE(1227), 4, - sym_typevar_parameter, - sym_typevartuple_parameter, - sym_paramspec_parameter, - sym__type_parameter, - [51574] = 8, + ACTIONS(2209), 1, + anon_sym_as, + ACTIONS(2207), 6, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51778] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1867), 1, + ACTIONS(1890), 1, anon_sym_async, - ACTIONS(1869), 1, + ACTIONS(1892), 1, anon_sym_for, - ACTIONS(2187), 1, + ACTIONS(2211), 1, anon_sym_COMMA, - ACTIONS(2189), 1, + ACTIONS(2213), 1, anon_sym_RBRACE, - STATE(956), 1, + STATE(958), 1, sym_for_in_clause, - STATE(1247), 1, + STATE(1244), 1, aux_sym_dictionary_repeat1, - STATE(1433), 1, + STATE(1417), 1, sym__comprehension_clauses, - [51599] = 5, + [51803] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1863), 1, + ACTIONS(2029), 1, anon_sym_if, - ACTIONS(1873), 1, + ACTIONS(2031), 1, anon_sym_and, - ACTIONS(1875), 1, + ACTIONS(2033), 1, anon_sym_or, - ACTIONS(2191), 4, + ACTIONS(1971), 4, + sym__newline, + anon_sym_from, anon_sym_COMMA, - anon_sym_async, - anon_sym_for, - anon_sym_RBRACE, - [51618] = 8, + anon_sym_SEMI, + [51822] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(2029), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(2031), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(2033), 1, anon_sym_or, - ACTIONS(2155), 1, - anon_sym_COLON, - ACTIONS(2193), 1, + ACTIONS(2215), 1, anon_sym_COMMA, - ACTIONS(2195), 1, - anon_sym_RBRACK, - STATE(1282), 1, - aux_sym_subscript_repeat1, - [51643] = 2, + STATE(1193), 1, + aux_sym_assert_statement_repeat1, + ACTIONS(2217), 2, + sym__newline, + anon_sym_SEMI, + [51845] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2029), 1, + anon_sym_if, + ACTIONS(2031), 1, + anon_sym_and, + ACTIONS(2033), 1, + anon_sym_or, + ACTIONS(1995), 4, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_SEMI, + [51864] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1926), 7, + ACTIONS(1951), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -69450,148 +67154,135 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACE, anon_sym_EQ, sym_type_conversion, - [51656] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1848), 7, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_as, - anon_sym_if, - anon_sym_COLON, - anon_sym_and, - anon_sym_or, - [51669] = 7, + [51877] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2071), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(2197), 1, - anon_sym_COMMA, - STATE(1172), 1, - aux_sym_print_statement_repeat1, - ACTIONS(2199), 2, - sym__newline, - sym__semicolon, - [51692] = 7, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2051), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2071), 1, - anon_sym_if, - ACTIONS(2169), 1, + ACTIONS(2219), 4, + anon_sym_RPAREN, anon_sym_COMMA, - STATE(1174), 1, - aux_sym_assert_statement_repeat1, - ACTIONS(2201), 2, - sym__newline, - sym__semicolon, - [51715] = 7, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51896] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2069), 1, + ACTIONS(2105), 7, + anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(2071), 1, anon_sym_if, - STATE(1092), 1, - aux_sym_expression_list_repeat1, - ACTIONS(2203), 2, - sym__newline, - sym__semicolon, - [51738] = 7, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51909] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2069), 1, + ACTIONS(2221), 7, + anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(2071), 1, anon_sym_if, - STATE(1092), 1, - aux_sym_expression_list_repeat1, - ACTIONS(2205), 2, - sym__newline, - sym__semicolon, - [51761] = 8, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51922] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2155), 1, + ACTIONS(2179), 1, anon_sym_COLON, - ACTIONS(2207), 1, + ACTIONS(2223), 1, anon_sym_COMMA, - ACTIONS(2209), 1, + ACTIONS(2225), 1, anon_sym_RBRACK, - STATE(1272), 1, + STATE(1290), 1, aux_sym_subscript_repeat1, - [51786] = 5, + [51947] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(1865), 1, anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(1867), 1, anon_sym_or, - ACTIONS(2071), 1, + ACTIONS(1888), 1, anon_sym_if, - ACTIONS(1979), 4, - sym__newline, - anon_sym_from, + ACTIONS(2227), 4, anon_sym_COMMA, - sym__semicolon, - [51805] = 8, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACE, + [51966] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(1867), 1, + ACTIONS(2029), 1, + anon_sym_if, + ACTIONS(2031), 1, + anon_sym_and, + ACTIONS(2033), 1, + anon_sym_or, + ACTIONS(2215), 1, + anon_sym_COMMA, + STATE(1194), 1, + aux_sym_assert_statement_repeat1, + ACTIONS(2229), 2, + sym__newline, + anon_sym_SEMI, + [51989] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1890), 1, anon_sym_async, - ACTIONS(1869), 1, + ACTIONS(1892), 1, anon_sym_for, - ACTIONS(2211), 1, + ACTIONS(2231), 1, anon_sym_COMMA, - ACTIONS(2213), 1, + ACTIONS(2233), 1, anon_sym_RBRACE, - STATE(956), 1, + STATE(958), 1, sym_for_in_clause, - STATE(1300), 1, + STATE(1277), 1, aux_sym_dictionary_repeat1, - STATE(1411), 1, + STATE(1493), 1, sym__comprehension_clauses, - [51830] = 6, + [52014] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2165), 1, + ACTIONS(1910), 1, + anon_sym_if, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(2167), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2173), 1, - anon_sym_if, - ACTIONS(2217), 1, - anon_sym_as, - ACTIONS(2215), 3, + ACTIONS(2235), 4, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_EQ, + [52033] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1965), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, - [51851] = 2, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [52046] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1852), 7, + ACTIONS(1439), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -69599,638 +67290,626 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COLON, anon_sym_and, anon_sym_or, - [51864] = 8, + [52059] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1867), 1, - anon_sym_async, - ACTIONS(1869), 1, - anon_sym_for, - ACTIONS(2219), 1, + ACTIONS(1852), 7, + anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(2221), 1, - anon_sym_RBRACE, - STATE(956), 1, - sym_for_in_clause, - STATE(1234), 1, - aux_sym_dictionary_repeat1, - STATE(1439), 1, - sym__comprehension_clauses, - [51889] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1879), 1, + anon_sym_as, anon_sym_if, - ACTIONS(1881), 1, + anon_sym_COLON, anon_sym_and, - ACTIONS(1883), 1, anon_sym_or, - ACTIONS(2223), 4, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_RBRACE, - [51908] = 5, + [52072] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(2029), 1, + anon_sym_if, + ACTIONS(2031), 1, anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(2033), 1, anon_sym_or, - ACTIONS(2071), 1, - anon_sym_if, - ACTIONS(1981), 4, - sym__newline, - anon_sym_from, + ACTIONS(2237), 1, anon_sym_COMMA, - sym__semicolon, - [51927] = 6, - ACTIONS(1942), 1, - sym_comment, - ACTIONS(2225), 1, - anon_sym_LBRACE2, - ACTIONS(2230), 1, - sym__not_escape_sequence, - ACTIONS(2233), 1, - sym__string_end, - STATE(1055), 1, - aux_sym_string_content_repeat1, - ACTIONS(2227), 3, - sym__string_content, - sym__escape_interpolation, - sym_escape_sequence, - [51948] = 8, + STATE(1195), 1, + aux_sym_print_statement_repeat1, + ACTIONS(2239), 2, + sym__newline, + anon_sym_SEMI, + [52095] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2235), 1, + ACTIONS(2197), 1, sym_identifier, - ACTIONS(2237), 1, - anon_sym_LPAREN, - ACTIONS(2239), 1, + ACTIONS(2199), 1, anon_sym_STAR, - STATE(1109), 1, - sym_dotted_name, - STATE(1143), 1, - sym_aliased_import, - STATE(1393), 1, - sym_wildcard_import, - STATE(1395), 1, - sym__import_list, - [51973] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2241), 1, - anon_sym_DOT, - STATE(1057), 1, - aux_sym_match_value_pattern_repeat1, - ACTIONS(1856), 4, - sym__newline, - anon_sym_COMMA, - anon_sym_as, - sym__semicolon, - [51989] = 4, + ACTIONS(2201), 1, + anon_sym_STAR_STAR, + STATE(1299), 4, + sym_typevar_parameter, + sym_typevartuple_parameter, + sym_paramspec_parameter, + sym__type_parameter, + [52114] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1889), 1, - anon_sym_DOT, - STATE(906), 1, - aux_sym_match_value_pattern_repeat1, - ACTIONS(2244), 4, - anon_sym_import, + ACTIONS(1848), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, - [52005] = 7, + anon_sym_if, + anon_sym_COLON, + anon_sym_and, + anon_sym_or, + [52127] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(1928), 1, + ACTIONS(1953), 1, anon_sym_COMMA, - ACTIONS(2246), 1, + ACTIONS(2241), 1, anon_sym_COLON, - STATE(964), 1, + STATE(993), 1, aux_sym_expression_list_repeat1, - [52027] = 3, - ACTIONS(1942), 1, - sym_comment, - ACTIONS(2248), 2, - anon_sym_LBRACE2, - sym__not_escape_sequence, - ACTIONS(2250), 4, - sym__string_content, - sym__string_end, - sym__escape_interpolation, - sym_escape_sequence, - [52041] = 4, + [52149] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1889), 1, + ACTIONS(1894), 1, anon_sym_DOT, - STATE(1058), 1, + STATE(907), 1, aux_sym_match_value_pattern_repeat1, - ACTIONS(2252), 4, + ACTIONS(2243), 4, anon_sym_import, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, - [52057] = 4, - ACTIONS(3), 1, + [52165] = 3, + ACTIONS(1875), 1, sym_comment, - ACTIONS(2256), 1, - anon_sym_AT, - STATE(1062), 2, - sym_decorator, - aux_sym_decorated_definition_repeat1, - ACTIONS(2254), 3, - anon_sym_async, - anon_sym_def, - anon_sym_class, - [52073] = 6, + ACTIONS(2245), 2, + anon_sym_LBRACE2, + anon_sym_BSLASH, + ACTIONS(2247), 4, + sym__string_content, + sym__string_end, + sym__escape_interpolation, + sym_escape_sequence, + [52179] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(2165), 1, + ACTIONS(2191), 1, + anon_sym_if, + ACTIONS(2193), 1, anon_sym_and, - ACTIONS(2167), 1, + ACTIONS(2195), 1, anon_sym_or, - ACTIONS(2173), 1, - anon_sym_if, - ACTIONS(2261), 1, + ACTIONS(2251), 1, anon_sym_COLON, - ACTIONS(2259), 2, + ACTIONS(2249), 2, anon_sym_COMMA, anon_sym_as, - [52093] = 6, + [52199] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2265), 1, + ACTIONS(1953), 1, + anon_sym_COMMA, + ACTIONS(2253), 1, anon_sym_COLON, - ACTIONS(2263), 2, + STATE(993), 1, + aux_sym_expression_list_repeat1, + [52221] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2255), 1, + anon_sym_DOT, + STATE(1085), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(2243), 4, + sym__newline, anon_sym_COMMA, - anon_sym_RBRACK, - [52113] = 5, + anon_sym_as, + anon_sym_SEMI, + [52237] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2029), 1, + anon_sym_if, + ACTIONS(2031), 1, + anon_sym_and, + ACTIONS(2033), 1, + anon_sym_or, + ACTIONS(2257), 3, + sym__newline, + anon_sym_COMMA, + anon_sym_SEMI, + [52255] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(1910), 1, + anon_sym_if, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2071), 1, - anon_sym_if, - ACTIONS(2267), 3, - sym__newline, + ACTIONS(2259), 3, + anon_sym_RPAREN, anon_sym_COMMA, - sym__semicolon, - [52131] = 5, + anon_sym_COLON, + [52273] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(2029), 1, + anon_sym_if, + ACTIONS(2031), 1, anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(2033), 1, anon_sym_or, - ACTIONS(2071), 1, - anon_sym_if, - ACTIONS(2269), 3, + ACTIONS(2261), 3, sym__newline, anon_sym_COMMA, - sym__semicolon, - [52149] = 3, - ACTIONS(1942), 1, - sym_comment, - ACTIONS(2271), 2, - anon_sym_LBRACE2, - sym__not_escape_sequence, - ACTIONS(2273), 4, - sym__string_content, - sym__string_end, - sym__escape_interpolation, - sym_escape_sequence, - [52163] = 4, + anon_sym_SEMI, + [52291] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2275), 1, + ACTIONS(2255), 1, anon_sym_DOT, - STATE(1057), 1, + STATE(1063), 1, aux_sym_match_value_pattern_repeat1, - ACTIONS(2244), 4, + ACTIONS(2263), 4, sym__newline, anon_sym_COMMA, anon_sym_as, - sym__semicolon, - [52179] = 3, - ACTIONS(1942), 1, + anon_sym_SEMI, + [52307] = 3, + ACTIONS(1875), 1, sym_comment, - ACTIONS(2277), 2, + ACTIONS(2265), 2, anon_sym_LBRACE2, - sym__not_escape_sequence, - ACTIONS(2279), 4, + anon_sym_BSLASH, + ACTIONS(2267), 4, sym__string_content, sym__string_end, sym__escape_interpolation, sym_escape_sequence, - [52193] = 7, + [52321] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(2029), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(2031), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(2033), 1, anon_sym_or, - ACTIONS(1928), 1, - anon_sym_COMMA, - ACTIONS(2281), 1, - anon_sym_COLON, - STATE(964), 1, - aux_sym_expression_list_repeat1, - [52215] = 7, + ACTIONS(2235), 3, + sym__newline, + anon_sym_EQ, + anon_sym_SEMI, + [52339] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(2271), 1, + anon_sym_AT, + STATE(1070), 2, + sym_decorator, + aux_sym_decorated_definition_repeat1, + ACTIONS(2269), 3, + anon_sym_async, + anon_sym_def, + anon_sym_class, + [52355] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(1993), 1, - anon_sym_RPAREN, - ACTIONS(1995), 1, + ACTIONS(2276), 1, + anon_sym_COLON, + ACTIONS(2274), 2, anon_sym_COMMA, - STATE(1280), 1, - aux_sym_argument_list_repeat1, - [52237] = 3, - ACTIONS(1942), 1, + anon_sym_RBRACK, + [52375] = 3, + ACTIONS(1875), 1, sym_comment, - ACTIONS(2283), 2, + ACTIONS(2278), 2, anon_sym_LBRACE2, - sym__not_escape_sequence, - ACTIONS(2285), 4, + anon_sym_BSLASH, + ACTIONS(2280), 4, sym__string_content, sym__string_end, sym__escape_interpolation, sym_escape_sequence, - [52251] = 5, + [52389] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2287), 3, - anon_sym_RPAREN, - anon_sym_COMMA, + ACTIONS(2179), 1, anon_sym_COLON, - [52269] = 3, - ACTIONS(1942), 1, - sym_comment, - ACTIONS(2289), 2, - anon_sym_LBRACE2, - sym__not_escape_sequence, - ACTIONS(2291), 4, - sym__string_content, - sym__string_end, - sym__escape_interpolation, - sym_escape_sequence, - [52283] = 7, + ACTIONS(2282), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [52409] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(1928), 1, + ACTIONS(1953), 1, anon_sym_COMMA, - ACTIONS(2293), 1, + ACTIONS(2284), 1, anon_sym_COLON, - STATE(964), 1, + STATE(993), 1, aux_sym_expression_list_repeat1, - [52305] = 3, - ACTIONS(1942), 1, + [52431] = 5, + ACTIONS(3), 1, sym_comment, - ACTIONS(2295), 2, - anon_sym_LBRACE2, - sym__not_escape_sequence, - ACTIONS(2297), 4, - sym__string_content, - sym__string_end, - sym__escape_interpolation, - sym_escape_sequence, - [52319] = 4, + ACTIONS(1910), 1, + anon_sym_if, + ACTIONS(1912), 1, + anon_sym_and, + ACTIONS(1914), 1, + anon_sym_or, + ACTIONS(2286), 3, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_EQ, + [52449] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2301), 1, + ACTIONS(2290), 1, anon_sym_COMMA, - STATE(1077), 1, + STATE(1076), 1, aux_sym_open_sequence_match_pattern_repeat1, - ACTIONS(2299), 4, + ACTIONS(2288), 4, anon_sym_RPAREN, anon_sym_if, anon_sym_COLON, anon_sym_RBRACK, - [52335] = 5, + [52465] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(1910), 1, + anon_sym_if, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2071), 1, - anon_sym_if, - ACTIONS(2304), 3, - sym__newline, + ACTIONS(2295), 1, + anon_sym_COLON, + ACTIONS(2293), 2, anon_sym_COMMA, - sym__semicolon, - [52353] = 7, + anon_sym_RBRACK, + [52485] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(2029), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(2031), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(2033), 1, anon_sym_or, - ACTIONS(1928), 1, + ACTIONS(2297), 3, + sym__newline, anon_sym_COMMA, - ACTIONS(2306), 1, - anon_sym_COLON, - STATE(964), 1, - aux_sym_expression_list_repeat1, - [52375] = 7, + anon_sym_SEMI, + [52503] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(1928), 1, + ACTIONS(1953), 1, anon_sym_COMMA, - ACTIONS(2308), 1, + ACTIONS(2299), 1, anon_sym_COLON, - STATE(964), 1, + STATE(993), 1, aux_sym_expression_list_repeat1, - [52397] = 6, + [52525] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(2165), 1, + ACTIONS(1910), 1, + anon_sym_if, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(2167), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2173), 1, - anon_sym_if, - ACTIONS(2312), 1, - anon_sym_COLON, - ACTIONS(2310), 2, + ACTIONS(1953), 1, anon_sym_COMMA, - anon_sym_as, - [52417] = 5, - ACTIONS(3), 1, + ACTIONS(2301), 1, + anon_sym_COLON, + STATE(993), 1, + aux_sym_expression_list_repeat1, + [52547] = 3, + ACTIONS(1875), 1, sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2071), 1, - anon_sym_if, - ACTIONS(2159), 3, - sym__newline, - anon_sym_EQ, - sym__semicolon, - [52435] = 6, + ACTIONS(2303), 2, + anon_sym_LBRACE2, + anon_sym_BSLASH, + ACTIONS(2305), 4, + sym__string_content, + sym__string_end, + sym__escape_interpolation, + sym_escape_sequence, + [52561] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(2191), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(2193), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(2195), 1, anon_sym_or, - ACTIONS(2316), 1, + ACTIONS(2309), 1, anon_sym_COLON, - ACTIONS(2314), 2, + ACTIONS(2307), 2, anon_sym_COMMA, - anon_sym_RBRACK, - [52455] = 5, + anon_sym_as, + [52581] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2318), 3, + ACTIONS(2311), 3, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, - [52473] = 7, + [52599] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, - anon_sym_if, - ACTIONS(1881), 1, - anon_sym_and, - ACTIONS(1883), 1, - anon_sym_or, - ACTIONS(1928), 1, - anon_sym_COMMA, - ACTIONS(2320), 1, - anon_sym_COLON, - STATE(964), 1, - aux_sym_expression_list_repeat1, - [52495] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1879), 1, - anon_sym_if, - ACTIONS(1881), 1, - anon_sym_and, - ACTIONS(1883), 1, - anon_sym_or, - ACTIONS(2155), 1, - anon_sym_COLON, - ACTIONS(2322), 2, - anon_sym_COMMA, - anon_sym_RBRACK, - [52515] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1920), 6, + ACTIONS(2313), 6, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, anon_sym_COLON, anon_sym_RBRACK, anon_sym_RBRACE, - [52527] = 4, + [52611] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2275), 1, + ACTIONS(2315), 1, anon_sym_DOT, - STATE(1068), 1, + STATE(1085), 1, aux_sym_match_value_pattern_repeat1, - ACTIONS(2252), 4, + ACTIONS(1856), 4, sym__newline, anon_sym_COMMA, anon_sym_as, - sym__semicolon, - [52543] = 2, + anon_sym_SEMI, + [52627] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1910), 1, + anon_sym_if, + ACTIONS(1912), 1, + anon_sym_and, + ACTIONS(1914), 1, + anon_sym_or, + ACTIONS(1967), 1, + anon_sym_RPAREN, + ACTIONS(1969), 1, + anon_sym_COMMA, + STATE(1287), 1, + aux_sym_argument_list_repeat1, + [52649] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2324), 6, + ACTIONS(1894), 1, + anon_sym_DOT, + STATE(1059), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(2263), 4, + anon_sym_import, anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_if, - anon_sym_COLON, - anon_sym_RBRACK, - anon_sym_RBRACE, - [52555] = 5, + anon_sym_as, + [52665] = 3, + ACTIONS(1875), 1, + sym_comment, + ACTIONS(2318), 2, + anon_sym_LBRACE2, + anon_sym_BSLASH, + ACTIONS(2320), 4, + sym__string_content, + sym__string_end, + sym__escape_interpolation, + sym_escape_sequence, + [52679] = 3, + ACTIONS(1875), 1, + sym_comment, + ACTIONS(2322), 2, + anon_sym_LBRACE2, + anon_sym_BSLASH, + ACTIONS(2324), 4, + sym__string_content, + sym__string_end, + sym__escape_interpolation, + sym_escape_sequence, + [52693] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, - anon_sym_if, - ACTIONS(1881), 1, - anon_sym_and, - ACTIONS(1883), 1, - anon_sym_or, + ACTIONS(2328), 1, + anon_sym_COLON, + ACTIONS(2330), 1, + anon_sym_EQ, + STATE(1153), 1, + sym__type_bound, + STATE(1355), 1, + sym__type_param_default, ACTIONS(2326), 2, anon_sym_COMMA, anon_sym_RBRACK, - [52572] = 5, + [52713] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, - anon_sym_if, - ACTIONS(1881), 1, - anon_sym_and, - ACTIONS(1883), 1, - anon_sym_or, - ACTIONS(2328), 2, + ACTIONS(1957), 6, + anon_sym_RPAREN, anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, anon_sym_RBRACK, - [52589] = 4, + anon_sym_RBRACE, + [52725] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(2330), 1, + ACTIONS(1910), 1, + anon_sym_if, + ACTIONS(1912), 1, + anon_sym_and, + ACTIONS(1914), 1, + anon_sym_or, + ACTIONS(1953), 1, anon_sym_COMMA, - STATE(1096), 1, + ACTIONS(2332), 1, + anon_sym_COLON, + STATE(993), 1, aux_sym_expression_list_repeat1, - ACTIONS(2029), 3, - sym__newline, - anon_sym_from, - sym__semicolon, - [52604] = 5, + [52747] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2235), 1, + ACTIONS(2157), 1, sym_identifier, - STATE(1183), 1, + STATE(1180), 1, sym_dotted_name, - STATE(1198), 1, + STATE(1240), 1, sym_aliased_import, - ACTIONS(2332), 2, + ACTIONS(2334), 2, sym__newline, - sym__semicolon, - [52621] = 5, + anon_sym_SEMI, + [52764] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2071), 1, - anon_sym_if, - ACTIONS(1961), 2, + ACTIONS(2336), 1, + anon_sym_COMMA, + ACTIONS(2338), 1, + anon_sym_as, + STATE(1208), 1, + aux_sym__import_list_repeat1, + ACTIONS(2340), 2, sym__newline, - sym__semicolon, - [52638] = 5, + anon_sym_SEMI, + [52781] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2235), 1, + ACTIONS(2157), 1, sym_identifier, - STATE(1183), 1, + STATE(1180), 1, sym_dotted_name, - STATE(1198), 1, + STATE(1240), 1, sym_aliased_import, - ACTIONS(2332), 2, + ACTIONS(2334), 2, sym__newline, - sym__semicolon, - [52655] = 4, + anon_sym_SEMI, + [52798] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2334), 1, + ACTIONS(2342), 1, anon_sym_COMMA, - STATE(1096), 1, + STATE(1125), 1, aux_sym_expression_list_repeat1, - ACTIONS(2115), 3, + ACTIONS(2095), 3, sym__newline, anon_sym_from, - sym__semicolon, - [52670] = 6, + anon_sym_SEMI, + [52813] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2344), 5, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + [52824] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2029), 1, + anon_sym_if, + ACTIONS(2031), 1, + anon_sym_and, + ACTIONS(2033), 1, + anon_sym_or, + ACTIONS(1987), 2, + sym__newline, + anon_sym_SEMI, + [52841] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1910), 1, + anon_sym_if, + ACTIONS(1912), 1, + anon_sym_and, + ACTIONS(1914), 1, + anon_sym_or, + ACTIONS(2227), 2, + anon_sym_COMMA, + anon_sym_RBRACE, + [52858] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(2337), 1, + ACTIONS(2346), 1, anon_sym_COLON, - ACTIONS(2339), 1, + ACTIONS(2348), 1, anon_sym_RBRACE, - ACTIONS(2341), 1, + ACTIONS(2350), 1, anon_sym_EQ, - ACTIONS(2343), 1, + ACTIONS(2352), 1, sym_type_conversion, - STATE(1425), 1, + STATE(1499), 1, sym_format_specifier, - [52689] = 5, + [52877] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2345), 2, + ACTIONS(2354), 2, anon_sym_COMMA, anon_sym_RBRACK, - [52706] = 6, - ACTIONS(1942), 1, - sym_comment, - ACTIONS(2347), 1, - anon_sym_RBRACE, - ACTIONS(2349), 1, - anon_sym_LBRACE2, - ACTIONS(2351), 1, - aux_sym_format_specifier_token1, - STATE(1117), 1, - aux_sym_format_specifier_repeat1, - STATE(1269), 1, - sym_interpolation, - [52725] = 4, + [52894] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1861), 1, - anon_sym_COMMA, - STATE(1115), 1, - aux_sym__collection_elements_repeat1, - ACTIONS(1871), 3, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_RBRACE, - [52740] = 2, + ACTIONS(2029), 1, + anon_sym_if, + ACTIONS(2031), 1, + anon_sym_and, + ACTIONS(2033), 1, + anon_sym_or, + ACTIONS(2356), 2, + sym__newline, + anon_sym_SEMI, + [52911] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(1856), 5, @@ -70238,3283 +67917,3359 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT, anon_sym_COMMA, anon_sym_as, - sym__semicolon, - [52751] = 5, + anon_sym_SEMI, + [52922] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, - anon_sym_if, - ACTIONS(1881), 1, - anon_sym_and, - ACTIONS(1883), 1, - anon_sym_or, - ACTIONS(2191), 2, + ACTIONS(2288), 5, + anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_RBRACE, - [52768] = 5, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + [52933] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2353), 2, + ACTIONS(2358), 2, anon_sym_COMMA, anon_sym_RBRACK, - [52785] = 6, + [52950] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2165), 1, + ACTIONS(2360), 1, + anon_sym_COMMA, + STATE(1125), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2095), 3, + sym__newline, + anon_sym_from, + anon_sym_SEMI, + [52965] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2191), 1, + anon_sym_if, + ACTIONS(2193), 1, anon_sym_and, - ACTIONS(2167), 1, + ACTIONS(2195), 1, anon_sym_or, - ACTIONS(2173), 1, - anon_sym_if, - ACTIONS(2355), 1, + ACTIONS(2362), 1, anon_sym_as, - ACTIONS(2357), 1, + ACTIONS(2364), 1, anon_sym_COLON, - [52804] = 5, + [52984] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(2029), 1, + anon_sym_if, + ACTIONS(2031), 1, anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(2033), 1, anon_sym_or, - ACTIONS(2071), 1, + ACTIONS(2366), 2, + sym__newline, + anon_sym_SEMI, + [53001] = 6, + ACTIONS(1875), 1, + sym_comment, + ACTIONS(2368), 1, + anon_sym_RBRACE, + ACTIONS(2370), 1, + anon_sym_LBRACE2, + ACTIONS(2372), 1, + aux_sym_format_specifier_token1, + STATE(1114), 1, + aux_sym_format_specifier_repeat1, + STATE(1318), 1, + sym_interpolation, + [53020] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2029), 1, anon_sym_if, - ACTIONS(2359), 2, + ACTIONS(2031), 1, + anon_sym_and, + ACTIONS(2033), 1, + anon_sym_or, + ACTIONS(2374), 2, sym__newline, - sym__semicolon, - [52821] = 2, + anon_sym_SEMI, + [53037] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2299), 5, - anon_sym_RPAREN, + ACTIONS(2378), 1, anon_sym_COMMA, - anon_sym_if, - anon_sym_COLON, + STATE(1116), 1, + aux_sym__collection_elements_repeat1, + ACTIONS(2376), 3, + anon_sym_RPAREN, anon_sym_RBRACK, - [52832] = 6, + anon_sym_RBRACE, + [53052] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(2361), 1, + ACTIONS(2380), 1, anon_sym_LPAREN, - ACTIONS(2363), 1, + ACTIONS(2382), 1, anon_sym_COLON, - ACTIONS(2365), 1, + ACTIONS(2384), 1, anon_sym_LBRACK, - STATE(1224), 1, + STATE(1270), 1, sym_type_parameters, - STATE(1463), 1, + STATE(1498), 1, sym_argument_list, - [52851] = 6, + [53071] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(2361), 1, + ACTIONS(2380), 1, anon_sym_LPAREN, - ACTIONS(2365), 1, + ACTIONS(2384), 1, anon_sym_LBRACK, - ACTIONS(2367), 1, + ACTIONS(2386), 1, anon_sym_COLON, - STATE(1210), 1, + STATE(1309), 1, sym_type_parameters, - STATE(1499), 1, + STATE(1470), 1, sym_argument_list, - [52870] = 5, - ACTIONS(3), 1, + [53090] = 6, + ACTIONS(1875), 1, sym_comment, - ACTIONS(2369), 1, - anon_sym_COMMA, - ACTIONS(2371), 1, - anon_sym_as, - STATE(1164), 1, - aux_sym__import_list_repeat1, - ACTIONS(2373), 2, - sym__newline, - sym__semicolon, - [52887] = 2, + ACTIONS(2370), 1, + anon_sym_LBRACE2, + ACTIONS(2388), 1, + anon_sym_RBRACE, + ACTIONS(2390), 1, + aux_sym_format_specifier_token1, + STATE(1129), 1, + aux_sym_format_specifier_repeat1, + STATE(1318), 1, + sym_interpolation, + [53109] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2375), 5, + ACTIONS(1910), 1, + anon_sym_if, + ACTIONS(1912), 1, + anon_sym_and, + ACTIONS(1914), 1, + anon_sym_or, + ACTIONS(2392), 2, anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_if, - anon_sym_COLON, - anon_sym_RBRACK, - [52898] = 4, + [53126] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2379), 1, + ACTIONS(2396), 1, anon_sym_COMMA, - STATE(1114), 1, + STATE(1116), 1, aux_sym__collection_elements_repeat1, - ACTIONS(2377), 3, + ACTIONS(2394), 3, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_RBRACE, - [52913] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2381), 1, - anon_sym_COMMA, - STATE(1096), 1, - aux_sym_expression_list_repeat1, - ACTIONS(2029), 3, - sym__newline, - anon_sym_from, - sym__semicolon, - [52928] = 5, + [53141] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(1910), 1, + anon_sym_if, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2071), 1, - anon_sym_if, - ACTIONS(2383), 2, - sym__newline, - sym__semicolon, - [52945] = 4, + ACTIONS(2399), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [53158] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2387), 1, + ACTIONS(1900), 1, anon_sym_COMMA, - STATE(1114), 1, + STATE(1120), 1, aux_sym__collection_elements_repeat1, - ACTIONS(2385), 3, + ACTIONS(1904), 3, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_RBRACE, - [52960] = 4, + [53173] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(2390), 1, + ACTIONS(2346), 1, + anon_sym_COLON, + ACTIONS(2401), 1, + anon_sym_RBRACE, + ACTIONS(2403), 1, + anon_sym_EQ, + ACTIONS(2405), 1, + sym_type_conversion, + STATE(1513), 1, + sym_format_specifier, + [53192] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2407), 1, anon_sym_COMMA, - STATE(1114), 1, + STATE(1116), 1, aux_sym__collection_elements_repeat1, - ACTIONS(2377), 3, + ACTIONS(2376), 3, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_RBRACE, - [52975] = 6, + [53207] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(2235), 1, + ACTIONS(2157), 1, sym_identifier, - ACTIONS(2392), 1, + ACTIONS(2409), 1, anon_sym_LPAREN, - STATE(1109), 1, + STATE(1094), 1, sym_dotted_name, - STATE(1143), 1, + STATE(1146), 1, sym_aliased_import, - STATE(1385), 1, + STATE(1400), 1, sym__import_list, - [52994] = 6, - ACTIONS(1942), 1, - sym_comment, - ACTIONS(2394), 1, - anon_sym_RBRACE, - ACTIONS(2396), 1, - anon_sym_LBRACE2, - ACTIONS(2399), 1, - aux_sym_format_specifier_token1, - STATE(1117), 1, - aux_sym_format_specifier_repeat1, - STATE(1269), 1, - sym_interpolation, - [53013] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2235), 1, - sym_identifier, - STATE(1183), 1, - sym_dotted_name, - STATE(1198), 1, - sym_aliased_import, - ACTIONS(2402), 2, - sym__newline, - sym__semicolon, - [53030] = 5, + [53226] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2404), 2, + ACTIONS(2411), 2, anon_sym_COMMA, anon_sym_RBRACK, - [53047] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2337), 1, - anon_sym_COLON, - ACTIONS(2406), 1, - anon_sym_RBRACE, - ACTIONS(2408), 1, - anon_sym_EQ, - ACTIONS(2410), 1, - sym_type_conversion, - STATE(1523), 1, - sym_format_specifier, - [53066] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2071), 1, - anon_sym_if, - ACTIONS(2412), 2, - sym__newline, - sym__semicolon, - [53083] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2071), 1, - anon_sym_if, - ACTIONS(2414), 2, - sym__newline, - sym__semicolon, - [53100] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2165), 1, - anon_sym_and, - ACTIONS(2167), 1, - anon_sym_or, - ACTIONS(2173), 1, - anon_sym_if, - ACTIONS(2416), 1, - anon_sym_as, - ACTIONS(2418), 1, - anon_sym_COLON, - [53119] = 5, + [53243] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2420), 2, - anon_sym_RPAREN, + ACTIONS(2413), 2, anon_sym_COMMA, - [53136] = 6, - ACTIONS(1942), 1, - sym_comment, - ACTIONS(2349), 1, - anon_sym_LBRACE2, - ACTIONS(2422), 1, - anon_sym_RBRACE, - ACTIONS(2424), 1, - aux_sym_format_specifier_token1, - STATE(1099), 1, - aux_sym_format_specifier_repeat1, - STATE(1269), 1, - sym_interpolation, - [53155] = 5, + anon_sym_RBRACK, + [53260] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(2029), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(2031), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(2033), 1, anon_sym_or, - ACTIONS(2426), 2, - anon_sym_RPAREN, + ACTIONS(2415), 2, + sym__newline, + anon_sym_SEMI, + [53277] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2417), 1, anon_sym_COMMA, - [53172] = 5, + STATE(1125), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2150), 3, + sym__newline, + anon_sym_from, + anon_sym_SEMI, + [53292] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2428), 2, + ACTIONS(2420), 2, anon_sym_RPAREN, anon_sym_COMMA, - [53189] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2365), 1, - anon_sym_LBRACK, - ACTIONS(2430), 1, - anon_sym_LPAREN, - STATE(1370), 1, - sym_type_parameters, - STATE(1371), 1, - sym_parameters, - [53205] = 4, + [53309] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2432), 1, - anon_sym_case, - STATE(562), 1, - sym_cases, - STATE(345), 2, - sym_case_block, - aux_sym_cases_repeat1, - [53219] = 5, + ACTIONS(1910), 1, + anon_sym_if, + ACTIONS(1912), 1, + anon_sym_and, + ACTIONS(1914), 1, + anon_sym_or, + ACTIONS(2422), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [53326] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2235), 1, + ACTIONS(2157), 1, sym_identifier, - STATE(1109), 1, + STATE(1180), 1, sym_dotted_name, - STATE(1143), 1, + STATE(1240), 1, sym_aliased_import, - STATE(1383), 1, - sym__import_list, - [53235] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2365), 1, - anon_sym_LBRACK, - ACTIONS(2430), 1, - anon_sym_LPAREN, - STATE(1354), 1, - sym_type_parameters, - STATE(1377), 1, - sym_parameters, - [53251] = 5, - ACTIONS(3), 1, + ACTIONS(2424), 2, + sym__newline, + anon_sym_SEMI, + [53343] = 6, + ACTIONS(1875), 1, sym_comment, - ACTIONS(2365), 1, - anon_sym_LBRACK, - ACTIONS(2430), 1, - anon_sym_LPAREN, - STATE(1356), 1, - sym_type_parameters, - STATE(1378), 1, - sym_parameters, - [53267] = 3, + ACTIONS(2426), 1, + anon_sym_RBRACE, + ACTIONS(2428), 1, + anon_sym_LBRACE2, + ACTIONS(2431), 1, + aux_sym_format_specifier_token1, + STATE(1129), 1, + aux_sym_format_specifier_repeat1, + STATE(1318), 1, + sym_interpolation, + [53362] = 6, ACTIONS(3), 1, sym_comment, + ACTIONS(2191), 1, + anon_sym_if, + ACTIONS(2193), 1, + anon_sym_and, + ACTIONS(2195), 1, + anon_sym_or, + ACTIONS(2434), 1, + anon_sym_as, ACTIONS(2436), 1, - anon_sym_EQ, - ACTIONS(2434), 3, - anon_sym_RPAREN, - anon_sym_COMMA, anon_sym_COLON, - [53279] = 5, + [53381] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, ACTIONS(2438), 1, anon_sym_COLON, - [53295] = 5, + [53397] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, - anon_sym_if, - ACTIONS(1881), 1, - anon_sym_and, - ACTIONS(1883), 1, - anon_sym_or, ACTIONS(2440), 1, - anon_sym_COLON, - [53311] = 5, + sym_identifier, + STATE(1158), 1, + sym_dotted_name, + STATE(1275), 1, + sym_aliased_import, + STATE(1464), 1, + sym__import_list, + [53413] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, - anon_sym_if, - ACTIONS(1881), 1, - anon_sym_and, - ACTIONS(1883), 1, - anon_sym_or, - ACTIONS(2442), 1, - anon_sym_COLON, - [53327] = 4, + ACTIONS(2442), 4, + anon_sym_async, + anon_sym_def, + anon_sym_class, + anon_sym_AT, + [53423] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2169), 1, + ACTIONS(2444), 1, anon_sym_COMMA, - STATE(1160), 1, + STATE(1134), 1, aux_sym_assert_statement_repeat1, - ACTIONS(2444), 2, + ACTIONS(2261), 2, sym__newline, - sym__semicolon, - [53341] = 4, + anon_sym_SEMI, + [53437] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2446), 1, + ACTIONS(2447), 1, anon_sym_COMMA, - STATE(1138), 1, - aux_sym_global_statement_repeat1, - ACTIONS(2449), 2, + STATE(1135), 1, + aux_sym_print_statement_repeat1, + ACTIONS(2450), 2, + sym__newline, + anon_sym_SEMI, + [53451] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(580), 1, sym__newline, + ACTIONS(2452), 1, + anon_sym_SEMI, + STATE(134), 1, sym__semicolon, - [53355] = 4, + STATE(1213), 1, + aux_sym__simple_statements_repeat1, + [53467] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2453), 1, - anon_sym_COLON, - STATE(1343), 1, - sym__type_bound, - ACTIONS(2451), 2, + ACTIONS(2219), 4, + anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [53369] = 5, + anon_sym_RBRACE, + [53477] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, - anon_sym_if, - ACTIONS(1881), 1, - anon_sym_and, - ACTIONS(1883), 1, - anon_sym_or, - ACTIONS(2455), 1, - anon_sym_COLON, - [53385] = 5, + ACTIONS(2454), 1, + anon_sym_SEMI, + ACTIONS(2456), 1, + sym__newline, + STATE(137), 1, + sym__semicolon, + STATE(1188), 1, + aux_sym__simple_statements_repeat1, + [53493] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2457), 1, + ACTIONS(2458), 1, anon_sym_COLON, - [53401] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2332), 1, - anon_sym_RPAREN, - ACTIONS(2459), 1, - sym_identifier, - STATE(1245), 1, - sym_dotted_name, - STATE(1397), 1, - sym_aliased_import, - [53417] = 4, + [53509] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2369), 1, - anon_sym_COMMA, - STATE(1163), 1, - aux_sym__import_list_repeat1, - ACTIONS(2373), 2, + ACTIONS(2460), 1, + anon_sym_SEMI, + ACTIONS(2462), 1, sym__newline, + STATE(135), 1, sym__semicolon, - [53431] = 4, + STATE(1202), 1, + aux_sym__simple_statements_repeat1, + [53525] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2463), 1, - anon_sym_DOT, - STATE(1165), 1, - aux_sym_import_prefix_repeat1, - ACTIONS(2461), 2, - anon_sym_import, - sym_identifier, - [53445] = 5, + ACTIONS(2466), 1, + anon_sym_COLON, + ACTIONS(2468), 1, + anon_sym_EQ, + ACTIONS(2464), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [53539] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2465), 1, + ACTIONS(2470), 1, anon_sym_COLON, - [53461] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2469), 1, - anon_sym_COMMA, - STATE(1167), 1, - aux_sym__patterns_repeat1, - ACTIONS(2467), 2, - anon_sym_RPAREN, - anon_sym_RBRACK, - [53475] = 5, + [53555] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2332), 1, + ACTIONS(2424), 1, anon_sym_RPAREN, - ACTIONS(2459), 1, + ACTIONS(2440), 1, sym_identifier, - STATE(1245), 1, + STATE(1303), 1, sym_dotted_name, - STATE(1397), 1, + STATE(1364), 1, sym_aliased_import, - [53491] = 5, + [53571] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2471), 1, - anon_sym_COLON, - [53507] = 5, + ACTIONS(2472), 1, + anon_sym_else, + [53587] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, - anon_sym_if, - ACTIONS(1881), 1, - anon_sym_and, - ACTIONS(1883), 1, - anon_sym_or, - ACTIONS(2473), 1, - anon_sym_else, - [53523] = 4, + ACTIONS(2474), 4, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_RBRACE, + [53597] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2475), 1, + ACTIONS(2336), 1, anon_sym_COMMA, - STATE(1171), 1, - aux_sym_print_statement_repeat1, - ACTIONS(2477), 2, + STATE(1210), 1, + aux_sym__import_list_repeat1, + ACTIONS(2340), 2, sym__newline, - sym__semicolon, - [53537] = 5, + anon_sym_SEMI, + [53611] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, - anon_sym_if, - ACTIONS(1881), 1, - anon_sym_and, - ACTIONS(1883), 1, - anon_sym_or, - ACTIONS(2479), 1, + ACTIONS(2346), 1, anon_sym_COLON, - [53553] = 5, + ACTIONS(2476), 1, + anon_sym_RBRACE, + ACTIONS(2478), 1, + sym_type_conversion, + STATE(1486), 1, + sym_format_specifier, + [53627] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(594), 1, + sym__newline, + ACTIONS(2480), 1, + anon_sym_SEMI, + STATE(144), 1, + sym__semicolon, + STATE(1213), 1, + aux_sym__simple_statements_repeat1, + [53643] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2482), 1, + anon_sym_SEMI, + ACTIONS(2484), 1, + sym__newline, + STATE(136), 1, + sym__semicolon, + STATE(1136), 1, + aux_sym__simple_statements_repeat1, + [53659] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2481), 1, - anon_sym_else, - [53569] = 5, + ACTIONS(2486), 1, + anon_sym_COLON, + [53675] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2483), 1, + ACTIONS(2488), 1, anon_sym_COLON, - [53585] = 4, + [53691] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2485), 1, - anon_sym_COMMA, - STATE(1192), 1, - aux_sym_global_statement_repeat1, - ACTIONS(2487), 2, - sym__newline, - sym__semicolon, - [53599] = 4, + ACTIONS(2490), 1, + anon_sym_case, + STATE(593), 1, + sym_cases, + STATE(352), 2, + sym_case_block, + aux_sym_cases_repeat1, + [53705] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2485), 1, + ACTIONS(2330), 1, + anon_sym_EQ, + STATE(1381), 1, + sym__type_param_default, + ACTIONS(2492), 2, anon_sym_COMMA, - STATE(1191), 1, - aux_sym_global_statement_repeat1, - ACTIONS(2489), 2, - sym__newline, - sym__semicolon, - [53613] = 5, + anon_sym_RBRACK, + [53719] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(1910), 1, + anon_sym_if, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2071), 1, - anon_sym_if, - ACTIONS(2491), 1, - sym__newline, - [53629] = 5, + ACTIONS(2494), 1, + anon_sym_COLON, + [53735] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2493), 1, + ACTIONS(2496), 1, anon_sym_COLON, - [53645] = 5, + [53751] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(2498), 1, + anon_sym_SEMI, + ACTIONS(2500), 1, + sym__newline, + STATE(143), 1, + sym__semicolon, + STATE(1148), 1, + aux_sym__simple_statements_repeat1, + [53767] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2495), 1, + ACTIONS(2502), 1, anon_sym_COLON, - [53661] = 5, + [53783] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(2340), 1, + anon_sym_RPAREN, + ACTIONS(2504), 1, + anon_sym_COMMA, + ACTIONS(2506), 1, + anon_sym_as, + STATE(1327), 1, + aux_sym__import_list_repeat1, + [53799] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2497), 1, + ACTIONS(2508), 1, anon_sym_COLON, - [53677] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2499), 1, - anon_sym_COMMA, - STATE(1160), 1, - aux_sym_assert_statement_repeat1, - ACTIONS(2267), 2, - sym__newline, - sym__semicolon, - [53691] = 5, + [53815] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2373), 1, + ACTIONS(2510), 4, anon_sym_RPAREN, - ACTIONS(2502), 1, anon_sym_COMMA, - ACTIONS(2504), 1, - anon_sym_as, - STATE(1205), 1, - aux_sym__import_list_repeat1, - [53707] = 4, + anon_sym_RBRACK, + anon_sym_RBRACE, + [53825] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2506), 1, + ACTIONS(2512), 1, anon_sym_COMMA, - STATE(1162), 1, - aux_sym_print_statement_repeat1, - ACTIONS(2509), 2, + STATE(1185), 1, + aux_sym_global_statement_repeat1, + ACTIONS(2514), 2, sym__newline, - sym__semicolon, - [53721] = 4, + anon_sym_SEMI, + [53839] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2511), 1, + ACTIONS(2512), 1, anon_sym_COMMA, - STATE(1189), 1, - aux_sym__import_list_repeat1, - ACTIONS(2513), 2, + STATE(1185), 1, + aux_sym_global_statement_repeat1, + ACTIONS(2516), 2, sym__newline, - sym__semicolon, - [53735] = 4, + anon_sym_SEMI, + [53853] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2515), 1, + ACTIONS(2520), 1, anon_sym_COMMA, - STATE(1189), 1, - aux_sym__import_list_repeat1, - ACTIONS(2513), 2, - sym__newline, - sym__semicolon, - [53749] = 4, + STATE(1163), 1, + aux_sym_with_clause_repeat1, + ACTIONS(2518), 2, + anon_sym_RPAREN, + anon_sym_COLON, + [53867] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2519), 1, - anon_sym_DOT, - STATE(1165), 1, - aux_sym_import_prefix_repeat1, - ACTIONS(2517), 2, - anon_sym_import, - sym_identifier, - [53763] = 2, + ACTIONS(1910), 1, + anon_sym_if, + ACTIONS(1912), 1, + anon_sym_and, + ACTIONS(1914), 1, + anon_sym_or, + ACTIONS(2523), 1, + anon_sym_else, + [53883] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2223), 4, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_RBRACE, - [53773] = 4, + ACTIONS(600), 1, + sym__newline, + ACTIONS(2525), 1, + anon_sym_SEMI, + STATE(139), 1, + sym__semicolon, + STATE(1213), 1, + aux_sym__simple_statements_repeat1, + [53899] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1910), 1, + anon_sym_if, + ACTIONS(1912), 1, + anon_sym_and, + ACTIONS(1914), 1, + anon_sym_or, + ACTIONS(2527), 1, + anon_sym_COLON, + [53915] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2524), 1, + ACTIONS(2531), 1, anon_sym_COMMA, - STATE(872), 1, + STATE(1203), 1, aux_sym__patterns_repeat1, - ACTIONS(2522), 2, + ACTIONS(2529), 2, anon_sym_RPAREN, anon_sym_RBRACK, - [53787] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(315), 1, - sym__string_start, - ACTIONS(1899), 1, - anon_sym_COLON, - STATE(598), 2, - sym_string, - aux_sym_concatenated_string_repeat1, - [53801] = 5, + [53929] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, + ACTIONS(1910), 1, anon_sym_if, - ACTIONS(1881), 1, + ACTIONS(1912), 1, anon_sym_and, - ACTIONS(1883), 1, + ACTIONS(1914), 1, anon_sym_or, - ACTIONS(2526), 1, - anon_sym_else, - [53817] = 2, + ACTIONS(2533), 1, + anon_sym_COLON, + [53945] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2528), 4, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_RBRACE, - [53827] = 4, + ACTIONS(2490), 1, + anon_sym_case, + STATE(592), 1, + sym_cases, + STATE(352), 2, + sym_case_block, + aux_sym_cases_repeat1, + [53959] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2530), 1, - anon_sym_COMMA, - STATE(1162), 1, - aux_sym_print_statement_repeat1, - ACTIONS(2532), 2, + ACTIONS(2440), 1, + sym_identifier, + STATE(1158), 1, + sym_dotted_name, + STATE(1275), 1, + sym_aliased_import, + STATE(1463), 1, + sym__import_list, + [53975] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(574), 1, sym__newline, + ACTIONS(2535), 1, + anon_sym_SEMI, + STATE(142), 1, sym__semicolon, - [53841] = 4, + STATE(1213), 1, + aux_sym__simple_statements_repeat1, + [53991] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2534), 1, + ACTIONS(2512), 1, anon_sym_COMMA, STATE(1162), 1, - aux_sym_print_statement_repeat1, - ACTIONS(2536), 2, + aux_sym_global_statement_repeat1, + ACTIONS(2537), 2, sym__newline, - sym__semicolon, - [53855] = 5, + anon_sym_SEMI, + [54005] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2337), 1, - anon_sym_COLON, - ACTIONS(2538), 1, - anon_sym_RBRACE, - ACTIONS(2540), 1, - sym_type_conversion, - STATE(1479), 1, - sym_format_specifier, - [53871] = 4, + ACTIONS(2384), 1, + anon_sym_LBRACK, + ACTIONS(2539), 1, + anon_sym_LPAREN, + STATE(1384), 1, + sym_parameters, + STATE(1392), 1, + sym_type_parameters, + [54021] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2541), 1, + anon_sym_case, + STATE(531), 1, + sym_cases, + STATE(384), 2, + sym_case_block, + aux_sym_cases_repeat1, + [54035] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2169), 1, + ACTIONS(2543), 1, anon_sym_COMMA, - STATE(1160), 1, - aux_sym_assert_statement_repeat1, - ACTIONS(2542), 2, + STATE(1175), 1, + aux_sym__import_list_repeat1, + ACTIONS(2546), 2, sym__newline, - sym__semicolon, - [53885] = 2, + anon_sym_SEMI, + [54049] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2544), 4, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_RBRACE, - [53895] = 5, + ACTIONS(2541), 1, + anon_sym_case, + STATE(530), 1, + sym_cases, + STATE(384), 2, + sym_case_block, + aux_sym_cases_repeat1, + [54063] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2365), 1, - anon_sym_LBRACK, - ACTIONS(2430), 1, - anon_sym_LPAREN, + ACTIONS(2157), 1, + sym_identifier, + STATE(1094), 1, + sym_dotted_name, + STATE(1146), 1, + sym_aliased_import, STATE(1358), 1, - sym_type_parameters, - STATE(1363), 1, - sym_parameters, - [53911] = 4, + sym__import_list, + [54079] = 5, ACTIONS(3), 1, sym_comment, ACTIONS(2548), 1, - anon_sym_COLON, + anon_sym_SEMI, ACTIONS(2550), 1, - anon_sym_EQ, - ACTIONS(2546), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - [53925] = 4, + sym__newline, + STATE(146), 1, + sym__semicolon, + STATE(1165), 1, + aux_sym__simple_statements_repeat1, + [54095] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2554), 1, - anon_sym_COMMA, - STATE(1178), 1, - aux_sym_with_clause_repeat1, + ACTIONS(2330), 1, + anon_sym_EQ, + STATE(1387), 1, + sym__type_param_default, ACTIONS(2552), 2, - anon_sym_RPAREN, - anon_sym_COLON, - [53939] = 4, + anon_sym_COMMA, + anon_sym_RBRACK, + [54109] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2557), 1, - anon_sym_case, - STATE(541), 1, - sym_cases, - STATE(380), 2, - sym_case_block, - aux_sym_cases_repeat1, - [53953] = 4, + ACTIONS(2338), 1, + anon_sym_as, + ACTIONS(2554), 3, + sym__newline, + anon_sym_COMMA, + anon_sym_SEMI, + [54121] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2557), 1, - anon_sym_case, - STATE(543), 1, - sym_cases, - STATE(380), 2, - sym_case_block, - aux_sym_cases_repeat1, - [53967] = 5, + ACTIONS(2330), 1, + anon_sym_EQ, + STATE(1386), 1, + sym__type_param_default, + ACTIONS(2556), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [54135] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2337), 1, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1961), 1, anon_sym_COLON, - ACTIONS(2559), 1, - anon_sym_RBRACE, - ACTIONS(2561), 1, - sym_type_conversion, - STATE(1420), 1, - sym_format_specifier, - [53983] = 5, + STATE(601), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + [54149] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2402), 1, + ACTIONS(2334), 1, anon_sym_RPAREN, - ACTIONS(2459), 1, + ACTIONS(2440), 1, sym_identifier, - STATE(1245), 1, + STATE(1303), 1, sym_dotted_name, - STATE(1397), 1, + STATE(1364), 1, sym_aliased_import, - [53999] = 3, + [54165] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2371), 1, - anon_sym_as, - ACTIONS(2563), 3, + ACTIONS(2558), 1, + anon_sym_COMMA, + STATE(1198), 1, + aux_sym_print_statement_repeat1, + ACTIONS(2560), 2, sym__newline, + anon_sym_SEMI, + [54179] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2562), 1, anon_sym_COMMA, - sym__semicolon, - [54011] = 4, + STATE(1185), 1, + aux_sym_global_statement_repeat1, + ACTIONS(2565), 2, + sym__newline, + anon_sym_SEMI, + [54193] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2432), 1, - anon_sym_case, - STATE(560), 1, - sym_cases, - STATE(345), 2, - sym_case_block, - aux_sym_cases_repeat1, - [54025] = 2, + ACTIONS(2569), 1, + anon_sym_DOT, + STATE(1205), 1, + aux_sym_import_prefix_repeat1, + ACTIONS(2567), 2, + anon_sym_import, + sym_identifier, + [54207] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2565), 4, - anon_sym_async, - anon_sym_def, - anon_sym_class, - anon_sym_AT, - [54035] = 5, + ACTIONS(2384), 1, + anon_sym_LBRACK, + ACTIONS(2539), 1, + anon_sym_LPAREN, + STATE(1346), 1, + sym_parameters, + STATE(1389), 1, + sym_type_parameters, + [54223] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1879), 1, - anon_sym_if, - ACTIONS(1881), 1, - anon_sym_and, - ACTIONS(1883), 1, - anon_sym_or, - ACTIONS(2567), 1, - anon_sym_else, - [54051] = 2, + ACTIONS(582), 1, + sym__newline, + ACTIONS(2571), 1, + anon_sym_SEMI, + STATE(138), 1, + sym__semicolon, + STATE(1213), 1, + aux_sym__simple_statements_repeat1, + [54239] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1934), 4, + ACTIONS(598), 1, sym__newline, - anon_sym_from, - anon_sym_COMMA, + ACTIONS(2573), 1, + anon_sym_SEMI, + STATE(141), 1, sym__semicolon, - [54061] = 5, + STATE(1213), 1, + aux_sym__simple_statements_repeat1, + [54255] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2459), 1, - sym_identifier, - STATE(1161), 1, - sym_dotted_name, - STATE(1321), 1, - sym_aliased_import, - STATE(1415), 1, - sym__import_list, - [54077] = 4, + ACTIONS(2029), 1, + anon_sym_if, + ACTIONS(2031), 1, + anon_sym_and, + ACTIONS(2033), 1, + anon_sym_or, + ACTIONS(2575), 1, + sym__newline, + [54271] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2569), 1, - anon_sym_COMMA, - STATE(1189), 1, - aux_sym__import_list_repeat1, - ACTIONS(2572), 2, - sym__newline, - sym__semicolon, - [54091] = 4, + ACTIONS(2346), 1, + anon_sym_COLON, + ACTIONS(2577), 1, + anon_sym_RBRACE, + ACTIONS(2579), 1, + sym_type_conversion, + STATE(1467), 1, + sym_format_specifier, + [54287] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2574), 1, + ACTIONS(2583), 1, + anon_sym_EQ, + ACTIONS(2581), 3, + anon_sym_RPAREN, anon_sym_COMMA, - STATE(1077), 1, - aux_sym_open_sequence_match_pattern_repeat1, - ACTIONS(1703), 2, - anon_sym_if, anon_sym_COLON, - [54105] = 4, + [54299] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2485), 1, + ACTIONS(2215), 1, anon_sym_COMMA, - STATE(1138), 1, - aux_sym_global_statement_repeat1, - ACTIONS(2576), 2, + STATE(1134), 1, + aux_sym_assert_statement_repeat1, + ACTIONS(2585), 2, sym__newline, - sym__semicolon, - [54119] = 4, + anon_sym_SEMI, + [54313] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2485), 1, + ACTIONS(2215), 1, anon_sym_COMMA, - STATE(1138), 1, - aux_sym_global_statement_repeat1, - ACTIONS(2578), 2, + STATE(1134), 1, + aux_sym_assert_statement_repeat1, + ACTIONS(2587), 2, sym__newline, - sym__semicolon, - [54133] = 5, + anon_sym_SEMI, + [54327] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2459), 1, - sym_identifier, - STATE(1161), 1, - sym_dotted_name, - STATE(1321), 1, - sym_aliased_import, - STATE(1418), 1, - sym__import_list, - [54149] = 4, + ACTIONS(2589), 1, + anon_sym_COMMA, + STATE(1135), 1, + aux_sym_print_statement_repeat1, + ACTIONS(2591), 2, + sym__newline, + anon_sym_SEMI, + [54341] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(584), 1, - sym__newline, - ACTIONS(2580), 1, - sym__semicolon, - STATE(1200), 1, - aux_sym__simple_statements_repeat1, - [54162] = 4, + ACTIONS(2384), 1, + anon_sym_LBRACK, + ACTIONS(2539), 1, + anon_sym_LPAREN, + STATE(1356), 1, + sym_parameters, + STATE(1402), 1, + sym_type_parameters, + [54357] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2582), 1, - sym_identifier, - ACTIONS(2584), 1, - anon_sym_RPAREN, - STATE(1341), 1, - sym_match_keyword_pattern, - [54175] = 4, + ACTIONS(1910), 1, + anon_sym_if, + ACTIONS(1912), 1, + anon_sym_and, + ACTIONS(1914), 1, + anon_sym_or, + ACTIONS(2593), 1, + anon_sym_else, + [54373] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2586), 1, + ACTIONS(2595), 1, anon_sym_COMMA, - ACTIONS(2588), 1, - anon_sym_RBRACK, - STATE(1299), 1, - aux_sym_subscript_repeat1, - [54188] = 4, + STATE(1135), 1, + aux_sym_print_statement_repeat1, + ACTIONS(2597), 2, + sym__newline, + anon_sym_SEMI, + [54387] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1820), 1, - anon_sym_COMMA, - ACTIONS(2590), 1, - anon_sym_in, - STATE(884), 1, - aux_sym__patterns_repeat1, - [54201] = 2, + ACTIONS(1910), 1, + anon_sym_if, + ACTIONS(1912), 1, + anon_sym_and, + ACTIONS(1914), 1, + anon_sym_or, + ACTIONS(2599), 1, + anon_sym_else, + [54403] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2563), 3, - sym__newline, - anon_sym_COMMA, - sym__semicolon, - [54210] = 4, + ACTIONS(2334), 1, + anon_sym_RPAREN, + ACTIONS(2440), 1, + sym_identifier, + STATE(1303), 1, + sym_dotted_name, + STATE(1364), 1, + sym_aliased_import, + [54419] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1820), 1, - anon_sym_COMMA, - ACTIONS(2592), 1, - anon_sym_in, - STATE(884), 1, - aux_sym__patterns_repeat1, - [54223] = 4, + ACTIONS(2384), 1, + anon_sym_LBRACK, + ACTIONS(2539), 1, + anon_sym_LPAREN, + STATE(1361), 1, + sym_parameters, + STATE(1403), 1, + sym_type_parameters, + [54435] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2594), 1, - sym__semicolon, - ACTIONS(2597), 1, + ACTIONS(578), 1, sym__newline, - STATE(1200), 1, + ACTIONS(2601), 1, + anon_sym_SEMI, + STATE(140), 1, + sym__semicolon, + STATE(1213), 1, aux_sym__simple_statements_repeat1, - [54236] = 2, + [54451] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2599), 3, - anon_sym_RPAREN, + ACTIONS(2605), 1, anon_sym_COMMA, - anon_sym_COLON, - [54245] = 4, + STATE(873), 1, + aux_sym__patterns_repeat1, + ACTIONS(2603), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + [54465] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2601), 1, + ACTIONS(2607), 1, anon_sym_COMMA, - ACTIONS(2603), 1, - anon_sym_RBRACK, - STATE(1323), 1, + STATE(1076), 1, aux_sym_open_sequence_match_pattern_repeat1, - [54258] = 4, + ACTIONS(1707), 2, + anon_sym_if, + anon_sym_COLON, + [54479] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2605), 1, - anon_sym_COMMA, - ACTIONS(2607), 1, - anon_sym_RBRACK, - STATE(1299), 1, - aux_sym_subscript_repeat1, - [54271] = 4, + ACTIONS(2611), 1, + anon_sym_DOT, + STATE(1205), 1, + aux_sym_import_prefix_repeat1, + ACTIONS(2609), 2, + anon_sym_import, + sym_identifier, + [54493] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1844), 1, + ACTIONS(1910), 1, + anon_sym_if, + ACTIONS(1912), 1, + anon_sym_and, + ACTIONS(1914), 1, + anon_sym_or, + ACTIONS(2614), 1, anon_sym_COLON, - ACTIONS(2609), 1, - anon_sym_COMMA, - STATE(1295), 1, - aux_sym__parameters_repeat1, - [54284] = 4, + [54509] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2513), 1, - anon_sym_RPAREN, - ACTIONS(2611), 1, + ACTIONS(2616), 1, + anon_sym_SEMI, + ACTIONS(2618), 1, + sym__newline, + STATE(145), 1, + sym__semicolon, + STATE(1189), 1, + aux_sym__simple_statements_repeat1, + [54525] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2620), 1, anon_sym_COMMA, - STATE(1240), 1, + STATE(1175), 1, aux_sym__import_list_repeat1, - [54297] = 4, + ACTIONS(2622), 2, + sym__newline, + anon_sym_SEMI, + [54539] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2513), 1, - anon_sym_RPAREN, - ACTIONS(2613), 1, + ACTIONS(2624), 1, + anon_sym_SEMI, + ACTIONS(2626), 1, + sym__newline, + STATE(133), 1, + sym__semicolon, + STATE(1171), 1, + aux_sym__simple_statements_repeat1, + [54555] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2628), 1, anon_sym_COMMA, - STATE(1240), 1, + STATE(1175), 1, aux_sym__import_list_repeat1, - [54310] = 2, + ACTIONS(2622), 2, + sym__newline, + anon_sym_SEMI, + [54569] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1153), 3, - anon_sym_RPAREN, + ACTIONS(2512), 1, anon_sym_COMMA, - anon_sym_COLON, - [54319] = 4, + STATE(1161), 1, + aux_sym_global_statement_repeat1, + ACTIONS(2630), 2, + sym__newline, + anon_sym_SEMI, + [54583] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2615), 1, + ACTIONS(1965), 4, + sym__newline, + anon_sym_from, anon_sym_COMMA, - ACTIONS(2617), 1, - anon_sym_RBRACK, - STATE(1252), 1, - aux_sym_type_parameters_repeat1, - [54332] = 4, + anon_sym_SEMI, + [54593] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2619), 1, - sym__semicolon, - ACTIONS(2621), 1, + ACTIONS(2632), 1, + anon_sym_SEMI, + ACTIONS(2635), 1, sym__newline, - STATE(1194), 1, + STATE(147), 1, + sym__semicolon, + STATE(1213), 1, aux_sym__simple_statements_repeat1, - [54345] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2361), 1, - anon_sym_LPAREN, - ACTIONS(2623), 1, - anon_sym_COLON, - STATE(1476), 1, - sym_argument_list, - [54358] = 4, + [54609] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2625), 1, + ACTIONS(2637), 1, anon_sym_COMMA, - ACTIONS(2628), 1, - anon_sym_RBRACE, - STATE(1211), 1, - aux_sym_match_mapping_pattern_repeat1, - [54371] = 4, + ACTIONS(2639), 1, + anon_sym_COLON, + STATE(1241), 1, + aux_sym__parameters_repeat1, + [54622] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2630), 1, + ACTIONS(2641), 3, anon_sym_RPAREN, - ACTIONS(2632), 1, anon_sym_COMMA, - STATE(1213), 1, - aux_sym_match_class_pattern_repeat1, - [54384] = 4, + anon_sym_COLON, + [54631] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1719), 1, + ACTIONS(2643), 1, anon_sym_RPAREN, - ACTIONS(2634), 1, + ACTIONS(2645), 1, anon_sym_COMMA, - STATE(1296), 1, - aux_sym_match_class_pattern_repeat1, - [54397] = 4, + STATE(1312), 1, + aux_sym_argument_list_repeat1, + [54644] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2636), 1, - sym__semicolon, - ACTIONS(2638), 1, + ACTIONS(2647), 1, + anon_sym_EQ, + ACTIONS(2649), 2, sym__newline, - STATE(1231), 1, - aux_sym__simple_statements_repeat1, - [54410] = 4, + anon_sym_SEMI, + [54655] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1719), 1, + ACTIONS(1983), 1, anon_sym_RPAREN, - ACTIONS(2582), 1, - sym_identifier, - STATE(1341), 1, - sym_match_keyword_pattern, - [54423] = 4, + ACTIONS(1985), 1, + anon_sym_COMMA, + STATE(1311), 1, + aux_sym_argument_list_repeat1, + [54668] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1719), 1, + ACTIONS(1900), 1, + anon_sym_COMMA, + ACTIONS(1981), 1, + anon_sym_RPAREN, + STATE(1313), 1, + aux_sym__collection_elements_repeat1, + [54681] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2651), 1, anon_sym_RPAREN, - ACTIONS(2640), 1, + ACTIONS(2653), 1, anon_sym_COMMA, - STATE(1316), 1, - aux_sym_match_class_pattern_repeat2, - [54436] = 3, + STATE(1301), 1, + aux_sym_argument_list_repeat1, + [54694] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(972), 1, - anon_sym_except, - ACTIONS(970), 2, - anon_sym_except_STAR, - anon_sym_finally, - [54447] = 4, + ACTIONS(1814), 1, + anon_sym_COMMA, + ACTIONS(2655), 1, + anon_sym_in, + STATE(885), 1, + aux_sym__patterns_repeat1, + [54707] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2642), 1, + ACTIONS(2657), 1, anon_sym_COMMA, - ACTIONS(2644), 1, + ACTIONS(2659), 1, anon_sym_RBRACE, - STATE(1257), 1, + STATE(1328), 1, aux_sym_match_mapping_pattern_repeat1, - [54460] = 4, + [54720] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1861), 1, + ACTIONS(1814), 1, anon_sym_COMMA, - ACTIONS(1930), 1, - anon_sym_RPAREN, - STATE(1292), 1, - aux_sym__collection_elements_repeat1, - [54473] = 4, + ACTIONS(2661), 1, + anon_sym_in, + STATE(885), 1, + aux_sym__patterns_repeat1, + [54733] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2153), 1, + ACTIONS(2183), 1, anon_sym_COMMA, - ACTIONS(2157), 1, + ACTIONS(2185), 1, anon_sym_RBRACK, - STATE(1196), 1, + STATE(1315), 1, aux_sym_subscript_repeat1, - [54486] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2646), 1, - anon_sym_if, - ACTIONS(2648), 1, - anon_sym_COLON, - STATE(1481), 1, - sym_guard, - [54499] = 3, - ACTIONS(1942), 1, + [54746] = 3, + ACTIONS(1875), 1, sym_comment, - ACTIONS(2289), 1, + ACTIONS(2278), 1, anon_sym_RBRACE, - ACTIONS(2291), 2, + ACTIONS(2280), 2, anon_sym_LBRACE2, aux_sym_format_specifier_token1, - [54510] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2449), 3, - sym__newline, - anon_sym_COMMA, - sym__semicolon, - [54519] = 4, + [54757] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2361), 1, - anon_sym_LPAREN, - ACTIONS(2650), 1, - anon_sym_COLON, - STATE(1470), 1, - sym_argument_list, - [54532] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2187), 1, + ACTIONS(2173), 1, anon_sym_COMMA, - ACTIONS(2189), 1, + ACTIONS(2175), 1, anon_sym_RBRACE, - STATE(1243), 1, + STATE(1248), 1, aux_sym_dictionary_repeat1, - [54545] = 2, + [54770] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2652), 3, - sym__newline, - anon_sym_COMMA, - sym__semicolon, - [54554] = 4, + ACTIONS(2440), 1, + sym_identifier, + STATE(1303), 1, + sym_dotted_name, + STATE(1364), 1, + sym_aliased_import, + [54783] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2615), 1, + ACTIONS(2177), 1, anon_sym_COMMA, - ACTIONS(2654), 1, + ACTIONS(2181), 1, anon_sym_RBRACK, - STATE(1208), 1, - aux_sym_type_parameters_repeat1, - [54567] = 4, + STATE(1249), 1, + aux_sym_subscript_repeat1, + [54796] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2656), 1, + ACTIONS(2663), 1, anon_sym_RPAREN, - ACTIONS(2658), 1, + ACTIONS(2665), 1, anon_sym_COMMA, - STATE(1232), 1, + STATE(1236), 1, aux_sym_argument_list_repeat1, - [54580] = 4, + [54809] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2660), 1, + ACTIONS(2639), 1, anon_sym_RPAREN, - ACTIONS(2662), 1, + ACTIONS(2667), 1, anon_sym_COMMA, - STATE(1249), 1, + STATE(1254), 1, aux_sym__parameters_repeat1, - [54593] = 4, + [54822] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2664), 1, + ACTIONS(1973), 1, anon_sym_RPAREN, - ACTIONS(2666), 1, + ACTIONS(1975), 1, anon_sym_COMMA, - STATE(1232), 1, + STATE(1220), 1, aux_sym_argument_list_repeat1, - [54606] = 4, + [54835] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(586), 1, - sym__newline, - ACTIONS(2668), 1, - sym__semicolon, - STATE(1200), 1, - aux_sym__simple_statements_repeat1, - [54619] = 4, + ACTIONS(2518), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [54844] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2670), 1, + ACTIONS(1721), 1, anon_sym_RPAREN, - ACTIONS(2672), 1, - anon_sym_COMMA, - STATE(1232), 1, - aux_sym_argument_list_repeat1, - [54632] = 3, + ACTIONS(2669), 1, + sym_identifier, + STATE(1360), 1, + sym_match_keyword_pattern, + [54857] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1016), 1, - anon_sym_except, - ACTIONS(1018), 2, - anon_sym_except_STAR, - anon_sym_finally, - [54643] = 4, + ACTIONS(2346), 1, + anon_sym_COLON, + ACTIONS(2577), 1, + anon_sym_RBRACE, + STATE(1467), 1, + sym_format_specifier, + [54870] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2675), 1, + ACTIONS(2671), 1, + anon_sym_RPAREN, + ACTIONS(2673), 1, anon_sym_COMMA, - ACTIONS(2677), 1, - anon_sym_RBRACE, STATE(1235), 1, - aux_sym_dictionary_repeat1, - [54656] = 4, + aux_sym_match_class_pattern_repeat2, + [54883] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2676), 1, + anon_sym_RPAREN, + ACTIONS(2678), 1, + anon_sym_COMMA, + STATE(1301), 1, + aux_sym_argument_list_repeat1, + [54896] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2679), 1, + ACTIONS(2680), 1, anon_sym_COMMA, ACTIONS(2682), 1, - anon_sym_RBRACE, - STATE(1235), 1, - aux_sym_dictionary_repeat1, - [54669] = 4, + anon_sym_COLON, + STATE(1297), 1, + aux_sym_with_clause_repeat1, + [54909] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2137), 1, + ACTIONS(2669), 1, sym_identifier, ACTIONS(2684), 1, - anon_sym_import, - STATE(1408), 1, - sym_dotted_name, - [54682] = 4, + anon_sym_RPAREN, + STATE(1360), 1, + sym_match_keyword_pattern, + [54922] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(598), 1, - sym__newline, + ACTIONS(2684), 1, + anon_sym_RPAREN, ACTIONS(2686), 1, - sym__semicolon, - STATE(1200), 1, - aux_sym__simple_statements_repeat1, - [54695] = 4, + anon_sym_COMMA, + STATE(1235), 1, + aux_sym_match_class_pattern_repeat2, + [54935] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2554), 3, + sym__newline, + anon_sym_COMMA, + anon_sym_SEMI, + [54944] = 4, ACTIONS(3), 1, sym_comment, + ACTIONS(1846), 1, + anon_sym_COLON, ACTIONS(2688), 1, - sym__semicolon, - ACTIONS(2690), 1, + anon_sym_COMMA, + STATE(1308), 1, + aux_sym__parameters_repeat1, + [54957] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1399), 3, sym__newline, - STATE(1237), 1, - aux_sym__simple_statements_repeat1, - [54708] = 4, + anon_sym_in, + anon_sym_SEMI, + [54966] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1963), 1, - anon_sym_RPAREN, - ACTIONS(1965), 1, + ACTIONS(2690), 3, + sym__newline, anon_sym_COMMA, - STATE(1264), 1, - aux_sym_argument_list_repeat1, - [54721] = 4, + anon_sym_SEMI, + [54975] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2572), 1, - anon_sym_RPAREN, ACTIONS(2692), 1, anon_sym_COMMA, - STATE(1240), 1, - aux_sym__import_list_repeat1, - [54734] = 4, + ACTIONS(2694), 1, + anon_sym_RBRACE, + STATE(1281), 1, + aux_sym_dictionary_repeat1, + [54988] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(576), 1, + ACTIONS(1403), 3, sym__newline, - ACTIONS(2695), 1, - sym__semicolon, - STATE(1200), 1, - aux_sym__simple_statements_repeat1, - [54747] = 4, + anon_sym_in, + anon_sym_SEMI, + [54997] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2697), 1, + ACTIONS(2684), 1, + anon_sym_RPAREN, + ACTIONS(2686), 1, anon_sym_COMMA, - ACTIONS(2699), 1, - anon_sym_RBRACE, - STATE(1235), 1, - aux_sym_dictionary_repeat1, - [54760] = 4, + STATE(1266), 1, + aux_sym_match_class_pattern_repeat2, + [55010] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2696), 1, + anon_sym_RPAREN, + ACTIONS(2698), 1, + anon_sym_COMMA, + STATE(1301), 1, + aux_sym_argument_list_repeat1, + [55023] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2701), 1, + ACTIONS(2700), 1, anon_sym_COMMA, - ACTIONS(2703), 1, + ACTIONS(2702), 1, anon_sym_RBRACE, - STATE(1235), 1, + STATE(1281), 1, aux_sym_dictionary_repeat1, - [54773] = 4, + [55036] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2705), 1, - sym__semicolon, - ACTIONS(2707), 1, - sym__newline, - STATE(1241), 1, - aux_sym__simple_statements_repeat1, - [54786] = 3, + ACTIONS(2704), 1, + anon_sym_COMMA, + ACTIONS(2706), 1, + anon_sym_RBRACK, + STATE(1296), 1, + aux_sym_subscript_repeat1, + [55049] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2504), 1, - anon_sym_as, - ACTIONS(2563), 2, - anon_sym_RPAREN, + ACTIONS(2708), 1, anon_sym_COMMA, - [54797] = 4, + ACTIONS(2710), 1, + anon_sym_RBRACE, + STATE(1281), 1, + aux_sym_dictionary_repeat1, + [55062] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(582), 1, - sym__newline, - ACTIONS(2709), 1, - sym__semicolon, - STATE(1200), 1, - aux_sym__simple_statements_repeat1, - [54810] = 4, + ACTIONS(2712), 1, + anon_sym_COMMA, + ACTIONS(2714), 1, + anon_sym_RBRACK, + STATE(1296), 1, + aux_sym_subscript_repeat1, + [55075] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2711), 1, + ACTIONS(2716), 1, anon_sym_COMMA, - ACTIONS(2713), 1, + ACTIONS(2718), 1, anon_sym_RBRACE, - STATE(1235), 1, + STATE(1281), 1, aux_sym_dictionary_repeat1, - [54823] = 4, + [55088] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2715), 1, - sym__semicolon, - ACTIONS(2717), 1, + ACTIONS(2045), 1, + anon_sym_from, + ACTIONS(2049), 2, sym__newline, - STATE(1246), 1, - aux_sym__simple_statements_repeat1, - [54836] = 4, + anon_sym_SEMI, + [55099] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1844), 1, + ACTIONS(1846), 1, anon_sym_RPAREN, - ACTIONS(2719), 1, + ACTIONS(2720), 1, anon_sym_COMMA, - STATE(1275), 1, + STATE(1282), 1, aux_sym__parameters_repeat1, - [54849] = 2, + [55112] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2721), 3, - anon_sym_LPAREN, + ACTIONS(1172), 3, + anon_sym_RPAREN, + anon_sym_COMMA, anon_sym_COLON, - anon_sym_EQ, - [54858] = 4, + [55121] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1861), 1, - anon_sym_COMMA, - ACTIONS(1932), 1, - anon_sym_RPAREN, - STATE(1292), 1, - aux_sym__collection_elements_repeat1, - [54871] = 4, + ACTIONS(974), 1, + anon_sym_except, + ACTIONS(976), 2, + anon_sym_except_STAR, + anon_sym_finally, + [55132] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2723), 1, + ACTIONS(2722), 1, anon_sym_COMMA, - ACTIONS(2726), 1, + ACTIONS(2724), 1, anon_sym_RBRACK, - STATE(1252), 1, - aux_sym_type_parameters_repeat1, - [54884] = 3, - ACTIONS(1942), 1, + STATE(1335), 1, + aux_sym_open_sequence_match_pattern_repeat1, + [55145] = 4, + ACTIONS(3), 1, sym_comment, - ACTIONS(2248), 1, - anon_sym_RBRACE, - ACTIONS(2250), 2, - anon_sym_LBRACE2, - aux_sym_format_specifier_token1, - [54895] = 4, + ACTIONS(2376), 1, + anon_sym_RPAREN, + ACTIONS(2726), 1, + anon_sym_COMMA, + STATE(1116), 1, + aux_sym__collection_elements_repeat1, + [55158] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(574), 1, - sym__newline, + ACTIONS(1814), 1, + anon_sym_COMMA, ACTIONS(2728), 1, - sym__semicolon, - STATE(1200), 1, - aux_sym__simple_statements_repeat1, - [54908] = 4, + anon_sym_in, + STATE(885), 1, + aux_sym__patterns_repeat1, + [55171] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2669), 1, + sym_identifier, + ACTIONS(2730), 1, + anon_sym_RPAREN, + STATE(1360), 1, + sym_match_keyword_pattern, + [55184] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1993), 1, + ACTIONS(1967), 1, anon_sym_RPAREN, - ACTIONS(1995), 1, + ACTIONS(1969), 1, anon_sym_COMMA, - STATE(1277), 1, + STATE(1284), 1, aux_sym_argument_list_repeat1, - [54921] = 4, + [55197] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2730), 1, - anon_sym_RPAREN, ACTIONS(2732), 1, + anon_sym_RPAREN, + ACTIONS(2734), 1, anon_sym_COMMA, - STATE(1279), 1, + STATE(1286), 1, aux_sym_argument_list_repeat1, - [54934] = 4, + [55210] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1832), 1, - anon_sym_RBRACE, - ACTIONS(2734), 1, + ACTIONS(1814), 1, anon_sym_COMMA, - STATE(1211), 1, - aux_sym_match_mapping_pattern_repeat1, - [54947] = 4, + ACTIONS(2736), 1, + anon_sym_in, + STATE(885), 1, + aux_sym__patterns_repeat1, + [55223] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2193), 1, + ACTIONS(2223), 1, anon_sym_COMMA, - ACTIONS(2195), 1, + ACTIONS(2225), 1, anon_sym_RBRACK, - STATE(1283), 1, + STATE(1289), 1, aux_sym_subscript_repeat1, - [54960] = 4, + [55236] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2736), 1, - sym_identifier, + ACTIONS(2211), 1, + anon_sym_COMMA, + ACTIONS(2213), 1, + anon_sym_RBRACE, + STATE(1250), 1, + aux_sym_dictionary_repeat1, + [55249] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2730), 1, + anon_sym_RPAREN, ACTIONS(2738), 1, - sym_match_wildcard_pattern, - STATE(1110), 1, - sym_match_capture_pattern, - [54973] = 4, + anon_sym_COMMA, + STATE(1235), 1, + aux_sym_match_class_pattern_repeat2, + [55262] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2337), 1, + ACTIONS(2346), 1, anon_sym_COLON, - ACTIONS(2559), 1, + ACTIONS(2476), 1, anon_sym_RBRACE, - STATE(1420), 1, + STATE(1486), 1, sym_format_specifier, - [54986] = 4, + [55275] = 4, ACTIONS(3), 1, sym_comment, + ACTIONS(2669), 1, + sym_identifier, ACTIONS(2740), 1, - sym__semicolon, - ACTIONS(2742), 1, - sym__newline, - STATE(1254), 1, - aux_sym__simple_statements_repeat1, - [54999] = 4, + anon_sym_RPAREN, + STATE(1360), 1, + sym_match_keyword_pattern, + [55288] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1889), 1, - anon_sym_DOT, - ACTIONS(1893), 1, - anon_sym_COLON, - STATE(906), 1, - aux_sym_match_value_pattern_repeat1, - [55012] = 3, + ACTIONS(1717), 1, + anon_sym_RPAREN, + ACTIONS(2742), 1, + anon_sym_COMMA, + STATE(1285), 1, + aux_sym_match_class_pattern_repeat1, + [55301] = 4, ACTIONS(3), 1, sym_comment, + ACTIONS(2380), 1, + anon_sym_LPAREN, ACTIONS(2744), 1, - anon_sym_EQ, - ACTIONS(2746), 2, - sym__newline, - sym__semicolon, - [55023] = 4, + anon_sym_COLON, + STATE(1474), 1, + sym_argument_list, + [55314] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2748), 1, + ACTIONS(1717), 1, anon_sym_RPAREN, - ACTIONS(2750), 1, - anon_sym_COMMA, - STATE(1232), 1, - aux_sym_argument_list_repeat1, - [55036] = 3, + ACTIONS(2669), 1, + sym_identifier, + STATE(1360), 1, + sym_match_keyword_pattern, + [55327] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(968), 1, - anon_sym_except, - ACTIONS(966), 2, - anon_sym_except_STAR, - anon_sym_finally, - [55047] = 4, + ACTIONS(1717), 1, + anon_sym_RPAREN, + ACTIONS(2746), 1, + anon_sym_COMMA, + STATE(1235), 1, + aux_sym_match_class_pattern_repeat2, + [55340] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2752), 1, + ACTIONS(2748), 1, anon_sym_COMMA, - ACTIONS(2754), 1, - anon_sym_COLON, - STATE(1178), 1, - aux_sym_with_clause_repeat1, - [55060] = 3, + ACTIONS(2751), 1, + anon_sym_RBRACE, + STATE(1273), 1, + aux_sym_match_mapping_pattern_repeat1, + [55353] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2756), 1, - anon_sym_COLON, - ACTIONS(2546), 2, + ACTIONS(982), 1, anon_sym_RPAREN, + ACTIONS(2753), 1, anon_sym_COMMA, - [55071] = 4, + STATE(1163), 1, + aux_sym_with_clause_repeat1, + [55366] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2758), 1, + ACTIONS(2340), 1, anon_sym_RPAREN, - ACTIONS(2760), 1, + ACTIONS(2504), 1, anon_sym_COMMA, - STATE(1310), 1, - aux_sym_with_clause_repeat1, - [55084] = 3, - ACTIONS(1942), 1, - sym_comment, - ACTIONS(2762), 1, - anon_sym_RBRACE, - ACTIONS(2764), 2, - anon_sym_LBRACE2, - aux_sym_format_specifier_token1, - [55095] = 2, + STATE(1326), 1, + aux_sym__import_list_repeat1, + [55379] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2434), 3, + ACTIONS(2755), 3, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, - [55104] = 4, + [55388] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2766), 1, + ACTIONS(2757), 1, anon_sym_COMMA, - ACTIONS(2768), 1, - anon_sym_RBRACK, - STATE(1299), 1, - aux_sym_subscript_repeat1, - [55117] = 4, + ACTIONS(2759), 1, + anon_sym_RBRACE, + STATE(1281), 1, + aux_sym_dictionary_repeat1, + [55401] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2761), 3, + anon_sym_LPAREN, + anon_sym_COLON, + anon_sym_EQ, + [55410] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2770), 1, + ACTIONS(1900), 1, anon_sym_COMMA, - ACTIONS(2772), 1, - anon_sym_RBRACK, - STATE(1299), 1, - aux_sym_subscript_repeat1, - [55130] = 4, + ACTIONS(1989), 1, + anon_sym_RPAREN, + STATE(1313), 1, + aux_sym__collection_elements_repeat1, + [55423] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2774), 1, + ACTIONS(1881), 1, anon_sym_RPAREN, - ACTIONS(2776), 1, + ACTIONS(1900), 1, anon_sym_COMMA, - STATE(1232), 1, - aux_sym_argument_list_repeat1, - [55143] = 4, + STATE(1313), 1, + aux_sym__collection_elements_repeat1, + [55436] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2778), 1, - anon_sym_RPAREN, - ACTIONS(2780), 1, + ACTIONS(2763), 1, anon_sym_COMMA, - STATE(1232), 1, - aux_sym_argument_list_repeat1, - [55156] = 4, + ACTIONS(2766), 1, + anon_sym_RBRACE, + STATE(1281), 1, + aux_sym_dictionary_repeat1, + [55449] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2599), 1, + ACTIONS(2755), 1, anon_sym_RPAREN, - ACTIONS(2782), 1, + ACTIONS(2768), 1, anon_sym_COMMA, - STATE(1275), 1, + STATE(1282), 1, aux_sym__parameters_repeat1, - [55169] = 4, + [55462] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1820), 1, + ACTIONS(2771), 1, anon_sym_COMMA, - ACTIONS(2785), 1, - anon_sym_in, - STATE(884), 1, - aux_sym__patterns_repeat1, - [55182] = 4, + ACTIONS(2774), 1, + anon_sym_RBRACK, + STATE(1283), 1, + aux_sym_type_parameters_repeat1, + [55475] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2787), 1, + ACTIONS(2776), 1, anon_sym_RPAREN, - ACTIONS(2789), 1, + ACTIONS(2778), 1, anon_sym_COMMA, - STATE(1232), 1, + STATE(1301), 1, aux_sym_argument_list_repeat1, - [55195] = 4, + [55488] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2337), 1, - anon_sym_COLON, - ACTIONS(2538), 1, - anon_sym_RBRACE, - STATE(1479), 1, - sym_format_specifier, - [55208] = 4, + ACTIONS(2780), 1, + anon_sym_RPAREN, + ACTIONS(2782), 1, + anon_sym_COMMA, + STATE(1285), 1, + aux_sym_match_class_pattern_repeat1, + [55501] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2791), 1, + ACTIONS(2785), 1, anon_sym_RPAREN, - ACTIONS(2793), 1, + ACTIONS(2787), 1, anon_sym_COMMA, - STATE(1232), 1, + STATE(1301), 1, aux_sym_argument_list_repeat1, - [55221] = 4, + [55514] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2795), 1, + ACTIONS(2789), 1, anon_sym_RPAREN, - ACTIONS(2797), 1, + ACTIONS(2791), 1, anon_sym_COMMA, - STATE(1232), 1, + STATE(1301), 1, aux_sym_argument_list_repeat1, - [55234] = 2, + [55527] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2799), 3, - anon_sym_RPAREN, + ACTIONS(2793), 1, anon_sym_COMMA, - anon_sym_COLON, - [55243] = 4, + ACTIONS(2795), 1, + anon_sym_RBRACE, + STATE(1281), 1, + aux_sym_dictionary_repeat1, + [55540] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2801), 1, + ACTIONS(2797), 1, anon_sym_COMMA, - ACTIONS(2803), 1, + ACTIONS(2799), 1, anon_sym_RBRACK, - STATE(1299), 1, + STATE(1296), 1, aux_sym_subscript_repeat1, - [55256] = 4, + [55553] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2805), 1, + ACTIONS(2801), 1, anon_sym_COMMA, - ACTIONS(2807), 1, + ACTIONS(2803), 1, anon_sym_RBRACK, - STATE(1299), 1, + STATE(1296), 1, aux_sym_subscript_repeat1, - [55269] = 4, + [55566] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2337), 1, + ACTIONS(2346), 1, anon_sym_COLON, - ACTIONS(2809), 1, + ACTIONS(2805), 1, anon_sym_RBRACE, - STATE(1409), 1, + STATE(1471), 1, sym_format_specifier, - [55282] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2811), 1, - anon_sym_RPAREN, - ACTIONS(2813), 1, - anon_sym_COMMA, - STATE(1232), 1, - aux_sym_argument_list_repeat1, - [55295] = 4, + [55579] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2646), 1, + ACTIONS(2807), 1, anon_sym_if, - ACTIONS(2815), 1, + ACTIONS(2809), 1, anon_sym_COLON, - STATE(1501), 1, + STATE(1488), 1, sym_guard, - [55308] = 3, + [55592] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2817), 1, + ACTIONS(2546), 1, + anon_sym_RPAREN, + ACTIONS(2811), 1, anon_sym_COMMA, - ACTIONS(2819), 2, - anon_sym_if, - anon_sym_COLON, - [55319] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2067), 1, - anon_sym_from, - ACTIONS(2073), 2, - sym__newline, - sym__semicolon, - [55330] = 4, + STATE(1293), 1, + aux_sym__import_list_repeat1, + [55605] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2377), 1, - anon_sym_RPAREN, - ACTIONS(2821), 1, + ACTIONS(2231), 1, anon_sym_COMMA, - STATE(1114), 1, - aux_sym__collection_elements_repeat1, - [55343] = 4, + ACTIONS(2233), 1, + anon_sym_RBRACE, + STATE(1288), 1, + aux_sym_dictionary_repeat1, + [55618] = 4, ACTIONS(3), 1, sym_comment, ACTIONS(1721), 1, anon_sym_RPAREN, - ACTIONS(2823), 1, + ACTIONS(2814), 1, anon_sym_COMMA, - STATE(1325), 1, + STATE(1239), 1, aux_sym_match_class_pattern_repeat2, - [55356] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1399), 3, - sym__newline, - anon_sym_in, - sym__semicolon, - [55365] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2377), 1, - anon_sym_RPAREN, - ACTIONS(2825), 1, - anon_sym_COMMA, - STATE(1114), 1, - aux_sym__collection_elements_repeat1, - [55378] = 4, + [55631] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1820), 1, + ACTIONS(2816), 1, anon_sym_COMMA, - ACTIONS(2827), 1, - anon_sym_in, - STATE(884), 1, - aux_sym__patterns_repeat1, - [55391] = 4, + ACTIONS(2819), 1, + anon_sym_RBRACK, + STATE(1296), 1, + aux_sym_subscript_repeat1, + [55644] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2207), 1, + ACTIONS(2680), 1, anon_sym_COMMA, - ACTIONS(2209), 1, - anon_sym_RBRACK, - STATE(1271), 1, - aux_sym_subscript_repeat1, - [55404] = 4, + ACTIONS(2821), 1, + anon_sym_COLON, + STATE(1163), 1, + aux_sym_with_clause_repeat1, + [55657] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2599), 1, + ACTIONS(2823), 1, anon_sym_COLON, - ACTIONS(2829), 1, + ACTIONS(2464), 2, + anon_sym_RPAREN, anon_sym_COMMA, - STATE(1295), 1, - aux_sym__parameters_repeat1, - [55417] = 4, + [55668] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2832), 1, - anon_sym_RPAREN, - ACTIONS(2834), 1, + ACTIONS(2825), 1, anon_sym_COMMA, - STATE(1296), 1, - aux_sym_match_class_pattern_repeat1, - [55430] = 4, + ACTIONS(2827), 1, + anon_sym_RBRACK, + STATE(1345), 1, + aux_sym_type_parameters_repeat1, + [55681] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2837), 1, + ACTIONS(2829), 1, anon_sym_RPAREN, - ACTIONS(2839), 1, + ACTIONS(2831), 1, anon_sym_COMMA, STATE(1274), 1, - aux_sym_argument_list_repeat1, - [55443] = 4, + aux_sym_with_clause_repeat1, + [55694] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1975), 1, + ACTIONS(2833), 1, anon_sym_RPAREN, - ACTIONS(1977), 1, + ACTIONS(2835), 1, anon_sym_COMMA, - STATE(1285), 1, + STATE(1301), 1, aux_sym_argument_list_repeat1, - [55456] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2841), 1, - anon_sym_COMMA, - ACTIONS(2844), 1, - anon_sym_RBRACK, - STATE(1299), 1, - aux_sym_subscript_repeat1, - [55469] = 4, + [55707] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2846), 1, + ACTIONS(2565), 3, + sym__newline, anon_sym_COMMA, - ACTIONS(2848), 1, - anon_sym_RBRACE, - STATE(1235), 1, - aux_sym_dictionary_repeat1, - [55482] = 4, + anon_sym_SEMI, + [55716] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1861), 1, - anon_sym_COMMA, - ACTIONS(2850), 1, + ACTIONS(2506), 1, + anon_sym_as, + ACTIONS(2554), 2, anon_sym_RPAREN, - STATE(1289), 1, - aux_sym__collection_elements_repeat1, - [55495] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2852), 1, - anon_sym_COMMA, - ACTIONS(2854), 1, - anon_sym_RBRACE, - STATE(1235), 1, - aux_sym_dictionary_repeat1, - [55508] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1861), 1, anon_sym_COMMA, - ACTIONS(2856), 1, - anon_sym_RPAREN, - STATE(1115), 1, - aux_sym__collection_elements_repeat1, - [55521] = 3, - ACTIONS(3), 1, + [55727] = 3, + ACTIONS(1875), 1, sym_comment, - ACTIONS(987), 1, - anon_sym_except, - ACTIONS(985), 2, - anon_sym_except_STAR, - anon_sym_finally, - [55532] = 4, + ACTIONS(2245), 1, + anon_sym_RBRACE, + ACTIONS(2247), 2, + anon_sym_LBRACE2, + aux_sym_format_specifier_token1, + [55738] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1820), 1, + ACTIONS(1814), 1, anon_sym_COMMA, - ACTIONS(2858), 1, + ACTIONS(2838), 1, anon_sym_in, - STATE(884), 1, + STATE(885), 1, aux_sym__patterns_repeat1, - [55545] = 4, + [55751] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1820), 1, - anon_sym_COMMA, - ACTIONS(2860), 1, + ACTIONS(2840), 1, anon_sym_in, - STATE(884), 1, - aux_sym__patterns_repeat1, - [55558] = 3, - ACTIONS(1942), 1, + ACTIONS(2842), 2, + sym__newline, + anon_sym_SEMI, + [55762] = 4, + ACTIONS(3), 1, sym_comment, - ACTIONS(2277), 1, - anon_sym_RBRACE, - ACTIONS(2279), 2, - anon_sym_LBRACE2, - aux_sym_format_specifier_token1, - [55569] = 2, + ACTIONS(2384), 1, + anon_sym_LBRACK, + ACTIONS(2844), 1, + anon_sym_EQ, + STATE(1497), 1, + sym_type_parameters, + [55775] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2552), 3, - anon_sym_RPAREN, - anon_sym_COMMA, + ACTIONS(2755), 1, anon_sym_COLON, - [55578] = 4, + ACTIONS(2846), 1, + anon_sym_COMMA, + STATE(1308), 1, + aux_sym__parameters_repeat1, + [55788] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(588), 1, - sym__newline, - ACTIONS(2862), 1, - sym__semicolon, - STATE(1200), 1, - aux_sym__simple_statements_repeat1, - [55591] = 4, + ACTIONS(2380), 1, + anon_sym_LPAREN, + ACTIONS(2849), 1, + anon_sym_COLON, + STATE(1477), 1, + sym_argument_list, + [55801] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(995), 1, + ACTIONS(2581), 3, anon_sym_RPAREN, - ACTIONS(2864), 1, anon_sym_COMMA, - STATE(1178), 1, - aux_sym_with_clause_repeat1, - [55604] = 4, + anon_sym_COLON, + [55810] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2211), 1, + ACTIONS(2851), 1, + anon_sym_RPAREN, + ACTIONS(2853), 1, anon_sym_COMMA, - ACTIONS(2213), 1, - anon_sym_RBRACE, - STATE(1302), 1, - aux_sym_dictionary_repeat1, - [55617] = 4, + STATE(1301), 1, + aux_sym_argument_list_repeat1, + [55823] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2235), 1, - sym_identifier, - STATE(1183), 1, - sym_dotted_name, - STATE(1198), 1, - sym_aliased_import, - [55630] = 4, + ACTIONS(2855), 1, + anon_sym_RPAREN, + ACTIONS(2857), 1, + anon_sym_COMMA, + STATE(1301), 1, + aux_sym_argument_list_repeat1, + [55836] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1861), 1, - anon_sym_COMMA, - ACTIONS(1905), 1, + ACTIONS(2376), 1, anon_sym_RPAREN, - STATE(1292), 1, + ACTIONS(2859), 1, + anon_sym_COMMA, + STATE(1116), 1, aux_sym__collection_elements_repeat1, - [55643] = 4, + [55849] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1721), 1, + ACTIONS(2861), 1, anon_sym_RPAREN, - ACTIONS(2582), 1, - sym_identifier, - STATE(1341), 1, - sym_match_keyword_pattern, - [55656] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2337), 1, - anon_sym_COLON, - ACTIONS(2866), 1, - anon_sym_RBRACE, - STATE(1515), 1, - sym_format_specifier, - [55669] = 4, + ACTIONS(2863), 1, + anon_sym_COMMA, + STATE(1301), 1, + aux_sym_argument_list_repeat1, + [55862] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2868), 1, - anon_sym_RPAREN, - ACTIONS(2870), 1, + ACTIONS(2865), 1, anon_sym_COMMA, - STATE(1316), 1, - aux_sym_match_class_pattern_repeat2, - [55682] = 4, + ACTIONS(2867), 1, + anon_sym_RBRACK, + STATE(1296), 1, + aux_sym_subscript_repeat1, + [55875] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2459), 1, - sym_identifier, - STATE(1245), 1, - sym_dotted_name, - STATE(1397), 1, - sym_aliased_import, - [55695] = 2, + ACTIONS(1001), 1, + anon_sym_except, + ACTIONS(999), 2, + anon_sym_except_STAR, + anon_sym_finally, + [55886] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1403), 3, - sym__newline, - anon_sym_in, - sym__semicolon, - [55704] = 4, - ACTIONS(3), 1, + ACTIONS(2869), 1, + anon_sym_COMMA, + ACTIONS(2871), 1, + anon_sym_RBRACK, + STATE(1296), 1, + aux_sym_subscript_repeat1, + [55899] = 3, + ACTIONS(1875), 1, sym_comment, ACTIONS(2873), 1, - sym__semicolon, - ACTIONS(2875), 1, - sym__newline, - STATE(1309), 1, - aux_sym__simple_statements_repeat1, - [55717] = 4, + anon_sym_RBRACE, + ACTIONS(2875), 2, + anon_sym_LBRACE2, + aux_sym_format_specifier_token1, + [55910] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2752), 1, - anon_sym_COMMA, - ACTIONS(2877), 1, + ACTIONS(2346), 1, anon_sym_COLON, - STATE(1266), 1, - aux_sym_with_clause_repeat1, - [55730] = 4, + ACTIONS(2877), 1, + anon_sym_RBRACE, + STATE(1437), 1, + sym_format_specifier, + [55923] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2373), 1, - anon_sym_RPAREN, - ACTIONS(2502), 1, + ACTIONS(1900), 1, anon_sym_COMMA, - STATE(1206), 1, - aux_sym__import_list_repeat1, - [55743] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2879), 3, - anon_sym_LPAREN, - anon_sym_COLON, - anon_sym_EQ, - [55752] = 4, + ACTIONS(2879), 1, + anon_sym_RPAREN, + STATE(1258), 1, + aux_sym__collection_elements_repeat1, + [55936] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1711), 1, - anon_sym_RBRACK, - ACTIONS(2881), 1, + ACTIONS(1900), 1, anon_sym_COMMA, - STATE(1077), 1, - aux_sym_open_sequence_match_pattern_repeat1, - [55765] = 3, + ACTIONS(2881), 1, + anon_sym_RPAREN, + STATE(1120), 1, + aux_sym__collection_elements_repeat1, + [55949] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(989), 1, - anon_sym_except, - ACTIONS(991), 2, - anon_sym_except_STAR, - anon_sym_finally, - [55776] = 4, + ACTIONS(2157), 1, + sym_identifier, + STATE(1180), 1, + sym_dotted_name, + STATE(1240), 1, + sym_aliased_import, + [55962] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2584), 1, - anon_sym_RPAREN, ACTIONS(2883), 1, - anon_sym_COMMA, - STATE(1316), 1, - aux_sym_match_class_pattern_repeat2, - [55789] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2584), 1, anon_sym_RPAREN, - ACTIONS(2883), 1, + ACTIONS(2885), 1, anon_sym_COMMA, - STATE(1331), 1, + STATE(1272), 1, aux_sym_match_class_pattern_repeat2, - [55802] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2219), 1, - anon_sym_COMMA, - ACTIONS(2221), 1, - anon_sym_RBRACE, - STATE(1242), 1, - aux_sym_dictionary_repeat1, - [55815] = 4, + [55975] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2885), 1, + ACTIONS(2883), 1, anon_sym_RPAREN, ACTIONS(2887), 1, anon_sym_COMMA, - STATE(1230), 1, - aux_sym_argument_list_repeat1, - [55828] = 4, + STATE(1269), 1, + aux_sym_match_class_pattern_repeat1, + [55988] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2582), 1, - sym_identifier, + ACTIONS(1814), 1, + anon_sym_COMMA, ACTIONS(2889), 1, - anon_sym_RPAREN, - STATE(1341), 1, - sym_match_keyword_pattern, - [55841] = 4, + anon_sym_in, + STATE(885), 1, + aux_sym__patterns_repeat1, + [56001] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2630), 1, + ACTIONS(2622), 1, anon_sym_RPAREN, ACTIONS(2891), 1, anon_sym_COMMA, - STATE(1216), 1, - aux_sym_match_class_pattern_repeat2, - [55854] = 4, + STATE(1293), 1, + aux_sym__import_list_repeat1, + [56014] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2889), 1, + ACTIONS(2622), 1, anon_sym_RPAREN, ACTIONS(2893), 1, anon_sym_COMMA, - STATE(1316), 1, - aux_sym_match_class_pattern_repeat2, - [55867] = 3, - ACTIONS(1942), 1, + STATE(1293), 1, + aux_sym__import_list_repeat1, + [56027] = 4, + ACTIONS(3), 1, sym_comment, - ACTIONS(2271), 1, + ACTIONS(1838), 1, anon_sym_RBRACE, - ACTIONS(2273), 2, - anon_sym_LBRACE2, - aux_sym_format_specifier_token1, - [55878] = 2, + ACTIONS(2895), 1, + anon_sym_COMMA, + STATE(1273), 1, + aux_sym_match_mapping_pattern_repeat1, + [56040] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2546), 3, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_COLON, - [55887] = 4, + ACTIONS(980), 1, + anon_sym_except, + ACTIONS(978), 2, + anon_sym_except_STAR, + anon_sym_finally, + [56051] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2660), 1, - anon_sym_COLON, - ACTIONS(2895), 1, - anon_sym_COMMA, - STATE(1204), 1, - aux_sym__parameters_repeat1, - [55900] = 3, + ACTIONS(1013), 1, + anon_sym_except, + ACTIONS(1011), 2, + anon_sym_except_STAR, + anon_sym_finally, + [56062] = 4, ACTIONS(3), 1, sym_comment, + ACTIONS(2163), 1, + sym_identifier, ACTIONS(2897), 1, - anon_sym_in, - ACTIONS(2899), 2, - sym__newline, - sym__semicolon, - [55911] = 4, + anon_sym_import, + STATE(1465), 1, + sym_dotted_name, + [56075] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2365), 1, - anon_sym_LBRACK, + ACTIONS(1005), 1, + anon_sym_except, + ACTIONS(1007), 2, + anon_sym_except_STAR, + anon_sym_finally, + [56086] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1894), 1, + anon_sym_DOT, + ACTIONS(1898), 1, + anon_sym_COLON, + STATE(907), 1, + aux_sym_match_value_pattern_repeat1, + [56099] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2899), 1, + sym_identifier, ACTIONS(2901), 1, - anon_sym_EQ, - STATE(1492), 1, - sym_type_parameters, - [55924] = 4, + sym_match_wildcard_pattern, + STATE(1097), 1, + sym_match_capture_pattern, + [56112] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1711), 1, - anon_sym_RPAREN, + ACTIONS(1713), 1, + anon_sym_RBRACK, ACTIONS(2903), 1, anon_sym_COMMA, - STATE(1077), 1, + STATE(1076), 1, aux_sym_open_sequence_match_pattern_repeat1, - [55937] = 4, + [56125] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2582), 1, - sym_identifier, + ACTIONS(2807), 1, + anon_sym_if, ACTIONS(2905), 1, - anon_sym_RPAREN, - STATE(1341), 1, - sym_match_keyword_pattern, - [55950] = 3, + anon_sym_COLON, + STATE(1420), 1, + sym_guard, + [56138] = 3, + ACTIONS(1875), 1, + sym_comment, + ACTIONS(2265), 1, + anon_sym_RBRACE, + ACTIONS(2267), 2, + anon_sym_LBRACE2, + aux_sym_format_specifier_token1, + [56149] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2550), 1, - anon_sym_EQ, - ACTIONS(2546), 2, + ACTIONS(2907), 1, anon_sym_COMMA, + ACTIONS(2909), 2, + anon_sym_if, anon_sym_COLON, - [55961] = 2, + [56160] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2907), 3, + ACTIONS(2464), 3, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, - [55970] = 2, + [56169] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2868), 2, + ACTIONS(1713), 1, anon_sym_RPAREN, + ACTIONS(2911), 1, anon_sym_COMMA, - [55978] = 2, - ACTIONS(3), 1, + STATE(1076), 1, + aux_sym_open_sequence_match_pattern_repeat1, + [56182] = 3, + ACTIONS(1875), 1, sym_comment, - ACTIONS(2909), 2, - sym__newline, - sym__semicolon, - [55986] = 2, + ACTIONS(2303), 1, + anon_sym_RBRACE, + ACTIONS(2305), 2, + anon_sym_LBRACE2, + aux_sym_format_specifier_token1, + [56193] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2911), 2, + ACTIONS(2468), 1, + anon_sym_EQ, + ACTIONS(2464), 2, anon_sym_COMMA, - anon_sym_RBRACK, - [55994] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2913), 1, anon_sym_COLON, - ACTIONS(2915), 1, - anon_sym_DASH_GT, - [56004] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2917), 2, - sym__newline, - sym__semicolon, - [56012] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2919), 2, - sym__newline, - sym__semicolon, - [56020] = 2, + [56204] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2546), 2, + ACTIONS(2913), 3, + anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, - [56028] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1926), 2, - sym__newline, - sym__semicolon, - [56036] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2921), 2, - sym__newline, - sym__semicolon, - [56044] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2923), 2, - sym__newline, - sym__semicolon, - [56052] = 2, + [56213] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2597), 2, - sym__newline, - sym__semicolon, - [56060] = 2, + ACTIONS(2915), 3, + anon_sym_LPAREN, + anon_sym_COLON, + anon_sym_EQ, + [56222] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2925), 2, + ACTIONS(2825), 1, anon_sym_COMMA, + ACTIONS(2917), 1, anon_sym_RBRACK, - [56068] = 3, + STATE(1283), 1, + aux_sym_type_parameters_repeat1, + [56235] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2582), 1, - sym_identifier, - STATE(1341), 1, - sym_match_keyword_pattern, - [56078] = 3, + ACTIONS(2919), 1, + anon_sym_COLON, + ACTIONS(2921), 1, + anon_sym_DASH_GT, + [56245] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2430), 1, - anon_sym_LPAREN, - STATE(1372), 1, - sym_parameters, - [56088] = 2, + ACTIONS(2923), 1, + sym_integer, + ACTIONS(2925), 1, + sym_float, + [56255] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2927), 2, - anon_sym_COMMA, - anon_sym_RBRACE, - [56096] = 3, + ACTIONS(1951), 2, + sym__newline, + anon_sym_SEMI, + [56263] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2430), 1, - anon_sym_LPAREN, - STATE(1375), 1, - sym_parameters, - [56106] = 3, + ACTIONS(2464), 2, + anon_sym_COMMA, + anon_sym_COLON, + [56271] = 3, ACTIONS(3), 1, sym_comment, + ACTIONS(2927), 1, + anon_sym_COLON, ACTIONS(2929), 1, - sym_identifier, - STATE(1367), 1, - sym_match_capture_pattern, - [56116] = 3, + anon_sym_DASH_GT, + [56281] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2430), 1, - anon_sym_LPAREN, - STATE(1344), 1, - sym_parameters, - [56126] = 3, + ACTIONS(2931), 2, + anon_sym_COLON, + anon_sym_DASH_GT, + [56289] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1842), 1, - anon_sym_RBRACE, - ACTIONS(2931), 1, + ACTIONS(2933), 2, anon_sym_COMMA, - [56136] = 3, + anon_sym_RBRACE, + [56297] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2069), 1, + ACTIONS(2935), 2, anon_sym_COMMA, - STATE(1112), 1, - aux_sym_expression_list_repeat1, - [56146] = 2, + anon_sym_RBRACE, + [56305] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2145), 2, - sym__newline, - sym__semicolon, - [56154] = 2, + ACTIONS(2937), 1, + sym_integer, + ACTIONS(2939), 1, + sym_float, + [56315] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2628), 2, + ACTIONS(2941), 2, anon_sym_COMMA, - anon_sym_RBRACE, - [56162] = 3, + anon_sym_RBRACK, + [56323] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2933), 1, + ACTIONS(2943), 1, anon_sym_COLON, - ACTIONS(2935), 1, + ACTIONS(2945), 1, anon_sym_DASH_GT, - [56172] = 2, + [56333] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2937), 2, + ACTIONS(2947), 2, anon_sym_RPAREN, anon_sym_COMMA, - [56180] = 3, + [56341] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1889), 1, - anon_sym_DOT, - STATE(1262), 1, - aux_sym_match_value_pattern_repeat1, - [56190] = 3, + ACTIONS(2949), 2, + sym__newline, + anon_sym_SEMI, + [56349] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1928), 1, + ACTIONS(2951), 1, anon_sym_COMMA, - STATE(985), 1, - aux_sym_expression_list_repeat1, - [56200] = 2, + STATE(1204), 1, + aux_sym_open_sequence_match_pattern_repeat1, + [56359] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2939), 2, + ACTIONS(2671), 2, + anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_RBRACE, - [56208] = 3, + [56367] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2644), 1, - anon_sym_RBRACE, - ACTIONS(2941), 1, - anon_sym_COMMA, - [56218] = 2, + ACTIONS(2953), 1, + anon_sym_COLON, + ACTIONS(2955), 1, + anon_sym_DASH_GT, + [56377] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2943), 2, + ACTIONS(2957), 2, sym__newline, - sym__semicolon, - [56226] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2430), 1, - anon_sym_LPAREN, - STATE(1376), 1, - sym_parameters, - [56236] = 3, + anon_sym_SEMI, + [56385] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2945), 1, - anon_sym_COLON, - ACTIONS(2947), 1, - anon_sym_DASH_GT, - [56246] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2949), 1, - anon_sym_COLON, - ACTIONS(2951), 1, - anon_sym_DASH_GT, - [56256] = 2, + ACTIONS(2392), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [56393] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2420), 2, + ACTIONS(2554), 2, anon_sym_RPAREN, anon_sym_COMMA, - [56264] = 2, + [56401] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2953), 2, - anon_sym_COLON, - anon_sym_DASH_GT, - [56272] = 3, + ACTIONS(1832), 1, + anon_sym_RBRACE, + ACTIONS(2959), 1, + anon_sym_COMMA, + [56411] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2955), 1, - anon_sym_COLON, - ACTIONS(2957), 1, - anon_sym_DASH_GT, - [56282] = 3, + ACTIONS(2961), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [56419] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2959), 1, - anon_sym_COLON, - ACTIONS(2961), 1, - anon_sym_DASH_GT, - [56292] = 3, + ACTIONS(2751), 2, + anon_sym_COMMA, + anon_sym_RBRACE, + [56427] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(2963), 1, anon_sym_COLON, ACTIONS(2965), 1, anon_sym_DASH_GT, - [56302] = 3, + [56437] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2282), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [56445] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(2967), 1, anon_sym_COLON, ACTIONS(2969), 1, anon_sym_DASH_GT, - [56312] = 2, + [56455] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2971), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - [56320] = 2, + ACTIONS(2971), 1, + anon_sym_COLON, + ACTIONS(2973), 1, + anon_sym_DASH_GT, + [56465] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2973), 2, + ACTIONS(2975), 2, anon_sym_COLON, anon_sym_DASH_GT, - [56328] = 3, + [56473] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2975), 1, - sym_integer, - ACTIONS(2977), 1, - sym_float, - [56338] = 2, + ACTIONS(1953), 1, + anon_sym_COMMA, + STATE(992), 1, + aux_sym_expression_list_repeat1, + [56483] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2652), 2, + ACTIONS(2780), 2, anon_sym_RPAREN, anon_sym_COMMA, - [56346] = 2, + [56491] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2977), 2, + sym__newline, + anon_sym_SEMI, + [56499] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(2979), 2, sym__newline, - sym__semicolon, - [56354] = 2, + anon_sym_SEMI, + [56507] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(2981), 2, + anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_RBRACE, - [56362] = 2, + [56515] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2983), 2, - sym__newline, - sym__semicolon, - [56370] = 2, + ACTIONS(2983), 1, + anon_sym_COMMA, + ACTIONS(2985), 1, + anon_sym_RBRACE, + [56525] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2985), 2, - sym__newline, - sym__semicolon, - [56378] = 3, + ACTIONS(2987), 2, + anon_sym_COMMA, + anon_sym_RBRACE, + [56533] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2987), 1, - sym_integer, - ACTIONS(2989), 1, - sym_float, - [56388] = 2, + ACTIONS(2989), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [56541] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(2991), 2, anon_sym_COMMA, anon_sym_RBRACK, - [56396] = 2, + [56549] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2205), 2, + ACTIONS(2354), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [56557] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2203), 2, sym__newline, - sym__semicolon, - [56404] = 3, + anon_sym_SEMI, + [56565] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(2993), 1, - sym_integer, + anon_sym_COLON, ACTIONS(2995), 1, - sym_float, - [56414] = 2, + anon_sym_DASH_GT, + [56575] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2997), 2, - sym__newline, - sym__semicolon, - [56422] = 3, + ACTIONS(2907), 1, + anon_sym_COMMA, + ACTIONS(2997), 1, + anon_sym_RPAREN, + [56585] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2817), 1, + ACTIONS(2999), 2, anon_sym_COMMA, - ACTIONS(2999), 1, - anon_sym_RPAREN, - [56432] = 2, + anon_sym_RBRACK, + [56593] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3001), 2, - sym__newline, - sym__semicolon, - [56440] = 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [56601] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2203), 2, - sym__newline, - sym__semicolon, - [56448] = 2, + ACTIONS(3003), 1, + anon_sym_COMMA, + STATE(1340), 1, + aux_sym_open_sequence_match_pattern_repeat1, + [56611] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(3003), 2, - sym__newline, - sym__semicolon, - [56456] = 3, + ACTIONS(2539), 1, + anon_sym_LPAREN, + STATE(1350), 1, + sym_parameters, + [56621] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3005), 1, - anon_sym_COMMA, - STATE(1337), 1, - aux_sym_open_sequence_match_pattern_repeat1, - [56466] = 2, + ACTIONS(2169), 2, + sym__newline, + anon_sym_SEMI, + [56629] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2563), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - [56474] = 2, + ACTIONS(2669), 1, + sym_identifier, + STATE(1360), 1, + sym_match_keyword_pattern, + [56639] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2322), 2, - anon_sym_COMMA, - anon_sym_RBRACK, - [56482] = 2, + ACTIONS(2539), 1, + anon_sym_LPAREN, + STATE(1370), 1, + sym_parameters, + [56649] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(3007), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - [56490] = 2, + ACTIONS(3005), 1, + sym_integer, + ACTIONS(3007), 1, + sym_float, + [56659] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3009), 2, sym__newline, - sym__semicolon, - [56498] = 3, + anon_sym_SEMI, + [56667] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(3011), 1, + sym_identifier, + STATE(1352), 1, + sym_match_capture_pattern, + [56677] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2205), 2, + sym__newline, + anon_sym_SEMI, + [56685] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2047), 1, anon_sym_COMMA, - ACTIONS(3013), 1, - anon_sym_RBRACE, - [56508] = 2, + STATE(1096), 1, + aux_sym_expression_list_repeat1, + [56695] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3013), 2, + sym__newline, + anon_sym_SEMI, + [56703] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3015), 2, - anon_sym_COMMA, - anon_sym_RBRACK, - [56516] = 2, + sym__newline, + anon_sym_SEMI, + [56711] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2832), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - [56524] = 3, + ACTIONS(3017), 2, + sym__newline, + anon_sym_SEMI, + [56719] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(3017), 1, - anon_sym_COMMA, - STATE(1190), 1, - aux_sym_open_sequence_match_pattern_repeat1, - [56534] = 2, + ACTIONS(1894), 1, + anon_sym_DOT, + STATE(1333), 1, + aux_sym_match_value_pattern_repeat1, + [56729] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(3019), 1, - anon_sym_RBRACE, - [56541] = 2, + ACTIONS(2539), 1, + anon_sym_LPAREN, + STATE(1368), 1, + sym_parameters, + [56739] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(3021), 1, + ACTIONS(2539), 1, anon_sym_LPAREN, - [56548] = 2, + STATE(1371), 1, + sym_parameters, + [56749] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3023), 1, - anon_sym_RBRACK, - [56555] = 2, + ACTIONS(2635), 2, + sym__newline, + anon_sym_SEMI, + [56757] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3025), 1, - anon_sym_import, - [56562] = 2, + ACTIONS(2690), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [56765] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3027), 1, - anon_sym_RBRACE, - [56569] = 2, + ACTIONS(3019), 2, + sym__newline, + anon_sym_SEMI, + [56773] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(3029), 1, + ACTIONS(2659), 1, anon_sym_RBRACE, - [56576] = 2, + ACTIONS(3021), 1, + anon_sym_COMMA, + [56783] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3023), 2, + sym__newline, + anon_sym_SEMI, + [56791] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3025), 2, + sym__newline, + anon_sym_SEMI, + [56799] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3027), 2, + sym__newline, + anon_sym_SEMI, + [56807] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3029), 2, + sym__newline, + anon_sym_SEMI, + [56815] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3031), 1, - anon_sym_RBRACE, - [56583] = 2, + anon_sym_RBRACK, + [56822] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2105), 1, - anon_sym_EQ, - [56590] = 2, + ACTIONS(2736), 1, + anon_sym_in, + [56829] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3033), 1, anon_sym_COLON, - [56597] = 2, + [56836] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3035), 1, anon_sym_RPAREN, - [56604] = 2, + [56843] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3037), 1, - anon_sym_RPAREN, - [56611] = 2, + sym_identifier, + [56850] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3039), 1, - anon_sym_for, - [56618] = 2, + anon_sym_RBRACE, + [56857] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3041), 1, - anon_sym_RPAREN, - [56625] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(3043), 1, - anon_sym_RPAREN, - [56632] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2827), 1, - anon_sym_in, - [56639] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2809), 1, anon_sym_RBRACE, - [56646] = 2, + [56864] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2785), 1, - anon_sym_in, - [56653] = 2, + ACTIONS(3043), 1, + anon_sym_RBRACK, + [56871] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3045), 1, anon_sym_COLON, - [56660] = 2, + [56878] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3047), 1, - anon_sym_COLON, - [56667] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(3013), 1, - anon_sym_RBRACE, - [56674] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2559), 1, - anon_sym_RBRACE, - [56681] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1832), 1, - anon_sym_RBRACE, - [56688] = 2, + anon_sym_RPAREN, + [56885] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3049), 1, - anon_sym_COLON, - [56695] = 2, + anon_sym_in, + [56892] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3051), 1, anon_sym_COLON, - [56702] = 2, + [56899] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3053), 1, - anon_sym_RBRACK, - [56709] = 2, + sym_identifier, + [56906] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3055), 1, - anon_sym_in, - [56716] = 2, + anon_sym_COLON, + [56913] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3057), 1, - anon_sym_RPAREN, - [56723] = 2, + anon_sym_RBRACE, + [56920] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3059), 1, - anon_sym_RPAREN, - [56730] = 2, + anon_sym_RBRACE, + [56927] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3061), 1, - anon_sym_RBRACE, - [56737] = 2, + anon_sym_RBRACK, + [56934] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3063), 1, - anon_sym_RPAREN, - [56744] = 2, + anon_sym_RBRACK, + [56941] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3065), 1, anon_sym_COLON, - [56751] = 2, + [56948] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3067), 1, - anon_sym_in, - [56758] = 2, + anon_sym_COLON, + [56955] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3069), 1, - anon_sym_RBRACK, - [56765] = 2, + anon_sym_RPAREN, + [56962] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3071), 1, - anon_sym_RBRACE, - [56772] = 2, + anon_sym_in, + [56969] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3073), 1, - anon_sym_RBRACE, - [56779] = 2, + anon_sym_COLON, + [56976] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3075), 1, - sym_identifier, - [56786] = 2, + anon_sym_COLON, + [56983] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3077), 1, - anon_sym_import, - [56793] = 2, + anon_sym_COLON, + [56990] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3079), 1, - anon_sym_RPAREN, - [56800] = 2, + anon_sym_RBRACE, + [56997] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3081), 1, - sym_identifier, - [56807] = 2, + anon_sym_RBRACE, + [57004] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3083), 1, - anon_sym_import, - [56814] = 2, + anon_sym_RBRACE, + [57011] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3085), 1, - sym_identifier, - [56821] = 2, + anon_sym_RPAREN, + [57018] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3087), 1, - anon_sym_in, - [56828] = 2, + anon_sym_COLON, + [57025] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3089), 1, - anon_sym_RPAREN, - [56835] = 2, + anon_sym_COLON, + [57032] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3091), 1, - sym_identifier, - [56842] = 2, + anon_sym_COLON, + [57039] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3093), 1, - sym_identifier, - [56849] = 2, + anon_sym_COLON, + [57046] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3095), 1, - sym_identifier, - [56856] = 2, + anon_sym_RPAREN, + [57053] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3097), 1, - anon_sym_COLON, - [56863] = 2, + anon_sym_RPAREN, + [57060] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3099), 1, - anon_sym_COLON, - [56870] = 2, + anon_sym_LPAREN, + [57067] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3101), 1, - anon_sym_COLON, - [56877] = 2, + sym_identifier, + [57074] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2860), 1, + ACTIONS(3103), 1, anon_sym_in, - [56884] = 2, + [57081] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3103), 1, - anon_sym_RPAREN, - [56891] = 2, + ACTIONS(1838), 1, + anon_sym_RBRACE, + [57088] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3105), 1, - sym_identifier, - [56898] = 2, + anon_sym_import, + [57095] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(914), 1, + anon_sym_def, + [57102] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3107), 1, - sym_identifier, - [56905] = 2, + anon_sym_import, + [57109] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3109), 1, anon_sym_COLON, - [56912] = 2, + [57116] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3111), 1, + ACTIONS(2253), 1, anon_sym_COLON, - [56919] = 2, + [57123] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3111), 1, + sym_identifier, + [57130] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3113), 1, - anon_sym_RBRACE, - [56926] = 2, + sym_identifier, + [57137] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3115), 1, - anon_sym_RBRACE, - [56933] = 2, + anon_sym_COLON, + [57144] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3117), 1, - anon_sym_RBRACE, - [56940] = 2, + anon_sym_COLON, + [57151] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3119), 1, anon_sym_COLON, - [56947] = 2, + [57158] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3121), 1, - anon_sym_RPAREN, - [56954] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2293), 1, - anon_sym_COLON, - [56961] = 2, + ACTIONS(2889), 1, + anon_sym_in, + [57165] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2858), 1, - anon_sym_in, - [56968] = 2, + ACTIONS(3121), 1, + sym_identifier, + [57172] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3123), 1, - anon_sym_RBRACK, - [56975] = 2, + anon_sym_RPAREN, + [57179] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3125), 1, - anon_sym_COLON, - [56982] = 2, + anon_sym_RPAREN, + [57186] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3127), 1, - anon_sym_RBRACE, - [56989] = 2, + anon_sym_import, + [57193] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3129), 1, anon_sym_COLON, - [56996] = 2, + [57200] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3131), 1, - anon_sym_COLON, - [57003] = 2, + ACTIONS(2877), 1, + anon_sym_RBRACE, + [57207] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2281), 1, - anon_sym_COLON, - [57010] = 2, + ACTIONS(3131), 1, + anon_sym_for, + [57214] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3133), 1, - anon_sym_RBRACK, - [57017] = 2, + anon_sym_RPAREN, + [57221] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3135), 1, anon_sym_COLON, - [57024] = 2, + [57228] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3137), 1, - anon_sym_RPAREN, - [57031] = 2, + anon_sym_RBRACE, + [57235] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2284), 1, + anon_sym_COLON, + [57242] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3139), 1, anon_sym_COLON, - [57038] = 2, + [57249] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3141), 1, - sym_identifier, - [57045] = 2, + anon_sym_COLON, + [57256] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3143), 1, anon_sym_COLON, - [57052] = 2, + [57263] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2866), 1, - anon_sym_RBRACE, - [57059] = 2, + ACTIONS(2838), 1, + anon_sym_in, + [57270] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3145), 1, anon_sym_COLON, - [57066] = 2, + [57277] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3147), 1, anon_sym_COLON, - [57073] = 2, + [57284] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2301), 1, + anon_sym_COLON, + [57291] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3149), 1, anon_sym_COLON, - [57080] = 2, + [57298] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3151), 1, - anon_sym_COLON, - [57087] = 2, + sym_identifier, + [57305] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3153), 1, - anon_sym_RPAREN, - [57094] = 2, + sym_identifier, + [57312] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3155), 1, - anon_sym_COLON, - [57101] = 2, + anon_sym_RPAREN, + [57319] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3157), 1, - anon_sym_COLON, - [57108] = 2, + anon_sym_RBRACK, + [57326] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3159), 1, anon_sym_COLON, - [57115] = 2, + [57333] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(876), 1, - anon_sym_def, - [57122] = 2, + ACTIONS(2805), 1, + anon_sym_RBRACE, + [57340] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3161), 1, anon_sym_COLON, - [57129] = 2, + [57347] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3163), 1, - sym_identifier, - [57136] = 2, + anon_sym_COLON, + [57354] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3165), 1, anon_sym_COLON, - [57143] = 2, + [57361] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3167), 1, - anon_sym_EQ, - [57150] = 2, + anon_sym_COLON, + [57368] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3169), 1, - anon_sym_COLON, - [57157] = 2, + anon_sym_RBRACE, + [57375] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2985), 1, + anon_sym_RBRACE, + [57382] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3171), 1, - anon_sym_in, - [57164] = 2, + anon_sym_RBRACE, + [57389] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3173), 1, - anon_sym_COLON, - [57171] = 2, + sym_identifier, + [57396] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3175), 1, - anon_sym_RBRACE, - [57178] = 2, + anon_sym_COLON, + [57403] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3177), 1, - anon_sym_RBRACK, - [57185] = 2, + anon_sym_COLON, + [57410] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3179), 1, - sym_identifier, - [57192] = 2, + anon_sym_EQ, + [57417] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3181), 1, anon_sym_COLON, - [57199] = 2, + [57424] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2476), 1, + anon_sym_RBRACE, + [57431] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2299), 1, + anon_sym_COLON, + [57438] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2728), 1, + anon_sym_in, + [57445] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3183), 1, - sym_identifier, - [57206] = 2, + anon_sym_COLON, + [57452] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3185), 1, - anon_sym_COLON, - [57213] = 2, + anon_sym_RPAREN, + [57459] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3187), 1, - ts_builtin_sym_end, - [57220] = 2, + anon_sym_RBRACE, + [57466] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3189), 1, - anon_sym_RBRACK, - [57227] = 2, + sym_identifier, + [57473] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3191), 1, anon_sym_RBRACE, - [57234] = 2, + [57480] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3193), 1, - anon_sym_COLON, - [57241] = 2, + anon_sym_RBRACK, + [57487] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3195), 1, - anon_sym_COLON, - [57248] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2246), 1, - anon_sym_COLON, - [57255] = 2, + anon_sym_RPAREN, + [57494] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3197), 1, - sym_identifier, - [57262] = 2, + anon_sym_RBRACE, + [57501] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3199), 1, sym_identifier, - [57269] = 2, + [57508] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3201), 1, - sym_identifier, - [57276] = 2, + ts_builtin_sym_end, + [57515] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3203), 1, sym_identifier, - [57283] = 2, + [57522] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2577), 1, + anon_sym_RBRACE, + [57529] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3205), 1, - anon_sym_COLON, - [57290] = 2, + anon_sym_in, + [57536] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3207), 1, - anon_sym_RBRACE, - [57297] = 2, + sym_identifier, + [57543] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3209), 1, sym_identifier, - [57304] = 2, + [57550] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3211), 1, - anon_sym_RBRACE, - [57311] = 2, + sym_identifier, + [57557] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3213), 1, sym_identifier, - [57318] = 2, + [57564] = 2, ACTIONS(3), 1, sym_comment, ACTIONS(3215), 1, + anon_sym_COLON, + [57571] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3217), 1, sym_identifier, - [57325] = 2, + [57578] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2320), 1, + ACTIONS(3219), 1, anon_sym_COLON, - [57332] = 2, + [57585] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3221), 1, + anon_sym_RBRACE, + [57592] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3223), 1, + sym_identifier, + [57599] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3225), 1, + sym_identifier, + [57606] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3227), 1, + anon_sym_RBRACE, + [57613] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2592), 1, + ACTIONS(2661), 1, anon_sym_in, - [57339] = 2, + [57620] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(894), 1, + ACTIONS(904), 1, anon_sym_def, - [57346] = 2, + [57627] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3217), 1, - anon_sym_COLON, - [57353] = 2, + ACTIONS(3229), 1, + anon_sym_RBRACK, + [57634] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2590), 1, + ACTIONS(2655), 1, anon_sym_in, - [57360] = 2, + [57641] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2538), 1, - anon_sym_RBRACE, - [57367] = 2, + ACTIONS(3231), 1, + anon_sym_RPAREN, + [57648] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3219), 1, - anon_sym_COLON, + ACTIONS(2114), 1, + anon_sym_EQ, }; static const uint32_t ts_small_parse_table_map[] = { @@ -73523,31 +71278,31 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(157)] = 236, [SMALL_STATE(158)] = 354, [SMALL_STATE(159)] = 464, - [SMALL_STATE(160)] = 579, - [SMALL_STATE(161)] = 694, - [SMALL_STATE(162)] = 809, - [SMALL_STATE(163)] = 926, - [SMALL_STATE(164)] = 1045, + [SMALL_STATE(160)] = 581, + [SMALL_STATE(161)] = 698, + [SMALL_STATE(162)] = 813, + [SMALL_STATE(163)] = 928, + [SMALL_STATE(164)] = 1047, [SMALL_STATE(165)] = 1162, - [SMALL_STATE(166)] = 1262, - [SMALL_STATE(167)] = 1376, - [SMALL_STATE(168)] = 1480, - [SMALL_STATE(169)] = 1584, - [SMALL_STATE(170)] = 1698, - [SMALL_STATE(171)] = 1812, - [SMALL_STATE(172)] = 1916, + [SMALL_STATE(166)] = 1276, + [SMALL_STATE(167)] = 1390, + [SMALL_STATE(168)] = 1494, + [SMALL_STATE(169)] = 1594, + [SMALL_STATE(170)] = 1694, + [SMALL_STATE(171)] = 1798, + [SMALL_STATE(172)] = 1902, [SMALL_STATE(173)] = 2016, - [SMALL_STATE(174)] = 2123, - [SMALL_STATE(175)] = 2224, - [SMALL_STATE(176)] = 2325, - [SMALL_STATE(177)] = 2430, - [SMALL_STATE(178)] = 2535, - [SMALL_STATE(179)] = 2638, - [SMALL_STATE(180)] = 2743, - [SMALL_STATE(181)] = 2848, - [SMALL_STATE(182)] = 2953, - [SMALL_STATE(183)] = 3054, - [SMALL_STATE(184)] = 3157, + [SMALL_STATE(174)] = 2121, + [SMALL_STATE(175)] = 2226, + [SMALL_STATE(176)] = 2327, + [SMALL_STATE(177)] = 2428, + [SMALL_STATE(178)] = 2533, + [SMALL_STATE(179)] = 2634, + [SMALL_STATE(180)] = 2739, + [SMALL_STATE(181)] = 2844, + [SMALL_STATE(182)] = 2947, + [SMALL_STATE(183)] = 3052, + [SMALL_STATE(184)] = 3159, [SMALL_STATE(185)] = 3262, [SMALL_STATE(186)] = 3360, [SMALL_STATE(187)] = 3462, @@ -73556,9 +71311,9 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(190)] = 3770, [SMALL_STATE(191)] = 3872, [SMALL_STATE(192)] = 3974, - [SMALL_STATE(193)] = 4072, - [SMALL_STATE(194)] = 4176, - [SMALL_STATE(195)] = 4278, + [SMALL_STATE(193)] = 4076, + [SMALL_STATE(194)] = 4178, + [SMALL_STATE(195)] = 4282, [SMALL_STATE(196)] = 4380, [SMALL_STATE(197)] = 4482, [SMALL_STATE(198)] = 4584, @@ -73566,2883 +71321,2948 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(200)] = 4788, [SMALL_STATE(201)] = 4894, [SMALL_STATE(202)] = 4996, - [SMALL_STATE(203)] = 5094, - [SMALL_STATE(204)] = 5196, - [SMALL_STATE(205)] = 5300, - [SMALL_STATE(206)] = 5402, - [SMALL_STATE(207)] = 5504, - [SMALL_STATE(208)] = 5606, - [SMALL_STATE(209)] = 5708, - [SMALL_STATE(210)] = 5810, - [SMALL_STATE(211)] = 5912, - [SMALL_STATE(212)] = 6018, - [SMALL_STATE(213)] = 6122, - [SMALL_STATE(214)] = 6220, - [SMALL_STATE(215)] = 6322, - [SMALL_STATE(216)] = 6424, + [SMALL_STATE(203)] = 5098, + [SMALL_STATE(204)] = 5200, + [SMALL_STATE(205)] = 5302, + [SMALL_STATE(206)] = 5404, + [SMALL_STATE(207)] = 5506, + [SMALL_STATE(208)] = 5608, + [SMALL_STATE(209)] = 5710, + [SMALL_STATE(210)] = 5814, + [SMALL_STATE(211)] = 5916, + [SMALL_STATE(212)] = 6014, + [SMALL_STATE(213)] = 6116, + [SMALL_STATE(214)] = 6218, + [SMALL_STATE(215)] = 6324, + [SMALL_STATE(216)] = 6428, [SMALL_STATE(217)] = 6526, [SMALL_STATE(218)] = 6628, [SMALL_STATE(219)] = 6689, - [SMALL_STATE(220)] = 6750, - [SMALL_STATE(221)] = 6811, - [SMALL_STATE(222)] = 6872, - [SMALL_STATE(223)] = 6971, - [SMALL_STATE(224)] = 7032, - [SMALL_STATE(225)] = 7131, + [SMALL_STATE(220)] = 6788, + [SMALL_STATE(221)] = 6849, + [SMALL_STATE(222)] = 6948, + [SMALL_STATE(223)] = 7047, + [SMALL_STATE(224)] = 7108, + [SMALL_STATE(225)] = 7169, [SMALL_STATE(226)] = 7230, [SMALL_STATE(227)] = 7291, [SMALL_STATE(228)] = 7352, [SMALL_STATE(229)] = 7424, - [SMALL_STATE(230)] = 7496, - [SMALL_STATE(231)] = 7592, - [SMALL_STATE(232)] = 7690, - [SMALL_STATE(233)] = 7762, - [SMALL_STATE(234)] = 7860, - [SMALL_STATE(235)] = 7932, - [SMALL_STATE(236)] = 8030, - [SMALL_STATE(237)] = 8128, - [SMALL_STATE(238)] = 8200, - [SMALL_STATE(239)] = 8272, - [SMALL_STATE(240)] = 8370, + [SMALL_STATE(230)] = 7522, + [SMALL_STATE(231)] = 7594, + [SMALL_STATE(232)] = 7692, + [SMALL_STATE(233)] = 7764, + [SMALL_STATE(234)] = 7836, + [SMALL_STATE(235)] = 7908, + [SMALL_STATE(236)] = 7980, + [SMALL_STATE(237)] = 8052, + [SMALL_STATE(238)] = 8148, + [SMALL_STATE(239)] = 8246, + [SMALL_STATE(240)] = 8344, [SMALL_STATE(241)] = 8442, - [SMALL_STATE(242)] = 8514, - [SMALL_STATE(243)] = 8609, - [SMALL_STATE(244)] = 8704, - [SMALL_STATE(245)] = 8799, - [SMALL_STATE(246)] = 8894, - [SMALL_STATE(247)] = 8989, - [SMALL_STATE(248)] = 9062, - [SMALL_STATE(249)] = 9157, - [SMALL_STATE(250)] = 9252, - [SMALL_STATE(251)] = 9347, - [SMALL_STATE(252)] = 9442, - [SMALL_STATE(253)] = 9537, - [SMALL_STATE(254)] = 9632, - [SMALL_STATE(255)] = 9705, - [SMALL_STATE(256)] = 9799, - [SMALL_STATE(257)] = 9893, - [SMALL_STATE(258)] = 9987, - [SMALL_STATE(259)] = 10055, - [SMALL_STATE(260)] = 10147, - [SMALL_STATE(261)] = 10241, - [SMALL_STATE(262)] = 10335, - [SMALL_STATE(263)] = 10429, - [SMALL_STATE(264)] = 10497, - [SMALL_STATE(265)] = 10589, - [SMALL_STATE(266)] = 10657, - [SMALL_STATE(267)] = 10719, - [SMALL_STATE(268)] = 10781, - [SMALL_STATE(269)] = 10849, - [SMALL_STATE(270)] = 10943, - [SMALL_STATE(271)] = 11005, - [SMALL_STATE(272)] = 11067, - [SMALL_STATE(273)] = 11135, - [SMALL_STATE(274)] = 11229, - [SMALL_STATE(275)] = 11323, - [SMALL_STATE(276)] = 11415, - [SMALL_STATE(277)] = 11483, - [SMALL_STATE(278)] = 11551, - [SMALL_STATE(279)] = 11621, - [SMALL_STATE(280)] = 11689, - [SMALL_STATE(281)] = 11778, - [SMALL_STATE(282)] = 11835, - [SMALL_STATE(283)] = 11892, - [SMALL_STATE(284)] = 11983, - [SMALL_STATE(285)] = 12050, - [SMALL_STATE(286)] = 12113, - [SMALL_STATE(287)] = 12202, - [SMALL_STATE(288)] = 12259, - [SMALL_STATE(289)] = 12316, - [SMALL_STATE(290)] = 12405, - [SMALL_STATE(291)] = 12496, - [SMALL_STATE(292)] = 12553, - [SMALL_STATE(293)] = 12644, - [SMALL_STATE(294)] = 12733, - [SMALL_STATE(295)] = 12822, - [SMALL_STATE(296)] = 12911, - [SMALL_STATE(297)] = 13002, - [SMALL_STATE(298)] = 13091, - [SMALL_STATE(299)] = 13182, - [SMALL_STATE(300)] = 13273, - [SMALL_STATE(301)] = 13362, - [SMALL_STATE(302)] = 13453, - [SMALL_STATE(303)] = 13544, - [SMALL_STATE(304)] = 13633, - [SMALL_STATE(305)] = 13722, - [SMALL_STATE(306)] = 13779, - [SMALL_STATE(307)] = 13868, - [SMALL_STATE(308)] = 13931, - [SMALL_STATE(309)] = 13988, - [SMALL_STATE(310)] = 14077, - [SMALL_STATE(311)] = 14168, - [SMALL_STATE(312)] = 14225, - [SMALL_STATE(313)] = 14314, - [SMALL_STATE(314)] = 14371, - [SMALL_STATE(315)] = 14462, - [SMALL_STATE(316)] = 14519, - [SMALL_STATE(317)] = 14575, - [SMALL_STATE(318)] = 14631, - [SMALL_STATE(319)] = 14687, - [SMALL_STATE(320)] = 14743, - [SMALL_STATE(321)] = 14799, - [SMALL_STATE(322)] = 14887, - [SMALL_STATE(323)] = 14975, - [SMALL_STATE(324)] = 15063, - [SMALL_STATE(325)] = 15151, - [SMALL_STATE(326)] = 15207, - [SMALL_STATE(327)] = 15263, - [SMALL_STATE(328)] = 15319, - [SMALL_STATE(329)] = 15375, - [SMALL_STATE(330)] = 15431, - [SMALL_STATE(331)] = 15495, - [SMALL_STATE(332)] = 15551, - [SMALL_STATE(333)] = 15607, - [SMALL_STATE(334)] = 15663, - [SMALL_STATE(335)] = 15727, - [SMALL_STATE(336)] = 15815, - [SMALL_STATE(337)] = 15871, - [SMALL_STATE(338)] = 15927, - [SMALL_STATE(339)] = 15991, - [SMALL_STATE(340)] = 16055, - [SMALL_STATE(341)] = 16111, - [SMALL_STATE(342)] = 16199, - [SMALL_STATE(343)] = 16255, - [SMALL_STATE(344)] = 16311, - [SMALL_STATE(345)] = 16367, - [SMALL_STATE(346)] = 16427, - [SMALL_STATE(347)] = 16515, - [SMALL_STATE(348)] = 16575, - [SMALL_STATE(349)] = 16663, - [SMALL_STATE(350)] = 16723, - [SMALL_STATE(351)] = 16811, - [SMALL_STATE(352)] = 16899, - [SMALL_STATE(353)] = 16955, - [SMALL_STATE(354)] = 17011, - [SMALL_STATE(355)] = 17067, - [SMALL_STATE(356)] = 17123, - [SMALL_STATE(357)] = 17179, - [SMALL_STATE(358)] = 17235, - [SMALL_STATE(359)] = 17291, - [SMALL_STATE(360)] = 17347, - [SMALL_STATE(361)] = 17403, - [SMALL_STATE(362)] = 17491, - [SMALL_STATE(363)] = 17547, - [SMALL_STATE(364)] = 17603, - [SMALL_STATE(365)] = 17691, - [SMALL_STATE(366)] = 17747, - [SMALL_STATE(367)] = 17803, - [SMALL_STATE(368)] = 17859, - [SMALL_STATE(369)] = 17947, - [SMALL_STATE(370)] = 18003, - [SMALL_STATE(371)] = 18059, - [SMALL_STATE(372)] = 18115, - [SMALL_STATE(373)] = 18171, - [SMALL_STATE(374)] = 18227, - [SMALL_STATE(375)] = 18283, - [SMALL_STATE(376)] = 18339, - [SMALL_STATE(377)] = 18395, - [SMALL_STATE(378)] = 18451, - [SMALL_STATE(379)] = 18507, - [SMALL_STATE(380)] = 18563, - [SMALL_STATE(381)] = 18623, - [SMALL_STATE(382)] = 18679, - [SMALL_STATE(383)] = 18735, - [SMALL_STATE(384)] = 18823, - [SMALL_STATE(385)] = 18879, - [SMALL_STATE(386)] = 18964, - [SMALL_STATE(387)] = 19049, - [SMALL_STATE(388)] = 19108, - [SMALL_STATE(389)] = 19163, - [SMALL_STATE(390)] = 19248, - [SMALL_STATE(391)] = 19333, - [SMALL_STATE(392)] = 19418, - [SMALL_STATE(393)] = 19503, - [SMALL_STATE(394)] = 19590, - [SMALL_STATE(395)] = 19675, - [SMALL_STATE(396)] = 19760, - [SMALL_STATE(397)] = 19845, - [SMALL_STATE(398)] = 19930, - [SMALL_STATE(399)] = 20015, - [SMALL_STATE(400)] = 20100, - [SMALL_STATE(401)] = 20185, - [SMALL_STATE(402)] = 20244, - [SMALL_STATE(403)] = 20329, - [SMALL_STATE(404)] = 20384, - [SMALL_STATE(405)] = 20469, - [SMALL_STATE(406)] = 20554, - [SMALL_STATE(407)] = 20639, - [SMALL_STATE(408)] = 20694, - [SMALL_STATE(409)] = 20753, - [SMALL_STATE(410)] = 20838, - [SMALL_STATE(411)] = 20923, - [SMALL_STATE(412)] = 21008, - [SMALL_STATE(413)] = 21093, - [SMALL_STATE(414)] = 21152, - [SMALL_STATE(415)] = 21211, - [SMALL_STATE(416)] = 21296, - [SMALL_STATE(417)] = 21381, - [SMALL_STATE(418)] = 21466, - [SMALL_STATE(419)] = 21525, - [SMALL_STATE(420)] = 21610, - [SMALL_STATE(421)] = 21665, - [SMALL_STATE(422)] = 21720, - [SMALL_STATE(423)] = 21805, - [SMALL_STATE(424)] = 21890, - [SMALL_STATE(425)] = 21975, - [SMALL_STATE(426)] = 22060, - [SMALL_STATE(427)] = 22145, - [SMALL_STATE(428)] = 22204, - [SMALL_STATE(429)] = 22263, - [SMALL_STATE(430)] = 22348, - [SMALL_STATE(431)] = 22407, - [SMALL_STATE(432)] = 22468, - [SMALL_STATE(433)] = 22527, - [SMALL_STATE(434)] = 22582, - [SMALL_STATE(435)] = 22667, - [SMALL_STATE(436)] = 22752, - [SMALL_STATE(437)] = 22837, - [SMALL_STATE(438)] = 22922, - [SMALL_STATE(439)] = 23007, - [SMALL_STATE(440)] = 23092, - [SMALL_STATE(441)] = 23151, - [SMALL_STATE(442)] = 23212, - [SMALL_STATE(443)] = 23297, - [SMALL_STATE(444)] = 23382, - [SMALL_STATE(445)] = 23467, - [SMALL_STATE(446)] = 23552, - [SMALL_STATE(447)] = 23637, - [SMALL_STATE(448)] = 23722, - [SMALL_STATE(449)] = 23807, - [SMALL_STATE(450)] = 23868, - [SMALL_STATE(451)] = 23953, - [SMALL_STATE(452)] = 24038, - [SMALL_STATE(453)] = 24123, - [SMALL_STATE(454)] = 24208, - [SMALL_STATE(455)] = 24267, - [SMALL_STATE(456)] = 24352, - [SMALL_STATE(457)] = 24437, - [SMALL_STATE(458)] = 24522, - [SMALL_STATE(459)] = 24607, - [SMALL_STATE(460)] = 24692, - [SMALL_STATE(461)] = 24777, - [SMALL_STATE(462)] = 24862, - [SMALL_STATE(463)] = 24947, - [SMALL_STATE(464)] = 25032, - [SMALL_STATE(465)] = 25091, - [SMALL_STATE(466)] = 25176, - [SMALL_STATE(467)] = 25261, - [SMALL_STATE(468)] = 25320, - [SMALL_STATE(469)] = 25405, - [SMALL_STATE(470)] = 25490, - [SMALL_STATE(471)] = 25575, - [SMALL_STATE(472)] = 25660, - [SMALL_STATE(473)] = 25719, - [SMALL_STATE(474)] = 25804, - [SMALL_STATE(475)] = 25889, - [SMALL_STATE(476)] = 25950, - [SMALL_STATE(477)] = 26035, - [SMALL_STATE(478)] = 26120, - [SMALL_STATE(479)] = 26179, - [SMALL_STATE(480)] = 26264, - [SMALL_STATE(481)] = 26349, - [SMALL_STATE(482)] = 26434, - [SMALL_STATE(483)] = 26519, - [SMALL_STATE(484)] = 26604, - [SMALL_STATE(485)] = 26689, - [SMALL_STATE(486)] = 26743, - [SMALL_STATE(487)] = 26797, - [SMALL_STATE(488)] = 26851, - [SMALL_STATE(489)] = 26905, - [SMALL_STATE(490)] = 26959, - [SMALL_STATE(491)] = 27013, - [SMALL_STATE(492)] = 27067, - [SMALL_STATE(493)] = 27121, - [SMALL_STATE(494)] = 27175, - [SMALL_STATE(495)] = 27229, - [SMALL_STATE(496)] = 27283, - [SMALL_STATE(497)] = 27337, - [SMALL_STATE(498)] = 27390, - [SMALL_STATE(499)] = 27443, - [SMALL_STATE(500)] = 27496, - [SMALL_STATE(501)] = 27549, - [SMALL_STATE(502)] = 27602, - [SMALL_STATE(503)] = 27655, - [SMALL_STATE(504)] = 27708, - [SMALL_STATE(505)] = 27761, - [SMALL_STATE(506)] = 27814, - [SMALL_STATE(507)] = 27867, - [SMALL_STATE(508)] = 27920, - [SMALL_STATE(509)] = 27973, - [SMALL_STATE(510)] = 28026, - [SMALL_STATE(511)] = 28079, - [SMALL_STATE(512)] = 28132, - [SMALL_STATE(513)] = 28185, - [SMALL_STATE(514)] = 28238, - [SMALL_STATE(515)] = 28291, - [SMALL_STATE(516)] = 28344, - [SMALL_STATE(517)] = 28397, - [SMALL_STATE(518)] = 28450, - [SMALL_STATE(519)] = 28503, - [SMALL_STATE(520)] = 28556, - [SMALL_STATE(521)] = 28609, - [SMALL_STATE(522)] = 28662, - [SMALL_STATE(523)] = 28715, - [SMALL_STATE(524)] = 28768, - [SMALL_STATE(525)] = 28821, - [SMALL_STATE(526)] = 28874, - [SMALL_STATE(527)] = 28927, - [SMALL_STATE(528)] = 28980, - [SMALL_STATE(529)] = 29033, - [SMALL_STATE(530)] = 29086, - [SMALL_STATE(531)] = 29139, - [SMALL_STATE(532)] = 29192, - [SMALL_STATE(533)] = 29245, - [SMALL_STATE(534)] = 29298, - [SMALL_STATE(535)] = 29351, - [SMALL_STATE(536)] = 29404, - [SMALL_STATE(537)] = 29457, - [SMALL_STATE(538)] = 29510, - [SMALL_STATE(539)] = 29563, - [SMALL_STATE(540)] = 29616, - [SMALL_STATE(541)] = 29669, - [SMALL_STATE(542)] = 29722, - [SMALL_STATE(543)] = 29775, - [SMALL_STATE(544)] = 29828, - [SMALL_STATE(545)] = 29881, - [SMALL_STATE(546)] = 29934, - [SMALL_STATE(547)] = 29987, - [SMALL_STATE(548)] = 30040, - [SMALL_STATE(549)] = 30093, - [SMALL_STATE(550)] = 30146, - [SMALL_STATE(551)] = 30199, - [SMALL_STATE(552)] = 30252, - [SMALL_STATE(553)] = 30305, - [SMALL_STATE(554)] = 30358, - [SMALL_STATE(555)] = 30411, - [SMALL_STATE(556)] = 30464, - [SMALL_STATE(557)] = 30517, - [SMALL_STATE(558)] = 30570, - [SMALL_STATE(559)] = 30623, - [SMALL_STATE(560)] = 30676, - [SMALL_STATE(561)] = 30729, - [SMALL_STATE(562)] = 30782, - [SMALL_STATE(563)] = 30835, - [SMALL_STATE(564)] = 30888, - [SMALL_STATE(565)] = 30941, - [SMALL_STATE(566)] = 30994, - [SMALL_STATE(567)] = 31047, - [SMALL_STATE(568)] = 31100, - [SMALL_STATE(569)] = 31153, - [SMALL_STATE(570)] = 31206, - [SMALL_STATE(571)] = 31259, - [SMALL_STATE(572)] = 31312, - [SMALL_STATE(573)] = 31365, - [SMALL_STATE(574)] = 31418, - [SMALL_STATE(575)] = 31471, - [SMALL_STATE(576)] = 31524, - [SMALL_STATE(577)] = 31577, - [SMALL_STATE(578)] = 31630, - [SMALL_STATE(579)] = 31683, - [SMALL_STATE(580)] = 31736, - [SMALL_STATE(581)] = 31789, - [SMALL_STATE(582)] = 31842, - [SMALL_STATE(583)] = 31895, - [SMALL_STATE(584)] = 31948, - [SMALL_STATE(585)] = 32001, - [SMALL_STATE(586)] = 32054, - [SMALL_STATE(587)] = 32107, - [SMALL_STATE(588)] = 32160, - [SMALL_STATE(589)] = 32213, - [SMALL_STATE(590)] = 32266, - [SMALL_STATE(591)] = 32319, - [SMALL_STATE(592)] = 32372, - [SMALL_STATE(593)] = 32425, - [SMALL_STATE(594)] = 32478, - [SMALL_STATE(595)] = 32531, - [SMALL_STATE(596)] = 32613, - [SMALL_STATE(597)] = 32697, - [SMALL_STATE(598)] = 32779, - [SMALL_STATE(599)] = 32834, - [SMALL_STATE(600)] = 32889, - [SMALL_STATE(601)] = 32944, - [SMALL_STATE(602)] = 33025, - [SMALL_STATE(603)] = 33106, - [SMALL_STATE(604)] = 33187, - [SMALL_STATE(605)] = 33268, - [SMALL_STATE(606)] = 33349, - [SMALL_STATE(607)] = 33430, - [SMALL_STATE(608)] = 33508, - [SMALL_STATE(609)] = 33586, - [SMALL_STATE(610)] = 33635, - [SMALL_STATE(611)] = 33684, - [SMALL_STATE(612)] = 33732, - [SMALL_STATE(613)] = 33780, - [SMALL_STATE(614)] = 33828, - [SMALL_STATE(615)] = 33876, - [SMALL_STATE(616)] = 33924, - [SMALL_STATE(617)] = 33972, - [SMALL_STATE(618)] = 34020, - [SMALL_STATE(619)] = 34068, - [SMALL_STATE(620)] = 34116, - [SMALL_STATE(621)] = 34164, - [SMALL_STATE(622)] = 34212, - [SMALL_STATE(623)] = 34260, - [SMALL_STATE(624)] = 34308, - [SMALL_STATE(625)] = 34356, - [SMALL_STATE(626)] = 34404, - [SMALL_STATE(627)] = 34452, - [SMALL_STATE(628)] = 34500, - [SMALL_STATE(629)] = 34548, - [SMALL_STATE(630)] = 34596, - [SMALL_STATE(631)] = 34678, - [SMALL_STATE(632)] = 34726, - [SMALL_STATE(633)] = 34774, - [SMALL_STATE(634)] = 34822, - [SMALL_STATE(635)] = 34870, - [SMALL_STATE(636)] = 34918, - [SMALL_STATE(637)] = 34990, - [SMALL_STATE(638)] = 35038, - [SMALL_STATE(639)] = 35086, - [SMALL_STATE(640)] = 35134, - [SMALL_STATE(641)] = 35182, - [SMALL_STATE(642)] = 35230, - [SMALL_STATE(643)] = 35278, - [SMALL_STATE(644)] = 35360, - [SMALL_STATE(645)] = 35408, - [SMALL_STATE(646)] = 35465, - [SMALL_STATE(647)] = 35532, - [SMALL_STATE(648)] = 35589, - [SMALL_STATE(649)] = 35646, - [SMALL_STATE(650)] = 35709, - [SMALL_STATE(651)] = 35766, - [SMALL_STATE(652)] = 35827, - [SMALL_STATE(653)] = 35898, - [SMALL_STATE(654)] = 35967, - [SMALL_STATE(655)] = 36028, - [SMALL_STATE(656)] = 36085, - [SMALL_STATE(657)] = 36150, - [SMALL_STATE(658)] = 36215, - [SMALL_STATE(659)] = 36284, - [SMALL_STATE(660)] = 36355, - [SMALL_STATE(661)] = 36422, - [SMALL_STATE(662)] = 36479, - [SMALL_STATE(663)] = 36550, - [SMALL_STATE(664)] = 36621, - [SMALL_STATE(665)] = 36692, - [SMALL_STATE(666)] = 36763, - [SMALL_STATE(667)] = 36826, - [SMALL_STATE(668)] = 36874, - [SMALL_STATE(669)] = 36922, - [SMALL_STATE(670)] = 36988, - [SMALL_STATE(671)] = 37054, - [SMALL_STATE(672)] = 37100, - [SMALL_STATE(673)] = 37146, - [SMALL_STATE(674)] = 37212, - [SMALL_STATE(675)] = 37260, - [SMALL_STATE(676)] = 37308, - [SMALL_STATE(677)] = 37374, - [SMALL_STATE(678)] = 37424, - [SMALL_STATE(679)] = 37474, - [SMALL_STATE(680)] = 37537, - [SMALL_STATE(681)] = 37600, - [SMALL_STATE(682)] = 37663, - [SMALL_STATE(683)] = 37726, - [SMALL_STATE(684)] = 37789, - [SMALL_STATE(685)] = 37868, - [SMALL_STATE(686)] = 37935, - [SMALL_STATE(687)] = 37998, - [SMALL_STATE(688)] = 38061, - [SMALL_STATE(689)] = 38124, - [SMALL_STATE(690)] = 38173, - [SMALL_STATE(691)] = 38236, - [SMALL_STATE(692)] = 38299, - [SMALL_STATE(693)] = 38362, - [SMALL_STATE(694)] = 38425, - [SMALL_STATE(695)] = 38488, - [SMALL_STATE(696)] = 38551, - [SMALL_STATE(697)] = 38614, - [SMALL_STATE(698)] = 38677, - [SMALL_STATE(699)] = 38740, - [SMALL_STATE(700)] = 38803, - [SMALL_STATE(701)] = 38866, - [SMALL_STATE(702)] = 38929, - [SMALL_STATE(703)] = 38992, - [SMALL_STATE(704)] = 39055, - [SMALL_STATE(705)] = 39118, - [SMALL_STATE(706)] = 39181, - [SMALL_STATE(707)] = 39244, - [SMALL_STATE(708)] = 39307, - [SMALL_STATE(709)] = 39370, - [SMALL_STATE(710)] = 39433, - [SMALL_STATE(711)] = 39496, - [SMALL_STATE(712)] = 39559, - [SMALL_STATE(713)] = 39622, - [SMALL_STATE(714)] = 39671, - [SMALL_STATE(715)] = 39734, - [SMALL_STATE(716)] = 39801, - [SMALL_STATE(717)] = 39864, - [SMALL_STATE(718)] = 39927, - [SMALL_STATE(719)] = 39990, - [SMALL_STATE(720)] = 40053, - [SMALL_STATE(721)] = 40102, - [SMALL_STATE(722)] = 40165, - [SMALL_STATE(723)] = 40228, - [SMALL_STATE(724)] = 40291, - [SMALL_STATE(725)] = 40354, - [SMALL_STATE(726)] = 40399, - [SMALL_STATE(727)] = 40462, - [SMALL_STATE(728)] = 40507, - [SMALL_STATE(729)] = 40570, - [SMALL_STATE(730)] = 40633, - [SMALL_STATE(731)] = 40696, - [SMALL_STATE(732)] = 40764, - [SMALL_STATE(733)] = 40824, - [SMALL_STATE(734)] = 40892, - [SMALL_STATE(735)] = 40960, - [SMALL_STATE(736)] = 41014, - [SMALL_STATE(737)] = 41058, - [SMALL_STATE(738)] = 41124, - [SMALL_STATE(739)] = 41182, - [SMALL_STATE(740)] = 41236, - [SMALL_STATE(741)] = 41312, - [SMALL_STATE(742)] = 41376, - [SMALL_STATE(743)] = 41424, - [SMALL_STATE(744)] = 41486, - [SMALL_STATE(745)] = 41530, - [SMALL_STATE(746)] = 41584, - [SMALL_STATE(747)] = 41651, - [SMALL_STATE(748)] = 41708, - [SMALL_STATE(749)] = 41753, - [SMALL_STATE(750)] = 41800, - [SMALL_STATE(751)] = 41865, - [SMALL_STATE(752)] = 41932, - [SMALL_STATE(753)] = 41991, - [SMALL_STATE(754)] = 42044, - [SMALL_STATE(755)] = 42089, - [SMALL_STATE(756)] = 42134, - [SMALL_STATE(757)] = 42187, - [SMALL_STATE(758)] = 42254, - [SMALL_STATE(759)] = 42297, - [SMALL_STATE(760)] = 42344, - [SMALL_STATE(761)] = 42391, - [SMALL_STATE(762)] = 42454, - [SMALL_STATE(763)] = 42499, - [SMALL_STATE(764)] = 42560, - [SMALL_STATE(765)] = 42607, - [SMALL_STATE(766)] = 42652, - [SMALL_STATE(767)] = 42705, - [SMALL_STATE(768)] = 42750, - [SMALL_STATE(769)] = 42795, - [SMALL_STATE(770)] = 42838, - [SMALL_STATE(771)] = 42883, - [SMALL_STATE(772)] = 42925, - [SMALL_STATE(773)] = 42967, - [SMALL_STATE(774)] = 43009, - [SMALL_STATE(775)] = 43051, - [SMALL_STATE(776)] = 43093, - [SMALL_STATE(777)] = 43135, - [SMALL_STATE(778)] = 43177, - [SMALL_STATE(779)] = 43219, - [SMALL_STATE(780)] = 43263, - [SMALL_STATE(781)] = 43305, - [SMALL_STATE(782)] = 43347, - [SMALL_STATE(783)] = 43389, - [SMALL_STATE(784)] = 43431, - [SMALL_STATE(785)] = 43473, - [SMALL_STATE(786)] = 43515, - [SMALL_STATE(787)] = 43557, - [SMALL_STATE(788)] = 43599, - [SMALL_STATE(789)] = 43641, - [SMALL_STATE(790)] = 43685, - [SMALL_STATE(791)] = 43727, - [SMALL_STATE(792)] = 43769, - [SMALL_STATE(793)] = 43811, - [SMALL_STATE(794)] = 43853, - [SMALL_STATE(795)] = 43895, - [SMALL_STATE(796)] = 43937, - [SMALL_STATE(797)] = 43979, - [SMALL_STATE(798)] = 44021, - [SMALL_STATE(799)] = 44065, - [SMALL_STATE(800)] = 44107, - [SMALL_STATE(801)] = 44149, - [SMALL_STATE(802)] = 44193, - [SMALL_STATE(803)] = 44235, - [SMALL_STATE(804)] = 44277, - [SMALL_STATE(805)] = 44319, - [SMALL_STATE(806)] = 44361, - [SMALL_STATE(807)] = 44405, - [SMALL_STATE(808)] = 44447, - [SMALL_STATE(809)] = 44489, - [SMALL_STATE(810)] = 44530, - [SMALL_STATE(811)] = 44571, - [SMALL_STATE(812)] = 44612, - [SMALL_STATE(813)] = 44657, - [SMALL_STATE(814)] = 44698, - [SMALL_STATE(815)] = 44739, - [SMALL_STATE(816)] = 44780, - [SMALL_STATE(817)] = 44821, - [SMALL_STATE(818)] = 44862, - [SMALL_STATE(819)] = 44903, - [SMALL_STATE(820)] = 44944, - [SMALL_STATE(821)] = 44985, - [SMALL_STATE(822)] = 45026, - [SMALL_STATE(823)] = 45067, - [SMALL_STATE(824)] = 45108, - [SMALL_STATE(825)] = 45149, - [SMALL_STATE(826)] = 45190, - [SMALL_STATE(827)] = 45231, - [SMALL_STATE(828)] = 45272, - [SMALL_STATE(829)] = 45313, - [SMALL_STATE(830)] = 45354, - [SMALL_STATE(831)] = 45395, - [SMALL_STATE(832)] = 45436, - [SMALL_STATE(833)] = 45477, - [SMALL_STATE(834)] = 45518, - [SMALL_STATE(835)] = 45559, - [SMALL_STATE(836)] = 45600, - [SMALL_STATE(837)] = 45641, - [SMALL_STATE(838)] = 45686, - [SMALL_STATE(839)] = 45727, - [SMALL_STATE(840)] = 45768, - [SMALL_STATE(841)] = 45809, - [SMALL_STATE(842)] = 45850, - [SMALL_STATE(843)] = 45891, - [SMALL_STATE(844)] = 45932, - [SMALL_STATE(845)] = 45973, - [SMALL_STATE(846)] = 46014, - [SMALL_STATE(847)] = 46055, - [SMALL_STATE(848)] = 46096, - [SMALL_STATE(849)] = 46137, - [SMALL_STATE(850)] = 46211, - [SMALL_STATE(851)] = 46285, - [SMALL_STATE(852)] = 46359, - [SMALL_STATE(853)] = 46433, - [SMALL_STATE(854)] = 46506, - [SMALL_STATE(855)] = 46577, - [SMALL_STATE(856)] = 46648, - [SMALL_STATE(857)] = 46719, - [SMALL_STATE(858)] = 46790, - [SMALL_STATE(859)] = 46861, - [SMALL_STATE(860)] = 46929, - [SMALL_STATE(861)] = 47001, - [SMALL_STATE(862)] = 47073, - [SMALL_STATE(863)] = 47145, - [SMALL_STATE(864)] = 47211, - [SMALL_STATE(865)] = 47274, - [SMALL_STATE(866)] = 47337, - [SMALL_STATE(867)] = 47392, - [SMALL_STATE(868)] = 47447, - [SMALL_STATE(869)] = 47487, - [SMALL_STATE(870)] = 47527, - [SMALL_STATE(871)] = 47567, - [SMALL_STATE(872)] = 47607, - [SMALL_STATE(873)] = 47637, - [SMALL_STATE(874)] = 47662, - [SMALL_STATE(875)] = 47687, - [SMALL_STATE(876)] = 47712, - [SMALL_STATE(877)] = 47737, - [SMALL_STATE(878)] = 47774, - [SMALL_STATE(879)] = 47811, - [SMALL_STATE(880)] = 47840, - [SMALL_STATE(881)] = 47869, - [SMALL_STATE(882)] = 47903, - [SMALL_STATE(883)] = 47949, - [SMALL_STATE(884)] = 47983, - [SMALL_STATE(885)] = 48011, - [SMALL_STATE(886)] = 48054, - [SMALL_STATE(887)] = 48097, - [SMALL_STATE(888)] = 48140, - [SMALL_STATE(889)] = 48183, - [SMALL_STATE(890)] = 48214, - [SMALL_STATE(891)] = 48257, - [SMALL_STATE(892)] = 48303, - [SMALL_STATE(893)] = 48349, - [SMALL_STATE(894)] = 48389, - [SMALL_STATE(895)] = 48435, - [SMALL_STATE(896)] = 48472, - [SMALL_STATE(897)] = 48509, - [SMALL_STATE(898)] = 48534, - [SMALL_STATE(899)] = 48571, - [SMALL_STATE(900)] = 48608, - [SMALL_STATE(901)] = 48630, - [SMALL_STATE(902)] = 48652, - [SMALL_STATE(903)] = 48686, - [SMALL_STATE(904)] = 48720, - [SMALL_STATE(905)] = 48742, - [SMALL_STATE(906)] = 48779, - [SMALL_STATE(907)] = 48801, - [SMALL_STATE(908)] = 48838, - [SMALL_STATE(909)] = 48861, - [SMALL_STATE(910)] = 48886, - [SMALL_STATE(911)] = 48909, - [SMALL_STATE(912)] = 48946, - [SMALL_STATE(913)] = 48971, - [SMALL_STATE(914)] = 48992, - [SMALL_STATE(915)] = 49015, - [SMALL_STATE(916)] = 49052, - [SMALL_STATE(917)] = 49073, - [SMALL_STATE(918)] = 49090, - [SMALL_STATE(919)] = 49127, - [SMALL_STATE(920)] = 49150, - [SMALL_STATE(921)] = 49169, - [SMALL_STATE(922)] = 49190, - [SMALL_STATE(923)] = 49213, - [SMALL_STATE(924)] = 49238, - [SMALL_STATE(925)] = 49261, - [SMALL_STATE(926)] = 49284, - [SMALL_STATE(927)] = 49305, - [SMALL_STATE(928)] = 49326, - [SMALL_STATE(929)] = 49349, - [SMALL_STATE(930)] = 49376, - [SMALL_STATE(931)] = 49410, - [SMALL_STATE(932)] = 49444, - [SMALL_STATE(933)] = 49478, - [SMALL_STATE(934)] = 49500, - [SMALL_STATE(935)] = 49530, - [SMALL_STATE(936)] = 49564, - [SMALL_STATE(937)] = 49594, - [SMALL_STATE(938)] = 49624, - [SMALL_STATE(939)] = 49654, - [SMALL_STATE(940)] = 49676, - [SMALL_STATE(941)] = 49710, - [SMALL_STATE(942)] = 49744, - [SMALL_STATE(943)] = 49774, - [SMALL_STATE(944)] = 49792, - [SMALL_STATE(945)] = 49822, - [SMALL_STATE(946)] = 49856, - [SMALL_STATE(947)] = 49890, - [SMALL_STATE(948)] = 49912, - [SMALL_STATE(949)] = 49934, - [SMALL_STATE(950)] = 49964, - [SMALL_STATE(951)] = 49994, - [SMALL_STATE(952)] = 50012, - [SMALL_STATE(953)] = 50042, - [SMALL_STATE(954)] = 50076, - [SMALL_STATE(955)] = 50095, - [SMALL_STATE(956)] = 50118, - [SMALL_STATE(957)] = 50141, - [SMALL_STATE(958)] = 50160, - [SMALL_STATE(959)] = 50179, - [SMALL_STATE(960)] = 50202, - [SMALL_STATE(961)] = 50227, - [SMALL_STATE(962)] = 50246, - [SMALL_STATE(963)] = 50265, - [SMALL_STATE(964)] = 50284, - [SMALL_STATE(965)] = 50302, - [SMALL_STATE(966)] = 50326, - [SMALL_STATE(967)] = 50340, - [SMALL_STATE(968)] = 50354, - [SMALL_STATE(969)] = 50368, - [SMALL_STATE(970)] = 50382, - [SMALL_STATE(971)] = 50396, - [SMALL_STATE(972)] = 50412, - [SMALL_STATE(973)] = 50426, - [SMALL_STATE(974)] = 50440, - [SMALL_STATE(975)] = 50458, - [SMALL_STATE(976)] = 50472, - [SMALL_STATE(977)] = 50486, - [SMALL_STATE(978)] = 50500, - [SMALL_STATE(979)] = 50518, - [SMALL_STATE(980)] = 50536, - [SMALL_STATE(981)] = 50554, - [SMALL_STATE(982)] = 50568, - [SMALL_STATE(983)] = 50594, - [SMALL_STATE(984)] = 50618, - [SMALL_STATE(985)] = 50632, - [SMALL_STATE(986)] = 50650, - [SMALL_STATE(987)] = 50664, - [SMALL_STATE(988)] = 50678, - [SMALL_STATE(989)] = 50692, - [SMALL_STATE(990)] = 50706, - [SMALL_STATE(991)] = 50720, - [SMALL_STATE(992)] = 50744, - [SMALL_STATE(993)] = 50764, - [SMALL_STATE(994)] = 50778, - [SMALL_STATE(995)] = 50796, - [SMALL_STATE(996)] = 50814, - [SMALL_STATE(997)] = 50838, - [SMALL_STATE(998)] = 50858, - [SMALL_STATE(999)] = 50872, - [SMALL_STATE(1000)] = 50894, - [SMALL_STATE(1001)] = 50912, - [SMALL_STATE(1002)] = 50928, - [SMALL_STATE(1003)] = 50952, - [SMALL_STATE(1004)] = 50976, - [SMALL_STATE(1005)] = 50990, - [SMALL_STATE(1006)] = 51008, - [SMALL_STATE(1007)] = 51022, - [SMALL_STATE(1008)] = 51042, - [SMALL_STATE(1009)] = 51056, - [SMALL_STATE(1010)] = 51070, - [SMALL_STATE(1011)] = 51084, - [SMALL_STATE(1012)] = 51098, - [SMALL_STATE(1013)] = 51116, - [SMALL_STATE(1014)] = 51134, - [SMALL_STATE(1015)] = 51157, - [SMALL_STATE(1016)] = 51170, - [SMALL_STATE(1017)] = 51193, - [SMALL_STATE(1018)] = 51206, - [SMALL_STATE(1019)] = 51219, - [SMALL_STATE(1020)] = 51242, - [SMALL_STATE(1021)] = 51261, - [SMALL_STATE(1022)] = 51286, - [SMALL_STATE(1023)] = 51305, - [SMALL_STATE(1024)] = 51318, - [SMALL_STATE(1025)] = 51333, - [SMALL_STATE(1026)] = 51350, - [SMALL_STATE(1027)] = 51373, - [SMALL_STATE(1028)] = 51392, - [SMALL_STATE(1029)] = 51409, - [SMALL_STATE(1030)] = 51424, - [SMALL_STATE(1031)] = 51441, - [SMALL_STATE(1032)] = 51462, - [SMALL_STATE(1033)] = 51481, - [SMALL_STATE(1034)] = 51494, - [SMALL_STATE(1035)] = 51517, - [SMALL_STATE(1036)] = 51536, - [SMALL_STATE(1037)] = 51555, - [SMALL_STATE(1038)] = 51574, - [SMALL_STATE(1039)] = 51599, - [SMALL_STATE(1040)] = 51618, - [SMALL_STATE(1041)] = 51643, - [SMALL_STATE(1042)] = 51656, - [SMALL_STATE(1043)] = 51669, - [SMALL_STATE(1044)] = 51692, - [SMALL_STATE(1045)] = 51715, - [SMALL_STATE(1046)] = 51738, - [SMALL_STATE(1047)] = 51761, - [SMALL_STATE(1048)] = 51786, - [SMALL_STATE(1049)] = 51805, - [SMALL_STATE(1050)] = 51830, - [SMALL_STATE(1051)] = 51851, - [SMALL_STATE(1052)] = 51864, - [SMALL_STATE(1053)] = 51889, - [SMALL_STATE(1054)] = 51908, - [SMALL_STATE(1055)] = 51927, - [SMALL_STATE(1056)] = 51948, - [SMALL_STATE(1057)] = 51973, - [SMALL_STATE(1058)] = 51989, - [SMALL_STATE(1059)] = 52005, - [SMALL_STATE(1060)] = 52027, - [SMALL_STATE(1061)] = 52041, - [SMALL_STATE(1062)] = 52057, - [SMALL_STATE(1063)] = 52073, - [SMALL_STATE(1064)] = 52093, - [SMALL_STATE(1065)] = 52113, - [SMALL_STATE(1066)] = 52131, - [SMALL_STATE(1067)] = 52149, - [SMALL_STATE(1068)] = 52163, - [SMALL_STATE(1069)] = 52179, - [SMALL_STATE(1070)] = 52193, - [SMALL_STATE(1071)] = 52215, - [SMALL_STATE(1072)] = 52237, - [SMALL_STATE(1073)] = 52251, - [SMALL_STATE(1074)] = 52269, - [SMALL_STATE(1075)] = 52283, - [SMALL_STATE(1076)] = 52305, - [SMALL_STATE(1077)] = 52319, - [SMALL_STATE(1078)] = 52335, - [SMALL_STATE(1079)] = 52353, - [SMALL_STATE(1080)] = 52375, - [SMALL_STATE(1081)] = 52397, - [SMALL_STATE(1082)] = 52417, - [SMALL_STATE(1083)] = 52435, - [SMALL_STATE(1084)] = 52455, - [SMALL_STATE(1085)] = 52473, - [SMALL_STATE(1086)] = 52495, - [SMALL_STATE(1087)] = 52515, - [SMALL_STATE(1088)] = 52527, - [SMALL_STATE(1089)] = 52543, - [SMALL_STATE(1090)] = 52555, - [SMALL_STATE(1091)] = 52572, - [SMALL_STATE(1092)] = 52589, - [SMALL_STATE(1093)] = 52604, - [SMALL_STATE(1094)] = 52621, - [SMALL_STATE(1095)] = 52638, - [SMALL_STATE(1096)] = 52655, - [SMALL_STATE(1097)] = 52670, - [SMALL_STATE(1098)] = 52689, - [SMALL_STATE(1099)] = 52706, - [SMALL_STATE(1100)] = 52725, - [SMALL_STATE(1101)] = 52740, - [SMALL_STATE(1102)] = 52751, - [SMALL_STATE(1103)] = 52768, - [SMALL_STATE(1104)] = 52785, - [SMALL_STATE(1105)] = 52804, - [SMALL_STATE(1106)] = 52821, - [SMALL_STATE(1107)] = 52832, - [SMALL_STATE(1108)] = 52851, - [SMALL_STATE(1109)] = 52870, - [SMALL_STATE(1110)] = 52887, - [SMALL_STATE(1111)] = 52898, - [SMALL_STATE(1112)] = 52913, - [SMALL_STATE(1113)] = 52928, - [SMALL_STATE(1114)] = 52945, - [SMALL_STATE(1115)] = 52960, - [SMALL_STATE(1116)] = 52975, - [SMALL_STATE(1117)] = 52994, - [SMALL_STATE(1118)] = 53013, - [SMALL_STATE(1119)] = 53030, - [SMALL_STATE(1120)] = 53047, - [SMALL_STATE(1121)] = 53066, - [SMALL_STATE(1122)] = 53083, - [SMALL_STATE(1123)] = 53100, - [SMALL_STATE(1124)] = 53119, - [SMALL_STATE(1125)] = 53136, - [SMALL_STATE(1126)] = 53155, - [SMALL_STATE(1127)] = 53172, - [SMALL_STATE(1128)] = 53189, - [SMALL_STATE(1129)] = 53205, - [SMALL_STATE(1130)] = 53219, - [SMALL_STATE(1131)] = 53235, - [SMALL_STATE(1132)] = 53251, - [SMALL_STATE(1133)] = 53267, - [SMALL_STATE(1134)] = 53279, - [SMALL_STATE(1135)] = 53295, - [SMALL_STATE(1136)] = 53311, - [SMALL_STATE(1137)] = 53327, - [SMALL_STATE(1138)] = 53341, - [SMALL_STATE(1139)] = 53355, - [SMALL_STATE(1140)] = 53369, - [SMALL_STATE(1141)] = 53385, - [SMALL_STATE(1142)] = 53401, - [SMALL_STATE(1143)] = 53417, - [SMALL_STATE(1144)] = 53431, - [SMALL_STATE(1145)] = 53445, - [SMALL_STATE(1146)] = 53461, - [SMALL_STATE(1147)] = 53475, - [SMALL_STATE(1148)] = 53491, - [SMALL_STATE(1149)] = 53507, - [SMALL_STATE(1150)] = 53523, - [SMALL_STATE(1151)] = 53537, - [SMALL_STATE(1152)] = 53553, - [SMALL_STATE(1153)] = 53569, - [SMALL_STATE(1154)] = 53585, - [SMALL_STATE(1155)] = 53599, - [SMALL_STATE(1156)] = 53613, - [SMALL_STATE(1157)] = 53629, - [SMALL_STATE(1158)] = 53645, - [SMALL_STATE(1159)] = 53661, - [SMALL_STATE(1160)] = 53677, - [SMALL_STATE(1161)] = 53691, - [SMALL_STATE(1162)] = 53707, - [SMALL_STATE(1163)] = 53721, - [SMALL_STATE(1164)] = 53735, - [SMALL_STATE(1165)] = 53749, - [SMALL_STATE(1166)] = 53763, - [SMALL_STATE(1167)] = 53773, - [SMALL_STATE(1168)] = 53787, - [SMALL_STATE(1169)] = 53801, - [SMALL_STATE(1170)] = 53817, - [SMALL_STATE(1171)] = 53827, - [SMALL_STATE(1172)] = 53841, - [SMALL_STATE(1173)] = 53855, - [SMALL_STATE(1174)] = 53871, - [SMALL_STATE(1175)] = 53885, - [SMALL_STATE(1176)] = 53895, - [SMALL_STATE(1177)] = 53911, - [SMALL_STATE(1178)] = 53925, - [SMALL_STATE(1179)] = 53939, - [SMALL_STATE(1180)] = 53953, - [SMALL_STATE(1181)] = 53967, - [SMALL_STATE(1182)] = 53983, - [SMALL_STATE(1183)] = 53999, - [SMALL_STATE(1184)] = 54011, - [SMALL_STATE(1185)] = 54025, - [SMALL_STATE(1186)] = 54035, - [SMALL_STATE(1187)] = 54051, - [SMALL_STATE(1188)] = 54061, - [SMALL_STATE(1189)] = 54077, - [SMALL_STATE(1190)] = 54091, - [SMALL_STATE(1191)] = 54105, - [SMALL_STATE(1192)] = 54119, - [SMALL_STATE(1193)] = 54133, - [SMALL_STATE(1194)] = 54149, - [SMALL_STATE(1195)] = 54162, - [SMALL_STATE(1196)] = 54175, - [SMALL_STATE(1197)] = 54188, - [SMALL_STATE(1198)] = 54201, - [SMALL_STATE(1199)] = 54210, - [SMALL_STATE(1200)] = 54223, - [SMALL_STATE(1201)] = 54236, - [SMALL_STATE(1202)] = 54245, - [SMALL_STATE(1203)] = 54258, - [SMALL_STATE(1204)] = 54271, - [SMALL_STATE(1205)] = 54284, - [SMALL_STATE(1206)] = 54297, - [SMALL_STATE(1207)] = 54310, - [SMALL_STATE(1208)] = 54319, - [SMALL_STATE(1209)] = 54332, - [SMALL_STATE(1210)] = 54345, - [SMALL_STATE(1211)] = 54358, - [SMALL_STATE(1212)] = 54371, - [SMALL_STATE(1213)] = 54384, - [SMALL_STATE(1214)] = 54397, - [SMALL_STATE(1215)] = 54410, - [SMALL_STATE(1216)] = 54423, - [SMALL_STATE(1217)] = 54436, - [SMALL_STATE(1218)] = 54447, - [SMALL_STATE(1219)] = 54460, - [SMALL_STATE(1220)] = 54473, - [SMALL_STATE(1221)] = 54486, - [SMALL_STATE(1222)] = 54499, - [SMALL_STATE(1223)] = 54510, - [SMALL_STATE(1224)] = 54519, - [SMALL_STATE(1225)] = 54532, - [SMALL_STATE(1226)] = 54545, - [SMALL_STATE(1227)] = 54554, - [SMALL_STATE(1228)] = 54567, - [SMALL_STATE(1229)] = 54580, - [SMALL_STATE(1230)] = 54593, - [SMALL_STATE(1231)] = 54606, - [SMALL_STATE(1232)] = 54619, - [SMALL_STATE(1233)] = 54632, - [SMALL_STATE(1234)] = 54643, - [SMALL_STATE(1235)] = 54656, - [SMALL_STATE(1236)] = 54669, - [SMALL_STATE(1237)] = 54682, - [SMALL_STATE(1238)] = 54695, - [SMALL_STATE(1239)] = 54708, - [SMALL_STATE(1240)] = 54721, - [SMALL_STATE(1241)] = 54734, - [SMALL_STATE(1242)] = 54747, - [SMALL_STATE(1243)] = 54760, - [SMALL_STATE(1244)] = 54773, - [SMALL_STATE(1245)] = 54786, - [SMALL_STATE(1246)] = 54797, - [SMALL_STATE(1247)] = 54810, - [SMALL_STATE(1248)] = 54823, - [SMALL_STATE(1249)] = 54836, - [SMALL_STATE(1250)] = 54849, - [SMALL_STATE(1251)] = 54858, - [SMALL_STATE(1252)] = 54871, - [SMALL_STATE(1253)] = 54884, - [SMALL_STATE(1254)] = 54895, - [SMALL_STATE(1255)] = 54908, - [SMALL_STATE(1256)] = 54921, - [SMALL_STATE(1257)] = 54934, - [SMALL_STATE(1258)] = 54947, - [SMALL_STATE(1259)] = 54960, - [SMALL_STATE(1260)] = 54973, - [SMALL_STATE(1261)] = 54986, - [SMALL_STATE(1262)] = 54999, - [SMALL_STATE(1263)] = 55012, - [SMALL_STATE(1264)] = 55023, - [SMALL_STATE(1265)] = 55036, - [SMALL_STATE(1266)] = 55047, - [SMALL_STATE(1267)] = 55060, - [SMALL_STATE(1268)] = 55071, - [SMALL_STATE(1269)] = 55084, - [SMALL_STATE(1270)] = 55095, - [SMALL_STATE(1271)] = 55104, - [SMALL_STATE(1272)] = 55117, - [SMALL_STATE(1273)] = 55130, - [SMALL_STATE(1274)] = 55143, - [SMALL_STATE(1275)] = 55156, - [SMALL_STATE(1276)] = 55169, - [SMALL_STATE(1277)] = 55182, - [SMALL_STATE(1278)] = 55195, - [SMALL_STATE(1279)] = 55208, - [SMALL_STATE(1280)] = 55221, - [SMALL_STATE(1281)] = 55234, - [SMALL_STATE(1282)] = 55243, - [SMALL_STATE(1283)] = 55256, - [SMALL_STATE(1284)] = 55269, - [SMALL_STATE(1285)] = 55282, - [SMALL_STATE(1286)] = 55295, - [SMALL_STATE(1287)] = 55308, - [SMALL_STATE(1288)] = 55319, - [SMALL_STATE(1289)] = 55330, - [SMALL_STATE(1290)] = 55343, - [SMALL_STATE(1291)] = 55356, - [SMALL_STATE(1292)] = 55365, - [SMALL_STATE(1293)] = 55378, - [SMALL_STATE(1294)] = 55391, - [SMALL_STATE(1295)] = 55404, - [SMALL_STATE(1296)] = 55417, - [SMALL_STATE(1297)] = 55430, - [SMALL_STATE(1298)] = 55443, - [SMALL_STATE(1299)] = 55456, - [SMALL_STATE(1300)] = 55469, - [SMALL_STATE(1301)] = 55482, - [SMALL_STATE(1302)] = 55495, - [SMALL_STATE(1303)] = 55508, - [SMALL_STATE(1304)] = 55521, - [SMALL_STATE(1305)] = 55532, - [SMALL_STATE(1306)] = 55545, - [SMALL_STATE(1307)] = 55558, - [SMALL_STATE(1308)] = 55569, - [SMALL_STATE(1309)] = 55578, - [SMALL_STATE(1310)] = 55591, - [SMALL_STATE(1311)] = 55604, - [SMALL_STATE(1312)] = 55617, - [SMALL_STATE(1313)] = 55630, - [SMALL_STATE(1314)] = 55643, - [SMALL_STATE(1315)] = 55656, - [SMALL_STATE(1316)] = 55669, - [SMALL_STATE(1317)] = 55682, - [SMALL_STATE(1318)] = 55695, - [SMALL_STATE(1319)] = 55704, - [SMALL_STATE(1320)] = 55717, - [SMALL_STATE(1321)] = 55730, - [SMALL_STATE(1322)] = 55743, - [SMALL_STATE(1323)] = 55752, - [SMALL_STATE(1324)] = 55765, - [SMALL_STATE(1325)] = 55776, - [SMALL_STATE(1326)] = 55789, - [SMALL_STATE(1327)] = 55802, - [SMALL_STATE(1328)] = 55815, - [SMALL_STATE(1329)] = 55828, - [SMALL_STATE(1330)] = 55841, - [SMALL_STATE(1331)] = 55854, - [SMALL_STATE(1332)] = 55867, - [SMALL_STATE(1333)] = 55878, - [SMALL_STATE(1334)] = 55887, - [SMALL_STATE(1335)] = 55900, - [SMALL_STATE(1336)] = 55911, - [SMALL_STATE(1337)] = 55924, - [SMALL_STATE(1338)] = 55937, - [SMALL_STATE(1339)] = 55950, - [SMALL_STATE(1340)] = 55961, - [SMALL_STATE(1341)] = 55970, - [SMALL_STATE(1342)] = 55978, - [SMALL_STATE(1343)] = 55986, - [SMALL_STATE(1344)] = 55994, - [SMALL_STATE(1345)] = 56004, - [SMALL_STATE(1346)] = 56012, - [SMALL_STATE(1347)] = 56020, - [SMALL_STATE(1348)] = 56028, - [SMALL_STATE(1349)] = 56036, - [SMALL_STATE(1350)] = 56044, - [SMALL_STATE(1351)] = 56052, - [SMALL_STATE(1352)] = 56060, - [SMALL_STATE(1353)] = 56068, - [SMALL_STATE(1354)] = 56078, - [SMALL_STATE(1355)] = 56088, - [SMALL_STATE(1356)] = 56096, - [SMALL_STATE(1357)] = 56106, - [SMALL_STATE(1358)] = 56116, - [SMALL_STATE(1359)] = 56126, - [SMALL_STATE(1360)] = 56136, - [SMALL_STATE(1361)] = 56146, - [SMALL_STATE(1362)] = 56154, - [SMALL_STATE(1363)] = 56162, - [SMALL_STATE(1364)] = 56172, - [SMALL_STATE(1365)] = 56180, - [SMALL_STATE(1366)] = 56190, - [SMALL_STATE(1367)] = 56200, - [SMALL_STATE(1368)] = 56208, - [SMALL_STATE(1369)] = 56218, - [SMALL_STATE(1370)] = 56226, - [SMALL_STATE(1371)] = 56236, - [SMALL_STATE(1372)] = 56246, - [SMALL_STATE(1373)] = 56256, - [SMALL_STATE(1374)] = 56264, - [SMALL_STATE(1375)] = 56272, - [SMALL_STATE(1376)] = 56282, - [SMALL_STATE(1377)] = 56292, - [SMALL_STATE(1378)] = 56302, - [SMALL_STATE(1379)] = 56312, - [SMALL_STATE(1380)] = 56320, - [SMALL_STATE(1381)] = 56328, - [SMALL_STATE(1382)] = 56338, - [SMALL_STATE(1383)] = 56346, - [SMALL_STATE(1384)] = 56354, - [SMALL_STATE(1385)] = 56362, - [SMALL_STATE(1386)] = 56370, - [SMALL_STATE(1387)] = 56378, - [SMALL_STATE(1388)] = 56388, - [SMALL_STATE(1389)] = 56396, - [SMALL_STATE(1390)] = 56404, - [SMALL_STATE(1391)] = 56414, - [SMALL_STATE(1392)] = 56422, - [SMALL_STATE(1393)] = 56432, - [SMALL_STATE(1394)] = 56440, - [SMALL_STATE(1395)] = 56448, - [SMALL_STATE(1396)] = 56456, - [SMALL_STATE(1397)] = 56466, - [SMALL_STATE(1398)] = 56474, - [SMALL_STATE(1399)] = 56482, - [SMALL_STATE(1400)] = 56490, - [SMALL_STATE(1401)] = 56498, - [SMALL_STATE(1402)] = 56508, - [SMALL_STATE(1403)] = 56516, - [SMALL_STATE(1404)] = 56524, - [SMALL_STATE(1405)] = 56534, - [SMALL_STATE(1406)] = 56541, - [SMALL_STATE(1407)] = 56548, - [SMALL_STATE(1408)] = 56555, - [SMALL_STATE(1409)] = 56562, - [SMALL_STATE(1410)] = 56569, - [SMALL_STATE(1411)] = 56576, - [SMALL_STATE(1412)] = 56583, - [SMALL_STATE(1413)] = 56590, - [SMALL_STATE(1414)] = 56597, - [SMALL_STATE(1415)] = 56604, - [SMALL_STATE(1416)] = 56611, - [SMALL_STATE(1417)] = 56618, - [SMALL_STATE(1418)] = 56625, - [SMALL_STATE(1419)] = 56632, - [SMALL_STATE(1420)] = 56639, - [SMALL_STATE(1421)] = 56646, - [SMALL_STATE(1422)] = 56653, - [SMALL_STATE(1423)] = 56660, - [SMALL_STATE(1424)] = 56667, - [SMALL_STATE(1425)] = 56674, - [SMALL_STATE(1426)] = 56681, - [SMALL_STATE(1427)] = 56688, - [SMALL_STATE(1428)] = 56695, - [SMALL_STATE(1429)] = 56702, - [SMALL_STATE(1430)] = 56709, - [SMALL_STATE(1431)] = 56716, - [SMALL_STATE(1432)] = 56723, - [SMALL_STATE(1433)] = 56730, - [SMALL_STATE(1434)] = 56737, - [SMALL_STATE(1435)] = 56744, - [SMALL_STATE(1436)] = 56751, - [SMALL_STATE(1437)] = 56758, - [SMALL_STATE(1438)] = 56765, - [SMALL_STATE(1439)] = 56772, - [SMALL_STATE(1440)] = 56779, - [SMALL_STATE(1441)] = 56786, - [SMALL_STATE(1442)] = 56793, - [SMALL_STATE(1443)] = 56800, - [SMALL_STATE(1444)] = 56807, - [SMALL_STATE(1445)] = 56814, - [SMALL_STATE(1446)] = 56821, - [SMALL_STATE(1447)] = 56828, - [SMALL_STATE(1448)] = 56835, - [SMALL_STATE(1449)] = 56842, - [SMALL_STATE(1450)] = 56849, - [SMALL_STATE(1451)] = 56856, - [SMALL_STATE(1452)] = 56863, - [SMALL_STATE(1453)] = 56870, - [SMALL_STATE(1454)] = 56877, - [SMALL_STATE(1455)] = 56884, - [SMALL_STATE(1456)] = 56891, - [SMALL_STATE(1457)] = 56898, - [SMALL_STATE(1458)] = 56905, - [SMALL_STATE(1459)] = 56912, - [SMALL_STATE(1460)] = 56919, - [SMALL_STATE(1461)] = 56926, - [SMALL_STATE(1462)] = 56933, - [SMALL_STATE(1463)] = 56940, - [SMALL_STATE(1464)] = 56947, - [SMALL_STATE(1465)] = 56954, - [SMALL_STATE(1466)] = 56961, - [SMALL_STATE(1467)] = 56968, - [SMALL_STATE(1468)] = 56975, - [SMALL_STATE(1469)] = 56982, - [SMALL_STATE(1470)] = 56989, - [SMALL_STATE(1471)] = 56996, - [SMALL_STATE(1472)] = 57003, - [SMALL_STATE(1473)] = 57010, - [SMALL_STATE(1474)] = 57017, - [SMALL_STATE(1475)] = 57024, - [SMALL_STATE(1476)] = 57031, - [SMALL_STATE(1477)] = 57038, - [SMALL_STATE(1478)] = 57045, - [SMALL_STATE(1479)] = 57052, - [SMALL_STATE(1480)] = 57059, - [SMALL_STATE(1481)] = 57066, - [SMALL_STATE(1482)] = 57073, - [SMALL_STATE(1483)] = 57080, - [SMALL_STATE(1484)] = 57087, - [SMALL_STATE(1485)] = 57094, - [SMALL_STATE(1486)] = 57101, - [SMALL_STATE(1487)] = 57108, - [SMALL_STATE(1488)] = 57115, - [SMALL_STATE(1489)] = 57122, - [SMALL_STATE(1490)] = 57129, - [SMALL_STATE(1491)] = 57136, - [SMALL_STATE(1492)] = 57143, - [SMALL_STATE(1493)] = 57150, - [SMALL_STATE(1494)] = 57157, - [SMALL_STATE(1495)] = 57164, - [SMALL_STATE(1496)] = 57171, - [SMALL_STATE(1497)] = 57178, - [SMALL_STATE(1498)] = 57185, - [SMALL_STATE(1499)] = 57192, - [SMALL_STATE(1500)] = 57199, - [SMALL_STATE(1501)] = 57206, - [SMALL_STATE(1502)] = 57213, - [SMALL_STATE(1503)] = 57220, - [SMALL_STATE(1504)] = 57227, - [SMALL_STATE(1505)] = 57234, - [SMALL_STATE(1506)] = 57241, - [SMALL_STATE(1507)] = 57248, - [SMALL_STATE(1508)] = 57255, - [SMALL_STATE(1509)] = 57262, - [SMALL_STATE(1510)] = 57269, - [SMALL_STATE(1511)] = 57276, - [SMALL_STATE(1512)] = 57283, - [SMALL_STATE(1513)] = 57290, - [SMALL_STATE(1514)] = 57297, - [SMALL_STATE(1515)] = 57304, - [SMALL_STATE(1516)] = 57311, - [SMALL_STATE(1517)] = 57318, - [SMALL_STATE(1518)] = 57325, - [SMALL_STATE(1519)] = 57332, - [SMALL_STATE(1520)] = 57339, - [SMALL_STATE(1521)] = 57346, - [SMALL_STATE(1522)] = 57353, - [SMALL_STATE(1523)] = 57360, - [SMALL_STATE(1524)] = 57367, + [SMALL_STATE(242)] = 8540, + [SMALL_STATE(243)] = 8612, + [SMALL_STATE(244)] = 8710, + [SMALL_STATE(245)] = 8808, + [SMALL_STATE(246)] = 8906, + [SMALL_STATE(247)] = 9004, + [SMALL_STATE(248)] = 9102, + [SMALL_STATE(249)] = 9200, + [SMALL_STATE(250)] = 9298, + [SMALL_STATE(251)] = 9396, + [SMALL_STATE(252)] = 9491, + [SMALL_STATE(253)] = 9586, + [SMALL_STATE(254)] = 9681, + [SMALL_STATE(255)] = 9776, + [SMALL_STATE(256)] = 9871, + [SMALL_STATE(257)] = 9966, + [SMALL_STATE(258)] = 10061, + [SMALL_STATE(259)] = 10156, + [SMALL_STATE(260)] = 10251, + [SMALL_STATE(261)] = 10346, + [SMALL_STATE(262)] = 10441, + [SMALL_STATE(263)] = 10536, + [SMALL_STATE(264)] = 10631, + [SMALL_STATE(265)] = 10704, + [SMALL_STATE(266)] = 10799, + [SMALL_STATE(267)] = 10894, + [SMALL_STATE(268)] = 10967, + [SMALL_STATE(269)] = 11029, + [SMALL_STATE(270)] = 11121, + [SMALL_STATE(271)] = 11213, + [SMALL_STATE(272)] = 11275, + [SMALL_STATE(273)] = 11343, + [SMALL_STATE(274)] = 11411, + [SMALL_STATE(275)] = 11479, + [SMALL_STATE(276)] = 11547, + [SMALL_STATE(277)] = 11615, + [SMALL_STATE(278)] = 11685, + [SMALL_STATE(279)] = 11777, + [SMALL_STATE(280)] = 11845, + [SMALL_STATE(281)] = 11913, + [SMALL_STATE(282)] = 11981, + [SMALL_STATE(283)] = 12043, + [SMALL_STATE(284)] = 12105, + [SMALL_STATE(285)] = 12194, + [SMALL_STATE(286)] = 12283, + [SMALL_STATE(287)] = 12372, + [SMALL_STATE(288)] = 12463, + [SMALL_STATE(289)] = 12552, + [SMALL_STATE(290)] = 12641, + [SMALL_STATE(291)] = 12732, + [SMALL_STATE(292)] = 12789, + [SMALL_STATE(293)] = 12846, + [SMALL_STATE(294)] = 12935, + [SMALL_STATE(295)] = 13026, + [SMALL_STATE(296)] = 13117, + [SMALL_STATE(297)] = 13206, + [SMALL_STATE(298)] = 13273, + [SMALL_STATE(299)] = 13362, + [SMALL_STATE(300)] = 13451, + [SMALL_STATE(301)] = 13542, + [SMALL_STATE(302)] = 13631, + [SMALL_STATE(303)] = 13694, + [SMALL_STATE(304)] = 13751, + [SMALL_STATE(305)] = 13840, + [SMALL_STATE(306)] = 13897, + [SMALL_STATE(307)] = 13954, + [SMALL_STATE(308)] = 14043, + [SMALL_STATE(309)] = 14100, + [SMALL_STATE(310)] = 14189, + [SMALL_STATE(311)] = 14280, + [SMALL_STATE(312)] = 14337, + [SMALL_STATE(313)] = 14394, + [SMALL_STATE(314)] = 14457, + [SMALL_STATE(315)] = 14514, + [SMALL_STATE(316)] = 14571, + [SMALL_STATE(317)] = 14662, + [SMALL_STATE(318)] = 14718, + [SMALL_STATE(319)] = 14774, + [SMALL_STATE(320)] = 14830, + [SMALL_STATE(321)] = 14886, + [SMALL_STATE(322)] = 14942, + [SMALL_STATE(323)] = 14998, + [SMALL_STATE(324)] = 15054, + [SMALL_STATE(325)] = 15142, + [SMALL_STATE(326)] = 15198, + [SMALL_STATE(327)] = 15258, + [SMALL_STATE(328)] = 15314, + [SMALL_STATE(329)] = 15378, + [SMALL_STATE(330)] = 15434, + [SMALL_STATE(331)] = 15490, + [SMALL_STATE(332)] = 15546, + [SMALL_STATE(333)] = 15602, + [SMALL_STATE(334)] = 15658, + [SMALL_STATE(335)] = 15714, + [SMALL_STATE(336)] = 15770, + [SMALL_STATE(337)] = 15826, + [SMALL_STATE(338)] = 15882, + [SMALL_STATE(339)] = 15938, + [SMALL_STATE(340)] = 15994, + [SMALL_STATE(341)] = 16050, + [SMALL_STATE(342)] = 16106, + [SMALL_STATE(343)] = 16162, + [SMALL_STATE(344)] = 16250, + [SMALL_STATE(345)] = 16338, + [SMALL_STATE(346)] = 16426, + [SMALL_STATE(347)] = 16482, + [SMALL_STATE(348)] = 16570, + [SMALL_STATE(349)] = 16626, + [SMALL_STATE(350)] = 16682, + [SMALL_STATE(351)] = 16738, + [SMALL_STATE(352)] = 16794, + [SMALL_STATE(353)] = 16854, + [SMALL_STATE(354)] = 16942, + [SMALL_STATE(355)] = 17002, + [SMALL_STATE(356)] = 17058, + [SMALL_STATE(357)] = 17122, + [SMALL_STATE(358)] = 17178, + [SMALL_STATE(359)] = 17234, + [SMALL_STATE(360)] = 17290, + [SMALL_STATE(361)] = 17378, + [SMALL_STATE(362)] = 17466, + [SMALL_STATE(363)] = 17554, + [SMALL_STATE(364)] = 17610, + [SMALL_STATE(365)] = 17698, + [SMALL_STATE(366)] = 17754, + [SMALL_STATE(367)] = 17810, + [SMALL_STATE(368)] = 17874, + [SMALL_STATE(369)] = 17930, + [SMALL_STATE(370)] = 17986, + [SMALL_STATE(371)] = 18042, + [SMALL_STATE(372)] = 18098, + [SMALL_STATE(373)] = 18154, + [SMALL_STATE(374)] = 18210, + [SMALL_STATE(375)] = 18266, + [SMALL_STATE(376)] = 18354, + [SMALL_STATE(377)] = 18410, + [SMALL_STATE(378)] = 18466, + [SMALL_STATE(379)] = 18522, + [SMALL_STATE(380)] = 18578, + [SMALL_STATE(381)] = 18666, + [SMALL_STATE(382)] = 18754, + [SMALL_STATE(383)] = 18810, + [SMALL_STATE(384)] = 18898, + [SMALL_STATE(385)] = 18958, + [SMALL_STATE(386)] = 19022, + [SMALL_STATE(387)] = 19081, + [SMALL_STATE(388)] = 19166, + [SMALL_STATE(389)] = 19251, + [SMALL_STATE(390)] = 19336, + [SMALL_STATE(391)] = 19421, + [SMALL_STATE(392)] = 19506, + [SMALL_STATE(393)] = 19567, + [SMALL_STATE(394)] = 19652, + [SMALL_STATE(395)] = 19737, + [SMALL_STATE(396)] = 19796, + [SMALL_STATE(397)] = 19881, + [SMALL_STATE(398)] = 19966, + [SMALL_STATE(399)] = 20021, + [SMALL_STATE(400)] = 20108, + [SMALL_STATE(401)] = 20193, + [SMALL_STATE(402)] = 20278, + [SMALL_STATE(403)] = 20337, + [SMALL_STATE(404)] = 20422, + [SMALL_STATE(405)] = 20507, + [SMALL_STATE(406)] = 20592, + [SMALL_STATE(407)] = 20677, + [SMALL_STATE(408)] = 20762, + [SMALL_STATE(409)] = 20847, + [SMALL_STATE(410)] = 20932, + [SMALL_STATE(411)] = 21017, + [SMALL_STATE(412)] = 21102, + [SMALL_STATE(413)] = 21187, + [SMALL_STATE(414)] = 21272, + [SMALL_STATE(415)] = 21357, + [SMALL_STATE(416)] = 21416, + [SMALL_STATE(417)] = 21501, + [SMALL_STATE(418)] = 21586, + [SMALL_STATE(419)] = 21671, + [SMALL_STATE(420)] = 21726, + [SMALL_STATE(421)] = 21811, + [SMALL_STATE(422)] = 21870, + [SMALL_STATE(423)] = 21955, + [SMALL_STATE(424)] = 22016, + [SMALL_STATE(425)] = 22101, + [SMALL_STATE(426)] = 22186, + [SMALL_STATE(427)] = 22271, + [SMALL_STATE(428)] = 22330, + [SMALL_STATE(429)] = 22415, + [SMALL_STATE(430)] = 22500, + [SMALL_STATE(431)] = 22585, + [SMALL_STATE(432)] = 22670, + [SMALL_STATE(433)] = 22755, + [SMALL_STATE(434)] = 22840, + [SMALL_STATE(435)] = 22925, + [SMALL_STATE(436)] = 23010, + [SMALL_STATE(437)] = 23069, + [SMALL_STATE(438)] = 23154, + [SMALL_STATE(439)] = 23213, + [SMALL_STATE(440)] = 23272, + [SMALL_STATE(441)] = 23357, + [SMALL_STATE(442)] = 23442, + [SMALL_STATE(443)] = 23527, + [SMALL_STATE(444)] = 23612, + [SMALL_STATE(445)] = 23673, + [SMALL_STATE(446)] = 23732, + [SMALL_STATE(447)] = 23817, + [SMALL_STATE(448)] = 23902, + [SMALL_STATE(449)] = 23987, + [SMALL_STATE(450)] = 24072, + [SMALL_STATE(451)] = 24157, + [SMALL_STATE(452)] = 24242, + [SMALL_STATE(453)] = 24327, + [SMALL_STATE(454)] = 24382, + [SMALL_STATE(455)] = 24441, + [SMALL_STATE(456)] = 24500, + [SMALL_STATE(457)] = 24559, + [SMALL_STATE(458)] = 24644, + [SMALL_STATE(459)] = 24729, + [SMALL_STATE(460)] = 24814, + [SMALL_STATE(461)] = 24899, + [SMALL_STATE(462)] = 24958, + [SMALL_STATE(463)] = 25043, + [SMALL_STATE(464)] = 25098, + [SMALL_STATE(465)] = 25183, + [SMALL_STATE(466)] = 25268, + [SMALL_STATE(467)] = 25353, + [SMALL_STATE(468)] = 25438, + [SMALL_STATE(469)] = 25523, + [SMALL_STATE(470)] = 25608, + [SMALL_STATE(471)] = 25669, + [SMALL_STATE(472)] = 25754, + [SMALL_STATE(473)] = 25839, + [SMALL_STATE(474)] = 25924, + [SMALL_STATE(475)] = 26009, + [SMALL_STATE(476)] = 26094, + [SMALL_STATE(477)] = 26153, + [SMALL_STATE(478)] = 26238, + [SMALL_STATE(479)] = 26297, + [SMALL_STATE(480)] = 26382, + [SMALL_STATE(481)] = 26467, + [SMALL_STATE(482)] = 26522, + [SMALL_STATE(483)] = 26577, + [SMALL_STATE(484)] = 26662, + [SMALL_STATE(485)] = 26747, + [SMALL_STATE(486)] = 26832, + [SMALL_STATE(487)] = 26886, + [SMALL_STATE(488)] = 26940, + [SMALL_STATE(489)] = 26994, + [SMALL_STATE(490)] = 27048, + [SMALL_STATE(491)] = 27102, + [SMALL_STATE(492)] = 27156, + [SMALL_STATE(493)] = 27210, + [SMALL_STATE(494)] = 27264, + [SMALL_STATE(495)] = 27318, + [SMALL_STATE(496)] = 27372, + [SMALL_STATE(497)] = 27426, + [SMALL_STATE(498)] = 27480, + [SMALL_STATE(499)] = 27533, + [SMALL_STATE(500)] = 27586, + [SMALL_STATE(501)] = 27639, + [SMALL_STATE(502)] = 27692, + [SMALL_STATE(503)] = 27745, + [SMALL_STATE(504)] = 27798, + [SMALL_STATE(505)] = 27851, + [SMALL_STATE(506)] = 27904, + [SMALL_STATE(507)] = 27957, + [SMALL_STATE(508)] = 28010, + [SMALL_STATE(509)] = 28063, + [SMALL_STATE(510)] = 28116, + [SMALL_STATE(511)] = 28169, + [SMALL_STATE(512)] = 28222, + [SMALL_STATE(513)] = 28275, + [SMALL_STATE(514)] = 28328, + [SMALL_STATE(515)] = 28381, + [SMALL_STATE(516)] = 28434, + [SMALL_STATE(517)] = 28487, + [SMALL_STATE(518)] = 28540, + [SMALL_STATE(519)] = 28593, + [SMALL_STATE(520)] = 28646, + [SMALL_STATE(521)] = 28699, + [SMALL_STATE(522)] = 28752, + [SMALL_STATE(523)] = 28805, + [SMALL_STATE(524)] = 28858, + [SMALL_STATE(525)] = 28911, + [SMALL_STATE(526)] = 28964, + [SMALL_STATE(527)] = 29017, + [SMALL_STATE(528)] = 29070, + [SMALL_STATE(529)] = 29123, + [SMALL_STATE(530)] = 29176, + [SMALL_STATE(531)] = 29229, + [SMALL_STATE(532)] = 29282, + [SMALL_STATE(533)] = 29335, + [SMALL_STATE(534)] = 29388, + [SMALL_STATE(535)] = 29441, + [SMALL_STATE(536)] = 29494, + [SMALL_STATE(537)] = 29547, + [SMALL_STATE(538)] = 29600, + [SMALL_STATE(539)] = 29653, + [SMALL_STATE(540)] = 29706, + [SMALL_STATE(541)] = 29759, + [SMALL_STATE(542)] = 29812, + [SMALL_STATE(543)] = 29865, + [SMALL_STATE(544)] = 29918, + [SMALL_STATE(545)] = 29971, + [SMALL_STATE(546)] = 30024, + [SMALL_STATE(547)] = 30077, + [SMALL_STATE(548)] = 30130, + [SMALL_STATE(549)] = 30183, + [SMALL_STATE(550)] = 30236, + [SMALL_STATE(551)] = 30289, + [SMALL_STATE(552)] = 30342, + [SMALL_STATE(553)] = 30395, + [SMALL_STATE(554)] = 30448, + [SMALL_STATE(555)] = 30501, + [SMALL_STATE(556)] = 30554, + [SMALL_STATE(557)] = 30607, + [SMALL_STATE(558)] = 30660, + [SMALL_STATE(559)] = 30713, + [SMALL_STATE(560)] = 30766, + [SMALL_STATE(561)] = 30819, + [SMALL_STATE(562)] = 30872, + [SMALL_STATE(563)] = 30925, + [SMALL_STATE(564)] = 30978, + [SMALL_STATE(565)] = 31031, + [SMALL_STATE(566)] = 31084, + [SMALL_STATE(567)] = 31137, + [SMALL_STATE(568)] = 31190, + [SMALL_STATE(569)] = 31243, + [SMALL_STATE(570)] = 31296, + [SMALL_STATE(571)] = 31349, + [SMALL_STATE(572)] = 31402, + [SMALL_STATE(573)] = 31455, + [SMALL_STATE(574)] = 31508, + [SMALL_STATE(575)] = 31561, + [SMALL_STATE(576)] = 31614, + [SMALL_STATE(577)] = 31667, + [SMALL_STATE(578)] = 31720, + [SMALL_STATE(579)] = 31773, + [SMALL_STATE(580)] = 31826, + [SMALL_STATE(581)] = 31879, + [SMALL_STATE(582)] = 31932, + [SMALL_STATE(583)] = 31985, + [SMALL_STATE(584)] = 32038, + [SMALL_STATE(585)] = 32091, + [SMALL_STATE(586)] = 32144, + [SMALL_STATE(587)] = 32197, + [SMALL_STATE(588)] = 32250, + [SMALL_STATE(589)] = 32303, + [SMALL_STATE(590)] = 32356, + [SMALL_STATE(591)] = 32409, + [SMALL_STATE(592)] = 32462, + [SMALL_STATE(593)] = 32515, + [SMALL_STATE(594)] = 32568, + [SMALL_STATE(595)] = 32621, + [SMALL_STATE(596)] = 32674, + [SMALL_STATE(597)] = 32758, + [SMALL_STATE(598)] = 32840, + [SMALL_STATE(599)] = 32922, + [SMALL_STATE(600)] = 33003, + [SMALL_STATE(601)] = 33058, + [SMALL_STATE(602)] = 33113, + [SMALL_STATE(603)] = 33194, + [SMALL_STATE(604)] = 33275, + [SMALL_STATE(605)] = 33356, + [SMALL_STATE(606)] = 33437, + [SMALL_STATE(607)] = 33518, + [SMALL_STATE(608)] = 33573, + [SMALL_STATE(609)] = 33651, + [SMALL_STATE(610)] = 33729, + [SMALL_STATE(611)] = 33778, + [SMALL_STATE(612)] = 33827, + [SMALL_STATE(613)] = 33875, + [SMALL_STATE(614)] = 33923, + [SMALL_STATE(615)] = 33971, + [SMALL_STATE(616)] = 34019, + [SMALL_STATE(617)] = 34067, + [SMALL_STATE(618)] = 34115, + [SMALL_STATE(619)] = 34163, + [SMALL_STATE(620)] = 34211, + [SMALL_STATE(621)] = 34259, + [SMALL_STATE(622)] = 34341, + [SMALL_STATE(623)] = 34389, + [SMALL_STATE(624)] = 34461, + [SMALL_STATE(625)] = 34509, + [SMALL_STATE(626)] = 34557, + [SMALL_STATE(627)] = 34605, + [SMALL_STATE(628)] = 34653, + [SMALL_STATE(629)] = 34701, + [SMALL_STATE(630)] = 34749, + [SMALL_STATE(631)] = 34831, + [SMALL_STATE(632)] = 34879, + [SMALL_STATE(633)] = 34927, + [SMALL_STATE(634)] = 34975, + [SMALL_STATE(635)] = 35023, + [SMALL_STATE(636)] = 35071, + [SMALL_STATE(637)] = 35119, + [SMALL_STATE(638)] = 35167, + [SMALL_STATE(639)] = 35215, + [SMALL_STATE(640)] = 35263, + [SMALL_STATE(641)] = 35311, + [SMALL_STATE(642)] = 35359, + [SMALL_STATE(643)] = 35407, + [SMALL_STATE(644)] = 35455, + [SMALL_STATE(645)] = 35503, + [SMALL_STATE(646)] = 35551, + [SMALL_STATE(647)] = 35608, + [SMALL_STATE(648)] = 35679, + [SMALL_STATE(649)] = 35742, + [SMALL_STATE(650)] = 35799, + [SMALL_STATE(651)] = 35862, + [SMALL_STATE(652)] = 35933, + [SMALL_STATE(653)] = 36002, + [SMALL_STATE(654)] = 36073, + [SMALL_STATE(655)] = 36144, + [SMALL_STATE(656)] = 36201, + [SMALL_STATE(657)] = 36268, + [SMALL_STATE(658)] = 36325, + [SMALL_STATE(659)] = 36396, + [SMALL_STATE(660)] = 36463, + [SMALL_STATE(661)] = 36534, + [SMALL_STATE(662)] = 36595, + [SMALL_STATE(663)] = 36660, + [SMALL_STATE(664)] = 36717, + [SMALL_STATE(665)] = 36786, + [SMALL_STATE(666)] = 36847, + [SMALL_STATE(667)] = 36912, + [SMALL_STATE(668)] = 36969, + [SMALL_STATE(669)] = 37035, + [SMALL_STATE(670)] = 37101, + [SMALL_STATE(671)] = 37149, + [SMALL_STATE(672)] = 37195, + [SMALL_STATE(673)] = 37261, + [SMALL_STATE(674)] = 37309, + [SMALL_STATE(675)] = 37359, + [SMALL_STATE(676)] = 37405, + [SMALL_STATE(677)] = 37453, + [SMALL_STATE(678)] = 37501, + [SMALL_STATE(679)] = 37551, + [SMALL_STATE(680)] = 37617, + [SMALL_STATE(681)] = 37666, + [SMALL_STATE(682)] = 37733, + [SMALL_STATE(683)] = 37796, + [SMALL_STATE(684)] = 37845, + [SMALL_STATE(685)] = 37912, + [SMALL_STATE(686)] = 37975, + [SMALL_STATE(687)] = 38038, + [SMALL_STATE(688)] = 38101, + [SMALL_STATE(689)] = 38164, + [SMALL_STATE(690)] = 38227, + [SMALL_STATE(691)] = 38290, + [SMALL_STATE(692)] = 38353, + [SMALL_STATE(693)] = 38402, + [SMALL_STATE(694)] = 38465, + [SMALL_STATE(695)] = 38528, + [SMALL_STATE(696)] = 38591, + [SMALL_STATE(697)] = 38654, + [SMALL_STATE(698)] = 38717, + [SMALL_STATE(699)] = 38780, + [SMALL_STATE(700)] = 38843, + [SMALL_STATE(701)] = 38906, + [SMALL_STATE(702)] = 38951, + [SMALL_STATE(703)] = 39014, + [SMALL_STATE(704)] = 39059, + [SMALL_STATE(705)] = 39122, + [SMALL_STATE(706)] = 39185, + [SMALL_STATE(707)] = 39248, + [SMALL_STATE(708)] = 39311, + [SMALL_STATE(709)] = 39374, + [SMALL_STATE(710)] = 39437, + [SMALL_STATE(711)] = 39516, + [SMALL_STATE(712)] = 39579, + [SMALL_STATE(713)] = 39642, + [SMALL_STATE(714)] = 39705, + [SMALL_STATE(715)] = 39768, + [SMALL_STATE(716)] = 39831, + [SMALL_STATE(717)] = 39894, + [SMALL_STATE(718)] = 39957, + [SMALL_STATE(719)] = 40020, + [SMALL_STATE(720)] = 40083, + [SMALL_STATE(721)] = 40146, + [SMALL_STATE(722)] = 40209, + [SMALL_STATE(723)] = 40272, + [SMALL_STATE(724)] = 40335, + [SMALL_STATE(725)] = 40398, + [SMALL_STATE(726)] = 40461, + [SMALL_STATE(727)] = 40524, + [SMALL_STATE(728)] = 40587, + [SMALL_STATE(729)] = 40650, + [SMALL_STATE(730)] = 40713, + [SMALL_STATE(731)] = 40776, + [SMALL_STATE(732)] = 40839, + [SMALL_STATE(733)] = 40899, + [SMALL_STATE(734)] = 40965, + [SMALL_STATE(735)] = 41019, + [SMALL_STATE(736)] = 41063, + [SMALL_STATE(737)] = 41117, + [SMALL_STATE(738)] = 41171, + [SMALL_STATE(739)] = 41239, + [SMALL_STATE(740)] = 41287, + [SMALL_STATE(741)] = 41363, + [SMALL_STATE(742)] = 41425, + [SMALL_STATE(743)] = 41489, + [SMALL_STATE(744)] = 41533, + [SMALL_STATE(745)] = 41601, + [SMALL_STATE(746)] = 41669, + [SMALL_STATE(747)] = 41727, + [SMALL_STATE(748)] = 41772, + [SMALL_STATE(749)] = 41835, + [SMALL_STATE(750)] = 41880, + [SMALL_STATE(751)] = 41947, + [SMALL_STATE(752)] = 41992, + [SMALL_STATE(753)] = 42059, + [SMALL_STATE(754)] = 42124, + [SMALL_STATE(755)] = 42181, + [SMALL_STATE(756)] = 42234, + [SMALL_STATE(757)] = 42279, + [SMALL_STATE(758)] = 42322, + [SMALL_STATE(759)] = 42369, + [SMALL_STATE(760)] = 42422, + [SMALL_STATE(761)] = 42469, + [SMALL_STATE(762)] = 42516, + [SMALL_STATE(763)] = 42561, + [SMALL_STATE(764)] = 42622, + [SMALL_STATE(765)] = 42689, + [SMALL_STATE(766)] = 42748, + [SMALL_STATE(767)] = 42791, + [SMALL_STATE(768)] = 42836, + [SMALL_STATE(769)] = 42881, + [SMALL_STATE(770)] = 42928, + [SMALL_STATE(771)] = 42973, + [SMALL_STATE(772)] = 43026, + [SMALL_STATE(773)] = 43068, + [SMALL_STATE(774)] = 43110, + [SMALL_STATE(775)] = 43152, + [SMALL_STATE(776)] = 43196, + [SMALL_STATE(777)] = 43238, + [SMALL_STATE(778)] = 43280, + [SMALL_STATE(779)] = 43322, + [SMALL_STATE(780)] = 43364, + [SMALL_STATE(781)] = 43406, + [SMALL_STATE(782)] = 43448, + [SMALL_STATE(783)] = 43490, + [SMALL_STATE(784)] = 43532, + [SMALL_STATE(785)] = 43574, + [SMALL_STATE(786)] = 43616, + [SMALL_STATE(787)] = 43658, + [SMALL_STATE(788)] = 43700, + [SMALL_STATE(789)] = 43742, + [SMALL_STATE(790)] = 43784, + [SMALL_STATE(791)] = 43826, + [SMALL_STATE(792)] = 43868, + [SMALL_STATE(793)] = 43910, + [SMALL_STATE(794)] = 43952, + [SMALL_STATE(795)] = 43994, + [SMALL_STATE(796)] = 44036, + [SMALL_STATE(797)] = 44078, + [SMALL_STATE(798)] = 44122, + [SMALL_STATE(799)] = 44164, + [SMALL_STATE(800)] = 44206, + [SMALL_STATE(801)] = 44250, + [SMALL_STATE(802)] = 44292, + [SMALL_STATE(803)] = 44336, + [SMALL_STATE(804)] = 44378, + [SMALL_STATE(805)] = 44420, + [SMALL_STATE(806)] = 44462, + [SMALL_STATE(807)] = 44504, + [SMALL_STATE(808)] = 44546, + [SMALL_STATE(809)] = 44588, + [SMALL_STATE(810)] = 44632, + [SMALL_STATE(811)] = 44673, + [SMALL_STATE(812)] = 44714, + [SMALL_STATE(813)] = 44755, + [SMALL_STATE(814)] = 44796, + [SMALL_STATE(815)] = 44837, + [SMALL_STATE(816)] = 44878, + [SMALL_STATE(817)] = 44919, + [SMALL_STATE(818)] = 44960, + [SMALL_STATE(819)] = 45001, + [SMALL_STATE(820)] = 45042, + [SMALL_STATE(821)] = 45083, + [SMALL_STATE(822)] = 45124, + [SMALL_STATE(823)] = 45165, + [SMALL_STATE(824)] = 45206, + [SMALL_STATE(825)] = 45247, + [SMALL_STATE(826)] = 45288, + [SMALL_STATE(827)] = 45329, + [SMALL_STATE(828)] = 45370, + [SMALL_STATE(829)] = 45411, + [SMALL_STATE(830)] = 45452, + [SMALL_STATE(831)] = 45493, + [SMALL_STATE(832)] = 45538, + [SMALL_STATE(833)] = 45579, + [SMALL_STATE(834)] = 45620, + [SMALL_STATE(835)] = 45661, + [SMALL_STATE(836)] = 45702, + [SMALL_STATE(837)] = 45743, + [SMALL_STATE(838)] = 45784, + [SMALL_STATE(839)] = 45825, + [SMALL_STATE(840)] = 45866, + [SMALL_STATE(841)] = 45907, + [SMALL_STATE(842)] = 45948, + [SMALL_STATE(843)] = 45989, + [SMALL_STATE(844)] = 46030, + [SMALL_STATE(845)] = 46071, + [SMALL_STATE(846)] = 46112, + [SMALL_STATE(847)] = 46153, + [SMALL_STATE(848)] = 46194, + [SMALL_STATE(849)] = 46235, + [SMALL_STATE(850)] = 46280, + [SMALL_STATE(851)] = 46354, + [SMALL_STATE(852)] = 46428, + [SMALL_STATE(853)] = 46502, + [SMALL_STATE(854)] = 46576, + [SMALL_STATE(855)] = 46647, + [SMALL_STATE(856)] = 46718, + [SMALL_STATE(857)] = 46789, + [SMALL_STATE(858)] = 46860, + [SMALL_STATE(859)] = 46933, + [SMALL_STATE(860)] = 47004, + [SMALL_STATE(861)] = 47076, + [SMALL_STATE(862)] = 47144, + [SMALL_STATE(863)] = 47216, + [SMALL_STATE(864)] = 47288, + [SMALL_STATE(865)] = 47354, + [SMALL_STATE(866)] = 47417, + [SMALL_STATE(867)] = 47480, + [SMALL_STATE(868)] = 47535, + [SMALL_STATE(869)] = 47590, + [SMALL_STATE(870)] = 47630, + [SMALL_STATE(871)] = 47670, + [SMALL_STATE(872)] = 47710, + [SMALL_STATE(873)] = 47750, + [SMALL_STATE(874)] = 47780, + [SMALL_STATE(875)] = 47809, + [SMALL_STATE(876)] = 47834, + [SMALL_STATE(877)] = 47859, + [SMALL_STATE(878)] = 47884, + [SMALL_STATE(879)] = 47909, + [SMALL_STATE(880)] = 47946, + [SMALL_STATE(881)] = 47983, + [SMALL_STATE(882)] = 48012, + [SMALL_STATE(883)] = 48046, + [SMALL_STATE(884)] = 48092, + [SMALL_STATE(885)] = 48126, + [SMALL_STATE(886)] = 48154, + [SMALL_STATE(887)] = 48197, + [SMALL_STATE(888)] = 48228, + [SMALL_STATE(889)] = 48271, + [SMALL_STATE(890)] = 48314, + [SMALL_STATE(891)] = 48357, + [SMALL_STATE(892)] = 48400, + [SMALL_STATE(893)] = 48446, + [SMALL_STATE(894)] = 48492, + [SMALL_STATE(895)] = 48538, + [SMALL_STATE(896)] = 48578, + [SMALL_STATE(897)] = 48615, + [SMALL_STATE(898)] = 48652, + [SMALL_STATE(899)] = 48677, + [SMALL_STATE(900)] = 48714, + [SMALL_STATE(901)] = 48751, + [SMALL_STATE(902)] = 48773, + [SMALL_STATE(903)] = 48807, + [SMALL_STATE(904)] = 48829, + [SMALL_STATE(905)] = 48863, + [SMALL_STATE(906)] = 48885, + [SMALL_STATE(907)] = 48922, + [SMALL_STATE(908)] = 48944, + [SMALL_STATE(909)] = 48967, + [SMALL_STATE(910)] = 48998, + [SMALL_STATE(911)] = 49029, + [SMALL_STATE(912)] = 49066, + [SMALL_STATE(913)] = 49089, + [SMALL_STATE(914)] = 49126, + [SMALL_STATE(915)] = 49157, + [SMALL_STATE(916)] = 49180, + [SMALL_STATE(917)] = 49201, + [SMALL_STATE(918)] = 49224, + [SMALL_STATE(919)] = 49247, + [SMALL_STATE(920)] = 49272, + [SMALL_STATE(921)] = 49303, + [SMALL_STATE(922)] = 49334, + [SMALL_STATE(923)] = 49357, + [SMALL_STATE(924)] = 49388, + [SMALL_STATE(925)] = 49409, + [SMALL_STATE(926)] = 49434, + [SMALL_STATE(927)] = 49465, + [SMALL_STATE(928)] = 49496, + [SMALL_STATE(929)] = 49523, + [SMALL_STATE(930)] = 49560, + [SMALL_STATE(931)] = 49583, + [SMALL_STATE(932)] = 49608, + [SMALL_STATE(933)] = 49645, + [SMALL_STATE(934)] = 49666, + [SMALL_STATE(935)] = 49683, + [SMALL_STATE(936)] = 49706, + [SMALL_STATE(937)] = 49737, + [SMALL_STATE(938)] = 49758, + [SMALL_STATE(939)] = 49779, + [SMALL_STATE(940)] = 49798, + [SMALL_STATE(941)] = 49832, + [SMALL_STATE(942)] = 49854, + [SMALL_STATE(943)] = 49888, + [SMALL_STATE(944)] = 49910, + [SMALL_STATE(945)] = 49944, + [SMALL_STATE(946)] = 49978, + [SMALL_STATE(947)] = 49996, + [SMALL_STATE(948)] = 50030, + [SMALL_STATE(949)] = 50064, + [SMALL_STATE(950)] = 50086, + [SMALL_STATE(951)] = 50120, + [SMALL_STATE(952)] = 50138, + [SMALL_STATE(953)] = 50160, + [SMALL_STATE(954)] = 50194, + [SMALL_STATE(955)] = 50228, + [SMALL_STATE(956)] = 50251, + [SMALL_STATE(957)] = 50270, + [SMALL_STATE(958)] = 50289, + [SMALL_STATE(959)] = 50312, + [SMALL_STATE(960)] = 50331, + [SMALL_STATE(961)] = 50350, + [SMALL_STATE(962)] = 50375, + [SMALL_STATE(963)] = 50394, + [SMALL_STATE(964)] = 50413, + [SMALL_STATE(965)] = 50436, + [SMALL_STATE(966)] = 50456, + [SMALL_STATE(967)] = 50470, + [SMALL_STATE(968)] = 50494, + [SMALL_STATE(969)] = 50508, + [SMALL_STATE(970)] = 50534, + [SMALL_STATE(971)] = 50548, + [SMALL_STATE(972)] = 50562, + [SMALL_STATE(973)] = 50578, + [SMALL_STATE(974)] = 50596, + [SMALL_STATE(975)] = 50610, + [SMALL_STATE(976)] = 50628, + [SMALL_STATE(977)] = 50652, + [SMALL_STATE(978)] = 50666, + [SMALL_STATE(979)] = 50680, + [SMALL_STATE(980)] = 50694, + [SMALL_STATE(981)] = 50708, + [SMALL_STATE(982)] = 50732, + [SMALL_STATE(983)] = 50746, + [SMALL_STATE(984)] = 50760, + [SMALL_STATE(985)] = 50774, + [SMALL_STATE(986)] = 50788, + [SMALL_STATE(987)] = 50802, + [SMALL_STATE(988)] = 50816, + [SMALL_STATE(989)] = 50836, + [SMALL_STATE(990)] = 50854, + [SMALL_STATE(991)] = 50876, + [SMALL_STATE(992)] = 50890, + [SMALL_STATE(993)] = 50908, + [SMALL_STATE(994)] = 50926, + [SMALL_STATE(995)] = 50940, + [SMALL_STATE(996)] = 50954, + [SMALL_STATE(997)] = 50972, + [SMALL_STATE(998)] = 50990, + [SMALL_STATE(999)] = 51012, + [SMALL_STATE(1000)] = 51030, + [SMALL_STATE(1001)] = 51044, + [SMALL_STATE(1002)] = 51068, + [SMALL_STATE(1003)] = 51092, + [SMALL_STATE(1004)] = 51106, + [SMALL_STATE(1005)] = 51130, + [SMALL_STATE(1006)] = 51148, + [SMALL_STATE(1007)] = 51166, + [SMALL_STATE(1008)] = 51180, + [SMALL_STATE(1009)] = 51198, + [SMALL_STATE(1010)] = 51212, + [SMALL_STATE(1011)] = 51234, + [SMALL_STATE(1012)] = 51248, + [SMALL_STATE(1013)] = 51262, + [SMALL_STATE(1014)] = 51282, + [SMALL_STATE(1015)] = 51298, + [SMALL_STATE(1016)] = 51316, + [SMALL_STATE(1017)] = 51330, + [SMALL_STATE(1018)] = 51343, + [SMALL_STATE(1019)] = 51368, + [SMALL_STATE(1020)] = 51387, + [SMALL_STATE(1021)] = 51410, + [SMALL_STATE(1022)] = 51433, + [SMALL_STATE(1023)] = 51456, + [SMALL_STATE(1024)] = 51481, + [SMALL_STATE(1025)] = 51506, + [SMALL_STATE(1026)] = 51531, + [SMALL_STATE(1027)] = 51552, + [SMALL_STATE(1028)] = 51571, + [SMALL_STATE(1029)] = 51590, + [SMALL_STATE(1030)] = 51607, + [SMALL_STATE(1031)] = 51626, + [SMALL_STATE(1032)] = 51641, + [SMALL_STATE(1033)] = 51658, + [SMALL_STATE(1034)] = 51677, + [SMALL_STATE(1035)] = 51694, + [SMALL_STATE(1036)] = 51717, + [SMALL_STATE(1037)] = 51740, + [SMALL_STATE(1038)] = 51763, + [SMALL_STATE(1039)] = 51778, + [SMALL_STATE(1040)] = 51803, + [SMALL_STATE(1041)] = 51822, + [SMALL_STATE(1042)] = 51845, + [SMALL_STATE(1043)] = 51864, + [SMALL_STATE(1044)] = 51877, + [SMALL_STATE(1045)] = 51896, + [SMALL_STATE(1046)] = 51909, + [SMALL_STATE(1047)] = 51922, + [SMALL_STATE(1048)] = 51947, + [SMALL_STATE(1049)] = 51966, + [SMALL_STATE(1050)] = 51989, + [SMALL_STATE(1051)] = 52014, + [SMALL_STATE(1052)] = 52033, + [SMALL_STATE(1053)] = 52046, + [SMALL_STATE(1054)] = 52059, + [SMALL_STATE(1055)] = 52072, + [SMALL_STATE(1056)] = 52095, + [SMALL_STATE(1057)] = 52114, + [SMALL_STATE(1058)] = 52127, + [SMALL_STATE(1059)] = 52149, + [SMALL_STATE(1060)] = 52165, + [SMALL_STATE(1061)] = 52179, + [SMALL_STATE(1062)] = 52199, + [SMALL_STATE(1063)] = 52221, + [SMALL_STATE(1064)] = 52237, + [SMALL_STATE(1065)] = 52255, + [SMALL_STATE(1066)] = 52273, + [SMALL_STATE(1067)] = 52291, + [SMALL_STATE(1068)] = 52307, + [SMALL_STATE(1069)] = 52321, + [SMALL_STATE(1070)] = 52339, + [SMALL_STATE(1071)] = 52355, + [SMALL_STATE(1072)] = 52375, + [SMALL_STATE(1073)] = 52389, + [SMALL_STATE(1074)] = 52409, + [SMALL_STATE(1075)] = 52431, + [SMALL_STATE(1076)] = 52449, + [SMALL_STATE(1077)] = 52465, + [SMALL_STATE(1078)] = 52485, + [SMALL_STATE(1079)] = 52503, + [SMALL_STATE(1080)] = 52525, + [SMALL_STATE(1081)] = 52547, + [SMALL_STATE(1082)] = 52561, + [SMALL_STATE(1083)] = 52581, + [SMALL_STATE(1084)] = 52599, + [SMALL_STATE(1085)] = 52611, + [SMALL_STATE(1086)] = 52627, + [SMALL_STATE(1087)] = 52649, + [SMALL_STATE(1088)] = 52665, + [SMALL_STATE(1089)] = 52679, + [SMALL_STATE(1090)] = 52693, + [SMALL_STATE(1091)] = 52713, + [SMALL_STATE(1092)] = 52725, + [SMALL_STATE(1093)] = 52747, + [SMALL_STATE(1094)] = 52764, + [SMALL_STATE(1095)] = 52781, + [SMALL_STATE(1096)] = 52798, + [SMALL_STATE(1097)] = 52813, + [SMALL_STATE(1098)] = 52824, + [SMALL_STATE(1099)] = 52841, + [SMALL_STATE(1100)] = 52858, + [SMALL_STATE(1101)] = 52877, + [SMALL_STATE(1102)] = 52894, + [SMALL_STATE(1103)] = 52911, + [SMALL_STATE(1104)] = 52922, + [SMALL_STATE(1105)] = 52933, + [SMALL_STATE(1106)] = 52950, + [SMALL_STATE(1107)] = 52965, + [SMALL_STATE(1108)] = 52984, + [SMALL_STATE(1109)] = 53001, + [SMALL_STATE(1110)] = 53020, + [SMALL_STATE(1111)] = 53037, + [SMALL_STATE(1112)] = 53052, + [SMALL_STATE(1113)] = 53071, + [SMALL_STATE(1114)] = 53090, + [SMALL_STATE(1115)] = 53109, + [SMALL_STATE(1116)] = 53126, + [SMALL_STATE(1117)] = 53141, + [SMALL_STATE(1118)] = 53158, + [SMALL_STATE(1119)] = 53173, + [SMALL_STATE(1120)] = 53192, + [SMALL_STATE(1121)] = 53207, + [SMALL_STATE(1122)] = 53226, + [SMALL_STATE(1123)] = 53243, + [SMALL_STATE(1124)] = 53260, + [SMALL_STATE(1125)] = 53277, + [SMALL_STATE(1126)] = 53292, + [SMALL_STATE(1127)] = 53309, + [SMALL_STATE(1128)] = 53326, + [SMALL_STATE(1129)] = 53343, + [SMALL_STATE(1130)] = 53362, + [SMALL_STATE(1131)] = 53381, + [SMALL_STATE(1132)] = 53397, + [SMALL_STATE(1133)] = 53413, + [SMALL_STATE(1134)] = 53423, + [SMALL_STATE(1135)] = 53437, + [SMALL_STATE(1136)] = 53451, + [SMALL_STATE(1137)] = 53467, + [SMALL_STATE(1138)] = 53477, + [SMALL_STATE(1139)] = 53493, + [SMALL_STATE(1140)] = 53509, + [SMALL_STATE(1141)] = 53525, + [SMALL_STATE(1142)] = 53539, + [SMALL_STATE(1143)] = 53555, + [SMALL_STATE(1144)] = 53571, + [SMALL_STATE(1145)] = 53587, + [SMALL_STATE(1146)] = 53597, + [SMALL_STATE(1147)] = 53611, + [SMALL_STATE(1148)] = 53627, + [SMALL_STATE(1149)] = 53643, + [SMALL_STATE(1150)] = 53659, + [SMALL_STATE(1151)] = 53675, + [SMALL_STATE(1152)] = 53691, + [SMALL_STATE(1153)] = 53705, + [SMALL_STATE(1154)] = 53719, + [SMALL_STATE(1155)] = 53735, + [SMALL_STATE(1156)] = 53751, + [SMALL_STATE(1157)] = 53767, + [SMALL_STATE(1158)] = 53783, + [SMALL_STATE(1159)] = 53799, + [SMALL_STATE(1160)] = 53815, + [SMALL_STATE(1161)] = 53825, + [SMALL_STATE(1162)] = 53839, + [SMALL_STATE(1163)] = 53853, + [SMALL_STATE(1164)] = 53867, + [SMALL_STATE(1165)] = 53883, + [SMALL_STATE(1166)] = 53899, + [SMALL_STATE(1167)] = 53915, + [SMALL_STATE(1168)] = 53929, + [SMALL_STATE(1169)] = 53945, + [SMALL_STATE(1170)] = 53959, + [SMALL_STATE(1171)] = 53975, + [SMALL_STATE(1172)] = 53991, + [SMALL_STATE(1173)] = 54005, + [SMALL_STATE(1174)] = 54021, + [SMALL_STATE(1175)] = 54035, + [SMALL_STATE(1176)] = 54049, + [SMALL_STATE(1177)] = 54063, + [SMALL_STATE(1178)] = 54079, + [SMALL_STATE(1179)] = 54095, + [SMALL_STATE(1180)] = 54109, + [SMALL_STATE(1181)] = 54121, + [SMALL_STATE(1182)] = 54135, + [SMALL_STATE(1183)] = 54149, + [SMALL_STATE(1184)] = 54165, + [SMALL_STATE(1185)] = 54179, + [SMALL_STATE(1186)] = 54193, + [SMALL_STATE(1187)] = 54207, + [SMALL_STATE(1188)] = 54223, + [SMALL_STATE(1189)] = 54239, + [SMALL_STATE(1190)] = 54255, + [SMALL_STATE(1191)] = 54271, + [SMALL_STATE(1192)] = 54287, + [SMALL_STATE(1193)] = 54299, + [SMALL_STATE(1194)] = 54313, + [SMALL_STATE(1195)] = 54327, + [SMALL_STATE(1196)] = 54341, + [SMALL_STATE(1197)] = 54357, + [SMALL_STATE(1198)] = 54373, + [SMALL_STATE(1199)] = 54387, + [SMALL_STATE(1200)] = 54403, + [SMALL_STATE(1201)] = 54419, + [SMALL_STATE(1202)] = 54435, + [SMALL_STATE(1203)] = 54451, + [SMALL_STATE(1204)] = 54465, + [SMALL_STATE(1205)] = 54479, + [SMALL_STATE(1206)] = 54493, + [SMALL_STATE(1207)] = 54509, + [SMALL_STATE(1208)] = 54525, + [SMALL_STATE(1209)] = 54539, + [SMALL_STATE(1210)] = 54555, + [SMALL_STATE(1211)] = 54569, + [SMALL_STATE(1212)] = 54583, + [SMALL_STATE(1213)] = 54593, + [SMALL_STATE(1214)] = 54609, + [SMALL_STATE(1215)] = 54622, + [SMALL_STATE(1216)] = 54631, + [SMALL_STATE(1217)] = 54644, + [SMALL_STATE(1218)] = 54655, + [SMALL_STATE(1219)] = 54668, + [SMALL_STATE(1220)] = 54681, + [SMALL_STATE(1221)] = 54694, + [SMALL_STATE(1222)] = 54707, + [SMALL_STATE(1223)] = 54720, + [SMALL_STATE(1224)] = 54733, + [SMALL_STATE(1225)] = 54746, + [SMALL_STATE(1226)] = 54757, + [SMALL_STATE(1227)] = 54770, + [SMALL_STATE(1228)] = 54783, + [SMALL_STATE(1229)] = 54796, + [SMALL_STATE(1230)] = 54809, + [SMALL_STATE(1231)] = 54822, + [SMALL_STATE(1232)] = 54835, + [SMALL_STATE(1233)] = 54844, + [SMALL_STATE(1234)] = 54857, + [SMALL_STATE(1235)] = 54870, + [SMALL_STATE(1236)] = 54883, + [SMALL_STATE(1237)] = 54896, + [SMALL_STATE(1238)] = 54909, + [SMALL_STATE(1239)] = 54922, + [SMALL_STATE(1240)] = 54935, + [SMALL_STATE(1241)] = 54944, + [SMALL_STATE(1242)] = 54957, + [SMALL_STATE(1243)] = 54966, + [SMALL_STATE(1244)] = 54975, + [SMALL_STATE(1245)] = 54988, + [SMALL_STATE(1246)] = 54997, + [SMALL_STATE(1247)] = 55010, + [SMALL_STATE(1248)] = 55023, + [SMALL_STATE(1249)] = 55036, + [SMALL_STATE(1250)] = 55049, + [SMALL_STATE(1251)] = 55062, + [SMALL_STATE(1252)] = 55075, + [SMALL_STATE(1253)] = 55088, + [SMALL_STATE(1254)] = 55099, + [SMALL_STATE(1255)] = 55112, + [SMALL_STATE(1256)] = 55121, + [SMALL_STATE(1257)] = 55132, + [SMALL_STATE(1258)] = 55145, + [SMALL_STATE(1259)] = 55158, + [SMALL_STATE(1260)] = 55171, + [SMALL_STATE(1261)] = 55184, + [SMALL_STATE(1262)] = 55197, + [SMALL_STATE(1263)] = 55210, + [SMALL_STATE(1264)] = 55223, + [SMALL_STATE(1265)] = 55236, + [SMALL_STATE(1266)] = 55249, + [SMALL_STATE(1267)] = 55262, + [SMALL_STATE(1268)] = 55275, + [SMALL_STATE(1269)] = 55288, + [SMALL_STATE(1270)] = 55301, + [SMALL_STATE(1271)] = 55314, + [SMALL_STATE(1272)] = 55327, + [SMALL_STATE(1273)] = 55340, + [SMALL_STATE(1274)] = 55353, + [SMALL_STATE(1275)] = 55366, + [SMALL_STATE(1276)] = 55379, + [SMALL_STATE(1277)] = 55388, + [SMALL_STATE(1278)] = 55401, + [SMALL_STATE(1279)] = 55410, + [SMALL_STATE(1280)] = 55423, + [SMALL_STATE(1281)] = 55436, + [SMALL_STATE(1282)] = 55449, + [SMALL_STATE(1283)] = 55462, + [SMALL_STATE(1284)] = 55475, + [SMALL_STATE(1285)] = 55488, + [SMALL_STATE(1286)] = 55501, + [SMALL_STATE(1287)] = 55514, + [SMALL_STATE(1288)] = 55527, + [SMALL_STATE(1289)] = 55540, + [SMALL_STATE(1290)] = 55553, + [SMALL_STATE(1291)] = 55566, + [SMALL_STATE(1292)] = 55579, + [SMALL_STATE(1293)] = 55592, + [SMALL_STATE(1294)] = 55605, + [SMALL_STATE(1295)] = 55618, + [SMALL_STATE(1296)] = 55631, + [SMALL_STATE(1297)] = 55644, + [SMALL_STATE(1298)] = 55657, + [SMALL_STATE(1299)] = 55668, + [SMALL_STATE(1300)] = 55681, + [SMALL_STATE(1301)] = 55694, + [SMALL_STATE(1302)] = 55707, + [SMALL_STATE(1303)] = 55716, + [SMALL_STATE(1304)] = 55727, + [SMALL_STATE(1305)] = 55738, + [SMALL_STATE(1306)] = 55751, + [SMALL_STATE(1307)] = 55762, + [SMALL_STATE(1308)] = 55775, + [SMALL_STATE(1309)] = 55788, + [SMALL_STATE(1310)] = 55801, + [SMALL_STATE(1311)] = 55810, + [SMALL_STATE(1312)] = 55823, + [SMALL_STATE(1313)] = 55836, + [SMALL_STATE(1314)] = 55849, + [SMALL_STATE(1315)] = 55862, + [SMALL_STATE(1316)] = 55875, + [SMALL_STATE(1317)] = 55886, + [SMALL_STATE(1318)] = 55899, + [SMALL_STATE(1319)] = 55910, + [SMALL_STATE(1320)] = 55923, + [SMALL_STATE(1321)] = 55936, + [SMALL_STATE(1322)] = 55949, + [SMALL_STATE(1323)] = 55962, + [SMALL_STATE(1324)] = 55975, + [SMALL_STATE(1325)] = 55988, + [SMALL_STATE(1326)] = 56001, + [SMALL_STATE(1327)] = 56014, + [SMALL_STATE(1328)] = 56027, + [SMALL_STATE(1329)] = 56040, + [SMALL_STATE(1330)] = 56051, + [SMALL_STATE(1331)] = 56062, + [SMALL_STATE(1332)] = 56075, + [SMALL_STATE(1333)] = 56086, + [SMALL_STATE(1334)] = 56099, + [SMALL_STATE(1335)] = 56112, + [SMALL_STATE(1336)] = 56125, + [SMALL_STATE(1337)] = 56138, + [SMALL_STATE(1338)] = 56149, + [SMALL_STATE(1339)] = 56160, + [SMALL_STATE(1340)] = 56169, + [SMALL_STATE(1341)] = 56182, + [SMALL_STATE(1342)] = 56193, + [SMALL_STATE(1343)] = 56204, + [SMALL_STATE(1344)] = 56213, + [SMALL_STATE(1345)] = 56222, + [SMALL_STATE(1346)] = 56235, + [SMALL_STATE(1347)] = 56245, + [SMALL_STATE(1348)] = 56255, + [SMALL_STATE(1349)] = 56263, + [SMALL_STATE(1350)] = 56271, + [SMALL_STATE(1351)] = 56281, + [SMALL_STATE(1352)] = 56289, + [SMALL_STATE(1353)] = 56297, + [SMALL_STATE(1354)] = 56305, + [SMALL_STATE(1355)] = 56315, + [SMALL_STATE(1356)] = 56323, + [SMALL_STATE(1357)] = 56333, + [SMALL_STATE(1358)] = 56341, + [SMALL_STATE(1359)] = 56349, + [SMALL_STATE(1360)] = 56359, + [SMALL_STATE(1361)] = 56367, + [SMALL_STATE(1362)] = 56377, + [SMALL_STATE(1363)] = 56385, + [SMALL_STATE(1364)] = 56393, + [SMALL_STATE(1365)] = 56401, + [SMALL_STATE(1366)] = 56411, + [SMALL_STATE(1367)] = 56419, + [SMALL_STATE(1368)] = 56427, + [SMALL_STATE(1369)] = 56437, + [SMALL_STATE(1370)] = 56445, + [SMALL_STATE(1371)] = 56455, + [SMALL_STATE(1372)] = 56465, + [SMALL_STATE(1373)] = 56473, + [SMALL_STATE(1374)] = 56483, + [SMALL_STATE(1375)] = 56491, + [SMALL_STATE(1376)] = 56499, + [SMALL_STATE(1377)] = 56507, + [SMALL_STATE(1378)] = 56515, + [SMALL_STATE(1379)] = 56525, + [SMALL_STATE(1380)] = 56533, + [SMALL_STATE(1381)] = 56541, + [SMALL_STATE(1382)] = 56549, + [SMALL_STATE(1383)] = 56557, + [SMALL_STATE(1384)] = 56565, + [SMALL_STATE(1385)] = 56575, + [SMALL_STATE(1386)] = 56585, + [SMALL_STATE(1387)] = 56593, + [SMALL_STATE(1388)] = 56601, + [SMALL_STATE(1389)] = 56611, + [SMALL_STATE(1390)] = 56621, + [SMALL_STATE(1391)] = 56629, + [SMALL_STATE(1392)] = 56639, + [SMALL_STATE(1393)] = 56649, + [SMALL_STATE(1394)] = 56659, + [SMALL_STATE(1395)] = 56667, + [SMALL_STATE(1396)] = 56677, + [SMALL_STATE(1397)] = 56685, + [SMALL_STATE(1398)] = 56695, + [SMALL_STATE(1399)] = 56703, + [SMALL_STATE(1400)] = 56711, + [SMALL_STATE(1401)] = 56719, + [SMALL_STATE(1402)] = 56729, + [SMALL_STATE(1403)] = 56739, + [SMALL_STATE(1404)] = 56749, + [SMALL_STATE(1405)] = 56757, + [SMALL_STATE(1406)] = 56765, + [SMALL_STATE(1407)] = 56773, + [SMALL_STATE(1408)] = 56783, + [SMALL_STATE(1409)] = 56791, + [SMALL_STATE(1410)] = 56799, + [SMALL_STATE(1411)] = 56807, + [SMALL_STATE(1412)] = 56815, + [SMALL_STATE(1413)] = 56822, + [SMALL_STATE(1414)] = 56829, + [SMALL_STATE(1415)] = 56836, + [SMALL_STATE(1416)] = 56843, + [SMALL_STATE(1417)] = 56850, + [SMALL_STATE(1418)] = 56857, + [SMALL_STATE(1419)] = 56864, + [SMALL_STATE(1420)] = 56871, + [SMALL_STATE(1421)] = 56878, + [SMALL_STATE(1422)] = 56885, + [SMALL_STATE(1423)] = 56892, + [SMALL_STATE(1424)] = 56899, + [SMALL_STATE(1425)] = 56906, + [SMALL_STATE(1426)] = 56913, + [SMALL_STATE(1427)] = 56920, + [SMALL_STATE(1428)] = 56927, + [SMALL_STATE(1429)] = 56934, + [SMALL_STATE(1430)] = 56941, + [SMALL_STATE(1431)] = 56948, + [SMALL_STATE(1432)] = 56955, + [SMALL_STATE(1433)] = 56962, + [SMALL_STATE(1434)] = 56969, + [SMALL_STATE(1435)] = 56976, + [SMALL_STATE(1436)] = 56983, + [SMALL_STATE(1437)] = 56990, + [SMALL_STATE(1438)] = 56997, + [SMALL_STATE(1439)] = 57004, + [SMALL_STATE(1440)] = 57011, + [SMALL_STATE(1441)] = 57018, + [SMALL_STATE(1442)] = 57025, + [SMALL_STATE(1443)] = 57032, + [SMALL_STATE(1444)] = 57039, + [SMALL_STATE(1445)] = 57046, + [SMALL_STATE(1446)] = 57053, + [SMALL_STATE(1447)] = 57060, + [SMALL_STATE(1448)] = 57067, + [SMALL_STATE(1449)] = 57074, + [SMALL_STATE(1450)] = 57081, + [SMALL_STATE(1451)] = 57088, + [SMALL_STATE(1452)] = 57095, + [SMALL_STATE(1453)] = 57102, + [SMALL_STATE(1454)] = 57109, + [SMALL_STATE(1455)] = 57116, + [SMALL_STATE(1456)] = 57123, + [SMALL_STATE(1457)] = 57130, + [SMALL_STATE(1458)] = 57137, + [SMALL_STATE(1459)] = 57144, + [SMALL_STATE(1460)] = 57151, + [SMALL_STATE(1461)] = 57158, + [SMALL_STATE(1462)] = 57165, + [SMALL_STATE(1463)] = 57172, + [SMALL_STATE(1464)] = 57179, + [SMALL_STATE(1465)] = 57186, + [SMALL_STATE(1466)] = 57193, + [SMALL_STATE(1467)] = 57200, + [SMALL_STATE(1468)] = 57207, + [SMALL_STATE(1469)] = 57214, + [SMALL_STATE(1470)] = 57221, + [SMALL_STATE(1471)] = 57228, + [SMALL_STATE(1472)] = 57235, + [SMALL_STATE(1473)] = 57242, + [SMALL_STATE(1474)] = 57249, + [SMALL_STATE(1475)] = 57256, + [SMALL_STATE(1476)] = 57263, + [SMALL_STATE(1477)] = 57270, + [SMALL_STATE(1478)] = 57277, + [SMALL_STATE(1479)] = 57284, + [SMALL_STATE(1480)] = 57291, + [SMALL_STATE(1481)] = 57298, + [SMALL_STATE(1482)] = 57305, + [SMALL_STATE(1483)] = 57312, + [SMALL_STATE(1484)] = 57319, + [SMALL_STATE(1485)] = 57326, + [SMALL_STATE(1486)] = 57333, + [SMALL_STATE(1487)] = 57340, + [SMALL_STATE(1488)] = 57347, + [SMALL_STATE(1489)] = 57354, + [SMALL_STATE(1490)] = 57361, + [SMALL_STATE(1491)] = 57368, + [SMALL_STATE(1492)] = 57375, + [SMALL_STATE(1493)] = 57382, + [SMALL_STATE(1494)] = 57389, + [SMALL_STATE(1495)] = 57396, + [SMALL_STATE(1496)] = 57403, + [SMALL_STATE(1497)] = 57410, + [SMALL_STATE(1498)] = 57417, + [SMALL_STATE(1499)] = 57424, + [SMALL_STATE(1500)] = 57431, + [SMALL_STATE(1501)] = 57438, + [SMALL_STATE(1502)] = 57445, + [SMALL_STATE(1503)] = 57452, + [SMALL_STATE(1504)] = 57459, + [SMALL_STATE(1505)] = 57466, + [SMALL_STATE(1506)] = 57473, + [SMALL_STATE(1507)] = 57480, + [SMALL_STATE(1508)] = 57487, + [SMALL_STATE(1509)] = 57494, + [SMALL_STATE(1510)] = 57501, + [SMALL_STATE(1511)] = 57508, + [SMALL_STATE(1512)] = 57515, + [SMALL_STATE(1513)] = 57522, + [SMALL_STATE(1514)] = 57529, + [SMALL_STATE(1515)] = 57536, + [SMALL_STATE(1516)] = 57543, + [SMALL_STATE(1517)] = 57550, + [SMALL_STATE(1518)] = 57557, + [SMALL_STATE(1519)] = 57564, + [SMALL_STATE(1520)] = 57571, + [SMALL_STATE(1521)] = 57578, + [SMALL_STATE(1522)] = 57585, + [SMALL_STATE(1523)] = 57592, + [SMALL_STATE(1524)] = 57599, + [SMALL_STATE(1525)] = 57606, + [SMALL_STATE(1526)] = 57613, + [SMALL_STATE(1527)] = 57620, + [SMALL_STATE(1528)] = 57627, + [SMALL_STATE(1529)] = 57634, + [SMALL_STATE(1530)] = 57641, + [SMALL_STATE(1531)] = 57648, }; static const TSParseActionEntry ts_parse_actions[] = { [0] = {.entry = {.count = 0, .reusable = false}}, [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(), [3] = {.entry = {.count = 1, .reusable = true}}, SHIFT_EXTRA(), - [5] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module, 0), - [7] = {.entry = {.count = 1, .reusable = false}}, SHIFT(330), - [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1130), - [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1016), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164), - [15] = {.entry = {.count = 1, .reusable = false}}, SHIFT(393), - [17] = {.entry = {.count = 1, .reusable = false}}, SHIFT(75), - [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(394), - [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(201), + [5] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module, 0, 0, 0), + [7] = {.entry = {.count = 1, .reusable = false}}, SHIFT(367), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1177), + [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1020), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160), + [15] = {.entry = {.count = 1, .reusable = false}}, SHIFT(399), + [17] = {.entry = {.count = 1, .reusable = false}}, SHIFT(87), + [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(414), + [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(191), [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(231), - [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(181), - [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1345), - [29] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1346), - [31] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1349), - [33] = {.entry = {.count = 1, .reusable = false}}, SHIFT(400), - [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(247), + [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(177), + [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1410), + [29] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1408), + [31] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1406), + [33] = {.entry = {.count = 1, .reusable = false}}, SHIFT(437), + [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(267), [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(602), - [39] = {.entry = {.count = 1, .reusable = false}}, SHIFT(404), - [41] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1512), - [43] = {.entry = {.count = 1, .reusable = false}}, SHIFT(296), + [39] = {.entry = {.count = 1, .reusable = false}}, SHIFT(447), + [41] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1519), + [43] = {.entry = {.count = 1, .reusable = false}}, SHIFT(316), [45] = {.entry = {.count = 1, .reusable = false}}, SHIFT(71), - [47] = {.entry = {.count = 1, .reusable = true}}, SHIFT(719), - [49] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), + [47] = {.entry = {.count = 1, .reusable = true}}, SHIFT(685), + [49] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), [51] = {.entry = {.count = 1, .reusable = true}}, SHIFT(166), - [53] = {.entry = {.count = 1, .reusable = true}}, SHIFT(406), - [55] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1511), - [57] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1510), - [59] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1509), - [61] = {.entry = {.count = 1, .reusable = false}}, SHIFT(278), - [63] = {.entry = {.count = 1, .reusable = false}}, SHIFT(284), - [65] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1508), - [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(417), - [69] = {.entry = {.count = 1, .reusable = false}}, SHIFT(419), - [71] = {.entry = {.count = 1, .reusable = false}}, SHIFT(890), - [73] = {.entry = {.count = 1, .reusable = false}}, SHIFT(180), - [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(797), - [77] = {.entry = {.count = 1, .reusable = false}}, SHIFT(797), - [79] = {.entry = {.count = 1, .reusable = false}}, SHIFT(131), - [81] = {.entry = {.count = 1, .reusable = true}}, SHIFT(952), - [83] = {.entry = {.count = 1, .reusable = false}}, SHIFT(424), - [85] = {.entry = {.count = 1, .reusable = false}}, SHIFT(254), - [87] = {.entry = {.count = 1, .reusable = false}}, SHIFT(604), - [89] = {.entry = {.count = 1, .reusable = false}}, SHIFT(423), - [91] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1495), - [93] = {.entry = {.count = 1, .reusable = false}}, SHIFT(298), + [53] = {.entry = {.count = 1, .reusable = true}}, SHIFT(474), + [55] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1518), + [57] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1517), + [59] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1516), + [61] = {.entry = {.count = 1, .reusable = false}}, SHIFT(277), + [63] = {.entry = {.count = 1, .reusable = false}}, SHIFT(297), + [65] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1515), + [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(422), + [69] = {.entry = {.count = 1, .reusable = false}}, SHIFT(459), + [71] = {.entry = {.count = 1, .reusable = false}}, SHIFT(889), + [73] = {.entry = {.count = 1, .reusable = false}}, SHIFT(182), + [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(795), + [77] = {.entry = {.count = 1, .reusable = false}}, SHIFT(795), + [79] = {.entry = {.count = 1, .reusable = false}}, SHIFT(132), + [81] = {.entry = {.count = 1, .reusable = true}}, SHIFT(910), + [83] = {.entry = {.count = 1, .reusable = false}}, SHIFT(390), + [85] = {.entry = {.count = 1, .reusable = false}}, SHIFT(264), + [87] = {.entry = {.count = 1, .reusable = false}}, SHIFT(606), + [89] = {.entry = {.count = 1, .reusable = false}}, SHIFT(394), + [91] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1502), + [93] = {.entry = {.count = 1, .reusable = false}}, SHIFT(310), [95] = {.entry = {.count = 1, .reusable = false}}, SHIFT(70), - [97] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1516), - [99] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1498), - [101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(370), - [103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(291), - [105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(356), - [107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(281), - [109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(326), - [111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(376), - [113] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1265), - [115] = {.entry = {.count = 1, .reusable = true}}, SHIFT(319), - [117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), - [119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(354), - [121] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(330), - [124] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1130), - [127] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1016), - [130] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(164), - [133] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(393), - [136] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(75), - [139] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(394), - [142] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(201), - [145] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(231), - [148] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(181), - [151] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1345), - [154] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1346), - [157] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1349), - [160] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(424), - [163] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(254), - [166] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(604), - [169] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(423), - [172] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1495), - [175] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(298), - [178] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(70), - [181] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(719), - [184] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(159), - [187] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(166), - [190] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(406), - [193] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1516), - [196] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1510), - [199] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1509), - [202] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(278), - [205] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(284), - [208] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1498), - [211] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(417), - [214] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(419), - [217] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(890), - [220] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(180), - [223] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(797), - [226] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(797), - [229] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(131), - [232] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), - [234] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(952), - [237] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module, 1), - [239] = {.entry = {.count = 1, .reusable = true}}, SHIFT(381), - [241] = {.entry = {.count = 1, .reusable = true}}, SHIFT(359), - [243] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(400), - [246] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(247), - [249] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(602), - [252] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(404), - [255] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1512), - [258] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(296), - [261] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(71), - [264] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1511), - [267] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1508), - [270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(288), - [272] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1324), - [274] = {.entry = {.count = 1, .reusable = false}}, SHIFT(674), - [276] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_primary_expression, 1, .production_id = 1), - [278] = {.entry = {.count = 1, .reusable = true}}, SHIFT(188), - [280] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_pattern, 1, .production_id = 1), REDUCE(sym_primary_expression, 1, .production_id = 1), - [283] = {.entry = {.count = 1, .reusable = false}}, SHIFT(460), - [285] = {.entry = {.count = 1, .reusable = false}}, SHIFT(675), - [287] = {.entry = {.count = 1, .reusable = true}}, SHIFT(385), - [289] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern, 1, .production_id = 1), - [291] = {.entry = {.count = 1, .reusable = false}}, SHIFT(726), - [293] = {.entry = {.count = 1, .reusable = true}}, SHIFT(190), - [295] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169), - [297] = {.entry = {.count = 1, .reusable = false}}, SHIFT(406), - [299] = {.entry = {.count = 1, .reusable = false}}, SHIFT(470), - [301] = {.entry = {.count = 1, .reusable = true}}, SHIFT(726), - [303] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_primary_expression, 1, .production_id = 1), - [305] = {.entry = {.count = 1, .reusable = false}}, SHIFT(886), - [307] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 1, .production_id = 1), - [309] = {.entry = {.count = 1, .reusable = true}}, SHIFT(642), - [311] = {.entry = {.count = 1, .reusable = false}}, SHIFT(642), + [97] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1523), + [99] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1505), + [101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), + [103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1332), + [105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(306), + [107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(342), + [109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(320), + [111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(336), + [113] = {.entry = {.count = 1, .reusable = true}}, SHIFT(318), + [115] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module, 1, 0, 0), + [117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(333), + [119] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), + [121] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(367), + [124] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(1177), + [127] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(1020), + [130] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(160), + [133] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(399), + [136] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(87), + [139] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(414), + [142] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(191), + [145] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(231), + [148] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(177), + [151] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(1410), + [154] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(1408), + [157] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(1406), + [160] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(437), + [163] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(267), + [166] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(602), + [169] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(447), + [172] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(1519), + [175] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(316), + [178] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(71), + [181] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(685), + [184] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(162), + [187] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(166), + [190] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(474), + [193] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(1518), + [196] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(1517), + [199] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(1516), + [202] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(277), + [205] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(297), + [208] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(1515), + [211] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(422), + [214] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(459), + [217] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(889), + [220] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(182), + [223] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(795), + [226] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(795), + [229] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(132), + [232] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(910), + [235] = {.entry = {.count = 1, .reusable = true}}, SHIFT(350), + [237] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1330), + [239] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(390), + [242] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(264), + [245] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(606), + [248] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(394), + [251] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(1502), + [254] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(310), + [257] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(70), + [260] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(1523), + [263] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2, 0, 0), SHIFT_REPEAT(1505), + [266] = {.entry = {.count = 1, .reusable = true}}, SHIFT(308), + [268] = {.entry = {.count = 1, .reusable = true}}, SHIFT(315), + [270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(338), + [272] = {.entry = {.count = 1, .reusable = true}}, SHIFT(346), + [274] = {.entry = {.count = 1, .reusable = false}}, SHIFT(670), + [276] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 1), + [278] = {.entry = {.count = 1, .reusable = true}}, SHIFT(215), + [280] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_pattern, 1, 0, 1), REDUCE(sym_primary_expression, 1, 0, 1), + [283] = {.entry = {.count = 1, .reusable = false}}, SHIFT(407), + [285] = {.entry = {.count = 1, .reusable = false}}, SHIFT(673), + [287] = {.entry = {.count = 1, .reusable = true}}, SHIFT(397), + [289] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern, 1, 0, 1), + [291] = {.entry = {.count = 1, .reusable = false}}, SHIFT(713), + [293] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217), + [295] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), + [297] = {.entry = {.count = 1, .reusable = false}}, SHIFT(474), + [299] = {.entry = {.count = 1, .reusable = false}}, SHIFT(424), + [301] = {.entry = {.count = 1, .reusable = true}}, SHIFT(713), + [303] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 1), + [305] = {.entry = {.count = 1, .reusable = false}}, SHIFT(888), + [307] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 1, 0, 1), + [309] = {.entry = {.count = 1, .reusable = true}}, SHIFT(622), + [311] = {.entry = {.count = 1, .reusable = false}}, SHIFT(622), [313] = {.entry = {.count = 1, .reusable = false}}, SHIFT(148), - [315] = {.entry = {.count = 1, .reusable = true}}, SHIFT(944), - [317] = {.entry = {.count = 1, .reusable = false}}, SHIFT(334), - [319] = {.entry = {.count = 1, .reusable = true}}, SHIFT(550), - [321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), - [323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(432), - [325] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), - [327] = {.entry = {.count = 1, .reusable = true}}, SHIFT(327), - [329] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), - [331] = {.entry = {.count = 1, .reusable = false}}, SHIFT(754), - [333] = {.entry = {.count = 1, .reusable = false}}, SHIFT(755), - [335] = {.entry = {.count = 1, .reusable = false}}, SHIFT(453), - [337] = {.entry = {.count = 1, .reusable = false}}, SHIFT(150), - [339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(340), - [341] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), - [343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(530), - [345] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [347] = {.entry = {.count = 1, .reusable = true}}, SHIFT(521), - [349] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), - [351] = {.entry = {.count = 1, .reusable = true}}, SHIFT(548), + [315] = {.entry = {.count = 1, .reusable = true}}, SHIFT(923), + [317] = {.entry = {.count = 1, .reusable = false}}, SHIFT(385), + [319] = {.entry = {.count = 1, .reusable = true}}, SHIFT(569), + [321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(490), + [325] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), + [327] = {.entry = {.count = 1, .reusable = true}}, SHIFT(461), + [329] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [331] = {.entry = {.count = 1, .reusable = true}}, SHIFT(505), + [333] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), + [335] = {.entry = {.count = 1, .reusable = true}}, SHIFT(533), + [337] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(586), + [341] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(279), + [345] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [347] = {.entry = {.count = 1, .reusable = true}}, SHIFT(582), + [349] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), + [351] = {.entry = {.count = 1, .reusable = true}}, SHIFT(332), [353] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), - [355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(325), - [357] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [359] = {.entry = {.count = 1, .reusable = true}}, SHIFT(535), + [355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(374), + [357] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), + [359] = {.entry = {.count = 1, .reusable = true}}, SHIFT(499), [361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), - [363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(508), - [365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), - [367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(377), - [369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), - [371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(524), - [373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), - [375] = {.entry = {.count = 1, .reusable = true}}, SHIFT(316), - [377] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), - [379] = {.entry = {.count = 1, .reusable = true}}, SHIFT(532), - [381] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), - [383] = {.entry = {.count = 1, .reusable = true}}, SHIFT(547), - [385] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [387] = {.entry = {.count = 1, .reusable = true}}, SHIFT(401), - [389] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), - [391] = {.entry = {.count = 1, .reusable = true}}, SHIFT(502), - [393] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), - [395] = {.entry = {.count = 1, .reusable = true}}, SHIFT(526), - [397] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), - [399] = {.entry = {.count = 1, .reusable = true}}, SHIFT(527), - [401] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), - [403] = {.entry = {.count = 1, .reusable = true}}, SHIFT(531), - [405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), - [407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(268), - [409] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), - [411] = {.entry = {.count = 1, .reusable = true}}, SHIFT(538), - [413] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), - [415] = {.entry = {.count = 1, .reusable = true}}, SHIFT(594), - [417] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), - [419] = {.entry = {.count = 1, .reusable = true}}, SHIFT(965), - [421] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55), - [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(464), - [425] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), - [427] = {.entry = {.count = 1, .reusable = true}}, SHIFT(353), - [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), - [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(542), - [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(331), - [437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), - [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(592), - [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), - [443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(492), - [445] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(332), - [449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), - [451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(544), - [453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), - [455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(582), - [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), - [459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(493), - [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), - [463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(563), - [465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), - [467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(580), - [469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), - [471] = {.entry = {.count = 1, .reusable = true}}, SHIFT(991), - [473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), - [475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(478), - [477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(272), - [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), - [483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(490), - [485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), - [487] = {.entry = {.count = 1, .reusable = true}}, SHIFT(589), - [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), - [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(388), - [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), - [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(572), - [497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), - [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(485), - [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), - [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(501), - [505] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), - [507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(430), - [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), - [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(497), - [513] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), - [515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(553), - [517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), - [519] = {.entry = {.count = 1, .reusable = true}}, SHIFT(486), - [521] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), - [523] = {.entry = {.count = 1, .reusable = true}}, SHIFT(571), - [525] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), - [527] = {.entry = {.count = 1, .reusable = true}}, SHIFT(578), - [529] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), - [531] = {.entry = {.count = 1, .reusable = true}}, SHIFT(472), - [533] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), - [535] = {.entry = {.count = 1, .reusable = true}}, SHIFT(317), - [537] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), - [539] = {.entry = {.count = 1, .reusable = true}}, SHIFT(384), - [541] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), - [543] = {.entry = {.count = 1, .reusable = true}}, SHIFT(552), - [545] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), - [547] = {.entry = {.count = 1, .reusable = true}}, SHIFT(487), - [549] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), - [551] = {.entry = {.count = 1, .reusable = true}}, SHIFT(558), - [553] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), - [555] = {.entry = {.count = 1, .reusable = true}}, SHIFT(421), - [557] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), - [559] = {.entry = {.count = 1, .reusable = true}}, SHIFT(193), - [561] = {.entry = {.count = 1, .reusable = false}}, SHIFT(719), - [563] = {.entry = {.count = 1, .reusable = true}}, SHIFT(191), - [565] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, .production_id = 1), REDUCE(sym_list_splat_pattern, 2, .production_id = 8), - [568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(456), - [570] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_splat_pattern, 2, .production_id = 8), - [572] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_splat_pattern, 2, .production_id = 8), - [574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(375), - [576] = {.entry = {.count = 1, .reusable = true}}, SHIFT(378), - [578] = {.entry = {.count = 1, .reusable = true}}, SHIFT(371), - [580] = {.entry = {.count = 1, .reusable = true}}, SHIFT(379), - [582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(367), - [584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(287), - [586] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1304), - [588] = {.entry = {.count = 1, .reusable = true}}, SHIFT(311), - [590] = {.entry = {.count = 1, .reusable = true}}, SHIFT(315), - [592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1217), - [594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(382), - [596] = {.entry = {.count = 1, .reusable = true}}, SHIFT(282), - [598] = {.entry = {.count = 1, .reusable = true}}, SHIFT(374), - [600] = {.entry = {.count = 1, .reusable = true}}, SHIFT(355), - [602] = {.entry = {.count = 1, .reusable = false}}, SHIFT(667), - [604] = {.entry = {.count = 1, .reusable = true}}, SHIFT(204), - [606] = {.entry = {.count = 1, .reusable = false}}, SHIFT(668), - [608] = {.entry = {.count = 1, .reusable = true}}, SHIFT(439), - [610] = {.entry = {.count = 1, .reusable = true}}, SHIFT(709), - [612] = {.entry = {.count = 1, .reusable = true}}, SHIFT(187), - [614] = {.entry = {.count = 1, .reusable = false}}, SHIFT(391), - [616] = {.entry = {.count = 1, .reusable = false}}, SHIFT(885), + [363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(564), + [365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(589), + [369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), + [371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(552), + [373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [375] = {.entry = {.count = 1, .reusable = true}}, SHIFT(445), + [377] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), + [379] = {.entry = {.count = 1, .reusable = false}}, SHIFT(762), + [381] = {.entry = {.count = 1, .reusable = false}}, SHIFT(756), + [383] = {.entry = {.count = 1, .reusable = false}}, SHIFT(396), + [385] = {.entry = {.count = 1, .reusable = false}}, SHIFT(150), + [387] = {.entry = {.count = 1, .reusable = true}}, SHIFT(577), + [389] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [391] = {.entry = {.count = 1, .reusable = true}}, SHIFT(976), + [393] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), + [395] = {.entry = {.count = 1, .reusable = true}}, SHIFT(491), + [397] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [399] = {.entry = {.count = 1, .reusable = true}}, SHIFT(587), + [401] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), + [403] = {.entry = {.count = 1, .reusable = true}}, SHIFT(373), + [405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(372), + [409] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), + [411] = {.entry = {.count = 1, .reusable = true}}, SHIFT(584), + [413] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), + [415] = {.entry = {.count = 1, .reusable = true}}, SHIFT(438), + [417] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [419] = {.entry = {.count = 1, .reusable = true}}, SHIFT(591), + [421] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), + [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(515), + [425] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), + [427] = {.entry = {.count = 1, .reusable = true}}, SHIFT(550), + [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), + [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(476), + [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(348), + [437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), + [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(595), + [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), + [443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(509), + [445] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(542), + [449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), + [451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(488), + [453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), + [455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(526), + [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), + [459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(544), + [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(535), + [465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), + [467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(402), + [469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [471] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1004), + [473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), + [475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(567), + [477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(363), + [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(529), + [485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), + [487] = {.entry = {.count = 1, .reusable = true}}, SHIFT(275), + [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(365), + [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), + [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(575), + [497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(492), + [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(556), + [505] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), + [507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(495), + [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), + [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(323), + [513] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(439), + [517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), + [519] = {.entry = {.count = 1, .reusable = true}}, SHIFT(561), + [521] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), + [523] = {.entry = {.count = 1, .reusable = true}}, SHIFT(482), + [525] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), + [527] = {.entry = {.count = 1, .reusable = true}}, SHIFT(522), + [529] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), + [531] = {.entry = {.count = 1, .reusable = true}}, SHIFT(518), + [533] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), + [535] = {.entry = {.count = 1, .reusable = true}}, SHIFT(496), + [537] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), + [539] = {.entry = {.count = 1, .reusable = true}}, SHIFT(543), + [541] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), + [543] = {.entry = {.count = 1, .reusable = true}}, SHIFT(357), + [545] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55), + [547] = {.entry = {.count = 1, .reusable = true}}, SHIFT(419), + [549] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [551] = {.entry = {.count = 1, .reusable = true}}, SHIFT(358), + [553] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), + [555] = {.entry = {.count = 1, .reusable = true}}, SHIFT(520), + [557] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [559] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 1), REDUCE(sym_list_splat_pattern, 2, 0, 8), + [562] = {.entry = {.count = 1, .reusable = true}}, SHIFT(425), + [564] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_splat_pattern, 2, 0, 8), + [566] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_splat_pattern, 2, 0, 8), + [568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), + [570] = {.entry = {.count = 1, .reusable = false}}, SHIFT(685), + [572] = {.entry = {.count = 1, .reusable = true}}, SHIFT(212), + [574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(292), + [576] = {.entry = {.count = 1, .reusable = true}}, SHIFT(319), + [578] = {.entry = {.count = 1, .reusable = true}}, SHIFT(340), + [580] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321), + [582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(312), + [584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(291), + [586] = {.entry = {.count = 1, .reusable = true}}, SHIFT(325), + [588] = {.entry = {.count = 1, .reusable = true}}, SHIFT(349), + [590] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1256), + [592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(311), + [594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(337), + [596] = {.entry = {.count = 1, .reusable = true}}, SHIFT(335), + [598] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1329), + [600] = {.entry = {.count = 1, .reusable = true}}, SHIFT(331), + [602] = {.entry = {.count = 1, .reusable = false}}, SHIFT(677), + [604] = {.entry = {.count = 1, .reusable = true}}, SHIFT(209), + [606] = {.entry = {.count = 1, .reusable = false}}, SHIFT(676), + [608] = {.entry = {.count = 1, .reusable = true}}, SHIFT(391), + [610] = {.entry = {.count = 1, .reusable = true}}, SHIFT(689), + [612] = {.entry = {.count = 1, .reusable = true}}, SHIFT(203), + [614] = {.entry = {.count = 1, .reusable = false}}, SHIFT(475), + [616] = {.entry = {.count = 1, .reusable = false}}, SHIFT(891), [618] = {.entry = {.count = 1, .reusable = false}}, SHIFT(149), [620] = {.entry = {.count = 1, .reusable = false}}, SHIFT(450), - [622] = {.entry = {.count = 1, .reusable = false}}, SHIFT(798), - [624] = {.entry = {.count = 1, .reusable = true}}, SHIFT(212), - [626] = {.entry = {.count = 1, .reusable = false}}, SHIFT(801), - [628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(443), - [630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(683), - [632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217), - [634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), - [636] = {.entry = {.count = 1, .reusable = false}}, SHIFT(445), - [638] = {.entry = {.count = 1, .reusable = false}}, SHIFT(888), - [640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(811), - [642] = {.entry = {.count = 1, .reusable = false}}, SHIFT(811), + [622] = {.entry = {.count = 1, .reusable = false}}, SHIFT(802), + [624] = {.entry = {.count = 1, .reusable = true}}, SHIFT(188), + [626] = {.entry = {.count = 1, .reusable = false}}, SHIFT(775), + [628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(477), + [630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(720), + [632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(189), + [634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(165), + [636] = {.entry = {.count = 1, .reusable = false}}, SHIFT(400), + [638] = {.entry = {.count = 1, .reusable = false}}, SHIFT(890), + [640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(813), + [642] = {.entry = {.count = 1, .reusable = false}}, SHIFT(813), [644] = {.entry = {.count = 1, .reusable = false}}, SHIFT(153), - [646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(934), - [648] = {.entry = {.count = 1, .reusable = false}}, SHIFT(447), - [650] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield, 1), - [652] = {.entry = {.count = 1, .reusable = false}}, SHIFT(749), + [646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(936), + [648] = {.entry = {.count = 1, .reusable = false}}, SHIFT(405), + [650] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield, 1, 0, 0), + [652] = {.entry = {.count = 1, .reusable = false}}, SHIFT(760), [654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163), - [656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(393), - [658] = {.entry = {.count = 1, .reusable = false}}, SHIFT(764), - [660] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161), - [662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(475), + [656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(749), + [658] = {.entry = {.count = 1, .reusable = true}}, SHIFT(399), + [660] = {.entry = {.count = 1, .reusable = false}}, SHIFT(769), + [662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164), [664] = {.entry = {.count = 1, .reusable = false}}, SHIFT(158), - [666] = {.entry = {.count = 1, .reusable = false}}, SHIFT(152), - [668] = {.entry = {.count = 1, .reusable = true}}, SHIFT(765), - [670] = {.entry = {.count = 1, .reusable = true}}, SHIFT(779), - [672] = {.entry = {.count = 1, .reusable = true}}, SHIFT(768), - [674] = {.entry = {.count = 1, .reusable = true}}, SHIFT(789), - [676] = {.entry = {.count = 1, .reusable = true}}, SHIFT(441), - [678] = {.entry = {.count = 1, .reusable = false}}, SHIFT(770), - [680] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), - [682] = {.entry = {.count = 1, .reusable = false}}, SHIFT(685), - [684] = {.entry = {.count = 1, .reusable = false}}, SHIFT(748), - [686] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_list, 2, .production_id = 7), - [688] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_list, 2, .production_id = 7), - [690] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160), - [692] = {.entry = {.count = 1, .reusable = true}}, SHIFT(200), - [694] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1504), - [696] = {.entry = {.count = 1, .reusable = true}}, SHIFT(803), - [698] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_list, 2, .production_id = 7), - [700] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_list, 3, .production_id = 16), - [702] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1462), - [704] = {.entry = {.count = 1, .reusable = true}}, SHIFT(619), - [706] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1469), - [708] = {.entry = {.count = 1, .reusable = true}}, SHIFT(846), - [710] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_list, 3, .production_id = 16), - [712] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_list, 3, .production_id = 16), - [714] = {.entry = {.count = 1, .reusable = true}}, SHIFT(671), - [716] = {.entry = {.count = 1, .reusable = true}}, SHIFT(460), - [718] = {.entry = {.count = 1, .reusable = true}}, SHIFT(211), - [720] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 3, .production_id = 50), - [722] = {.entry = {.count = 1, .reusable = false}}, SHIFT(812), - [724] = {.entry = {.count = 1, .reusable = true}}, SHIFT(631), - [726] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1432), - [728] = {.entry = {.count = 1, .reusable = false}}, SHIFT(837), - [730] = {.entry = {.count = 1, .reusable = false}}, SHIFT(154), - [732] = {.entry = {.count = 1, .reusable = false}}, SHIFT(759), - [734] = {.entry = {.count = 1, .reusable = false}}, SHIFT(760), - [736] = {.entry = {.count = 1, .reusable = false}}, SHIFT(151), - [738] = {.entry = {.count = 1, .reusable = true}}, SHIFT(788), - [740] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1447), - [742] = {.entry = {.count = 1, .reusable = false}}, SHIFT(425), - [744] = {.entry = {.count = 1, .reusable = false}}, SHIFT(466), - [746] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 1), - [748] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 2, .production_id = 24), - [750] = {.entry = {.count = 1, .reusable = true}}, SHIFT(833), - [752] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1414), - [754] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 7, .production_id = 140), - [756] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 7, .production_id = 140), - [758] = {.entry = {.count = 1, .reusable = false}}, SHIFT(887), - [760] = {.entry = {.count = 1, .reusable = true}}, SHIFT(828), - [762] = {.entry = {.count = 1, .reusable = true}}, SHIFT(725), - [764] = {.entry = {.count = 1, .reusable = true}}, SHIFT(778), - [766] = {.entry = {.count = 1, .reusable = true}}, SHIFT(672), - [768] = {.entry = {.count = 1, .reusable = true}}, SHIFT(787), - [770] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 6, .production_id = 122), - [772] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 6, .production_id = 122), - [774] = {.entry = {.count = 1, .reusable = true}}, SHIFT(786), - [776] = {.entry = {.count = 1, .reusable = true}}, SHIFT(783), - [778] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression_list, 3, .production_id = 16), - [780] = {.entry = {.count = 1, .reusable = false}}, SHIFT(442), - [782] = {.entry = {.count = 1, .reusable = true}}, SHIFT(469), - [784] = {.entry = {.count = 1, .reusable = true}}, SHIFT(825), - [786] = {.entry = {.count = 1, .reusable = true}}, SHIFT(843), - [788] = {.entry = {.count = 1, .reusable = true}}, SHIFT(841), - [790] = {.entry = {.count = 1, .reusable = true}}, SHIFT(838), - [792] = {.entry = {.count = 1, .reusable = true}}, SHIFT(727), - [794] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 1), - [796] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 6, .production_id = 121), - [798] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 6, .production_id = 121), - [800] = {.entry = {.count = 1, .reusable = true}}, SHIFT(629), - [802] = {.entry = {.count = 1, .reusable = true}}, SHIFT(615), - [804] = {.entry = {.count = 1, .reusable = true}}, SHIFT(617), - [806] = {.entry = {.count = 1, .reusable = true}}, SHIFT(638), - [808] = {.entry = {.count = 1, .reusable = true}}, SHIFT(639), - [810] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression_list, 2, .production_id = 7), - [812] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 5, .production_id = 100), - [814] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 5, .production_id = 100), - [816] = {.entry = {.count = 1, .reusable = true}}, SHIFT(805), - [818] = {.entry = {.count = 1, .reusable = true}}, SHIFT(772), - [820] = {.entry = {.count = 1, .reusable = true}}, SHIFT(781), - [822] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subscript, 6, .production_id = 96), - [824] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subscript, 6, .production_id = 96), - [826] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subscript, 4, .production_id = 70), - [828] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subscript, 4, .production_id = 70), - [830] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subscript, 5, .production_id = 96), - [832] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subscript, 5, .production_id = 96), - [834] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subscript, 5, .production_id = 70), - [836] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subscript, 5, .production_id = 70), - [838] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attribute, 3, .production_id = 40), - [840] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_attribute, 3, .production_id = 40), - [842] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 4, .production_id = 56), - [844] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 4, .production_id = 56), - [846] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1506), - [848] = {.entry = {.count = 1, .reusable = false}}, SHIFT(383), - [850] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1435), - [852] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1471), - [854] = {.entry = {.count = 1, .reusable = true}}, SHIFT(416), - [856] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1468), - [858] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 5, .production_id = 81), - [860] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 5, .production_id = 81), - [862] = {.entry = {.count = 1, .reusable = false}}, SHIFT(335), - [864] = {.entry = {.count = 1, .reusable = true}}, SHIFT(402), - [866] = {.entry = {.count = 1, .reusable = true}}, SHIFT(614), - [868] = {.entry = {.count = 1, .reusable = true}}, SHIFT(823), - [870] = {.entry = {.count = 1, .reusable = true}}, SHIFT(826), - [872] = {.entry = {.count = 1, .reusable = true}}, SHIFT(605), - [874] = {.entry = {.count = 1, .reusable = true}}, SHIFT(283), - [876] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1514), - [878] = {.entry = {.count = 1, .reusable = true}}, SHIFT(807), - [880] = {.entry = {.count = 1, .reusable = true}}, SHIFT(616), - [882] = {.entry = {.count = 1, .reusable = true}}, SHIFT(824), - [884] = {.entry = {.count = 1, .reusable = true}}, SHIFT(800), - [886] = {.entry = {.count = 1, .reusable = true}}, SHIFT(641), - [888] = {.entry = {.count = 1, .reusable = true}}, SHIFT(808), - [890] = {.entry = {.count = 1, .reusable = true}}, SHIFT(603), - [892] = {.entry = {.count = 1, .reusable = true}}, SHIFT(292), - [894] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1517), - [896] = {.entry = {.count = 1, .reusable = true}}, SHIFT(264), - [898] = {.entry = {.count = 1, .reusable = true}}, SHIFT(226), - [900] = {.entry = {.count = 1, .reusable = true}}, SHIFT(218), - [902] = {.entry = {.count = 1, .reusable = true}}, SHIFT(845), - [904] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, .production_id = 104), - [906] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, .production_id = 104), - [908] = {.entry = {.count = 1, .reusable = false}}, SHIFT(412), - [910] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 2, .production_id = 69), - [912] = {.entry = {.count = 1, .reusable = true}}, SHIFT(293), - [914] = {.entry = {.count = 1, .reusable = true}}, SHIFT(844), - [916] = {.entry = {.count = 1, .reusable = true}}, SHIFT(834), - [918] = {.entry = {.count = 1, .reusable = true}}, SHIFT(344), - [920] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, .production_id = 76), - [922] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, .production_id = 76), - [924] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 1), - [926] = {.entry = {.count = 1, .reusable = true}}, SHIFT(306), - [928] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, .production_id = 77), - [930] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, .production_id = 77), - [932] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat1, 2), - [934] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_try_statement_repeat1, 2), - [936] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat1, 2), SHIFT_REPEAT(335), - [939] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat2, 2), - [941] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_try_statement_repeat2, 2), - [943] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_try_statement_repeat2, 2), SHIFT_REPEAT(416), - [946] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 4, .production_id = 54), - [948] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 4, .production_id = 54), - [950] = {.entry = {.count = 1, .reusable = false}}, SHIFT(484), - [952] = {.entry = {.count = 1, .reusable = true}}, SHIFT(223), - [954] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_try_statement_repeat2, 2), SHIFT_REPEAT(402), - [957] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat1, 2), SHIFT_REPEAT(383), - [960] = {.entry = {.count = 1, .reusable = true}}, SHIFT(337), - [962] = {.entry = {.count = 1, .reusable = true}}, SHIFT(336), - [964] = {.entry = {.count = 1, .reusable = true}}, SHIFT(950), - [966] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 1), - [968] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block, 1), - [970] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__simple_statements, 4), - [972] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__simple_statements, 4), - [974] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), - [976] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1336), - [978] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 102), - [980] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 102), - [982] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 102), SHIFT_REPEAT(484), - [985] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__simple_statements, 3), - [987] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__simple_statements, 3), - [989] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block, 2), - [991] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 2), - [993] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 4, .production_id = 95), - [995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1423), - [997] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, .production_id = 69), - [999] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, .production_id = 68), - [1001] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3), - [1003] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3, .production_id = 10), - [1005] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1487), - [1007] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 4, .production_id = 29), - [1009] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 4, .production_id = 28), - [1011] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 2), - [1013] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 102), SHIFT_REPEAT(412), - [1016] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__simple_statements, 2), - [1018] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__simple_statements, 2), - [1020] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 6, .production_id = 155), - [1022] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 6, .production_id = 155), - [1024] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 4, .production_id = 129), - [1026] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 4, .production_id = 129), - [1028] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 5, .production_id = 146), - [1030] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 5, .production_id = 146), - [1032] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 5, .production_id = 146), - [1034] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 5, .production_id = 146), - [1036] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 6, .production_id = 155), - [1038] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 6, .production_id = 155), - [1040] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 7, .production_id = 160), - [1042] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 7, .production_id = 160), - [1044] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 7, .production_id = 160), - [1046] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 7, .production_id = 160), - [1048] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_primary_expression, 1), - [1050] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_pattern, 1), REDUCE(sym_primary_expression, 1), - [1053] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_primary_expression, 1), - [1055] = {.entry = {.count = 1, .reusable = true}}, SHIFT(422), - [1057] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern, 1), - [1059] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 1), - [1061] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 4, .production_id = 129), - [1063] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 4, .production_id = 129), - [1065] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 4, .production_id = 81), - [1067] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 4, .production_id = 81), - [1069] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), - [1071] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1), REDUCE(sym_list_splat_pattern, 2, .production_id = 9), - [1074] = {.entry = {.count = 1, .reusable = true}}, SHIFT(476), - [1076] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_splat_pattern, 2, .production_id = 9), - [1078] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_splat_pattern, 2, .production_id = 9), - [1080] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 3, .production_id = 56), - [1082] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 3, .production_id = 56), - [1084] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_cases, 1), - [1086] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_cases, 1), - [1088] = {.entry = {.count = 1, .reusable = false}}, SHIFT(852), - [1090] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_cases_repeat1, 2), - [1092] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_cases_repeat1, 2), - [1094] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_cases_repeat1, 2), SHIFT_REPEAT(849), - [1097] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_cases_repeat1, 2), SHIFT_REPEAT(852), - [1100] = {.entry = {.count = 1, .reusable = false}}, SHIFT(849), - [1102] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), - [1104] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 8, .production_id = 142), - [1106] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 8, .production_id = 142), - [1108] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_elif_clause, 4, .production_id = 54), - [1110] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_elif_clause, 4, .production_id = 54), - [1112] = {.entry = {.count = 1, .reusable = false}}, SHIFT(339), - [1114] = {.entry = {.count = 1, .reusable = false}}, SHIFT(338), - [1116] = {.entry = {.count = 1, .reusable = false}}, SHIFT(132), - [1118] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 4, .production_id = 55), - [1120] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 4, .production_id = 55), - [1122] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_elif_clause, 5, .production_id = 77), - [1124] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_elif_clause, 5, .production_id = 77), - [1126] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 5, .production_id = 80), - [1128] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 5, .production_id = 80), - [1130] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 5, .production_id = 56), - [1132] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 5, .production_id = 56), - [1134] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 1, .production_id = 74), - [1136] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_if_statement_repeat1, 1, .production_id = 74), - [1138] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 7, .production_id = 128), - [1140] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 7, .production_id = 128), - [1142] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 7, .production_id = 124), - [1144] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 7, .production_id = 124), - [1146] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple, 2), - [1148] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_tuple_pattern, 2), REDUCE(sym_tuple, 2), - [1151] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple, 2), - [1153] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_pattern, 2), - [1155] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple_pattern, 2), - [1157] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 6, .production_id = 81), - [1159] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 6, .production_id = 81), - [1161] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 6, .production_id = 107), - [1163] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 6, .production_id = 107), - [1165] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2), - [1167] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_list_pattern, 2), REDUCE(sym_list, 2), - [1170] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2), - [1172] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_pattern, 2), - [1174] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_pattern, 2), - [1176] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_else_clause, 3, .production_id = 56), - [1178] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_else_clause, 3, .production_id = 56), - [1180] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 4, .production_id = 133), - [1182] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 4, .production_id = 133), - [1184] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 6, .production_id = 156), - [1186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 6, .production_id = 156), - [1188] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_else_clause, 4, .production_id = 81), - [1190] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_else_clause, 4, .production_id = 81), - [1192] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 5, .production_id = 148), - [1194] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 5, .production_id = 148), - [1196] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 5, .production_id = 149), - [1198] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 5, .production_id = 149), - [1200] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 6, .production_id = 116), - [1202] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 6, .production_id = 116), - [1204] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 7, .production_id = 138), - [1206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 7, .production_id = 138), - [1208] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_decorated_definition, 2, .production_id = 19), - [1210] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_decorated_definition, 2, .production_id = 19), - [1212] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 5, .production_id = 79), - [1214] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 5, .production_id = 79), - [1216] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, .production_id = 143), - [1218] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, .production_id = 143), - [1220] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 5, .production_id = 86), - [1222] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 5, .production_id = 86), - [1224] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 8, .production_id = 141), - [1226] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 8, .production_id = 141), - [1228] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 10, .production_id = 159), - [1230] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 10, .production_id = 159), - [1232] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 9, .production_id = 158), - [1234] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 9, .production_id = 158), - [1236] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 9, .production_id = 154), - [1238] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 9, .production_id = 154), - [1240] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 9, .production_id = 153), - [1242] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 9, .production_id = 153), - [1244] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 9, .production_id = 152), - [1246] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 9, .production_id = 152), - [1248] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 8, .production_id = 145), - [1250] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 8, .production_id = 145), - [1252] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 5, .production_id = 82), - [1254] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 5, .production_id = 82), - [1256] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 6, .production_id = 105), - [1258] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 6, .production_id = 105), - [1260] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 6, .production_id = 56), - [1262] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 6, .production_id = 56), - [1264] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 6, .production_id = 108), - [1266] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 6, .production_id = 108), - [1268] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_finally_clause, 3, .production_id = 56), - [1270] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_finally_clause, 3, .production_id = 56), - [1272] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, .production_id = 103), - [1274] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, .production_id = 103), - [1276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 5, .production_id = 78), - [1278] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 5, .production_id = 78), - [1280] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 5, .production_id = 89), - [1282] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 5, .production_id = 89), - [1284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, .production_id = 137), - [1286] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, .production_id = 137), - [1288] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, .production_id = 75), - [1290] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, .production_id = 75), - [1292] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, .production_id = 151), - [1294] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, .production_id = 151), - [1296] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 5, .production_id = 90), - [1298] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 5, .production_id = 90), - [1300] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, .production_id = 136), - [1302] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, .production_id = 136), - [1304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, .production_id = 144), - [1306] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, .production_id = 144), - [1308] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, .production_id = 150), - [1310] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, .production_id = 150), - [1312] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 4, .production_id = 57), - [1314] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 4, .production_id = 57), - [1316] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_statement, 4, .production_id = 59), - [1318] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_match_statement, 4, .production_id = 59), - [1320] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_statement, 4, .production_id = 60), - [1322] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_match_statement, 4, .production_id = 60), - [1324] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 4, .production_id = 64), - [1326] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 4, .production_id = 64), - [1328] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 5, .production_id = 88), - [1330] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 5, .production_id = 88), - [1332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 6, .production_id = 106), - [1334] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 6, .production_id = 106), - [1336] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 7, .production_id = 81), - [1338] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 7, .production_id = 81), - [1340] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_finally_clause, 4, .production_id = 81), - [1342] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_finally_clause, 4, .production_id = 81), - [1344] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 7, .production_id = 127), - [1346] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 7, .production_id = 127), - [1348] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, .production_id = 101), - [1350] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, .production_id = 101), - [1352] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, .production_id = 126), - [1354] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, .production_id = 126), - [1356] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, .production_id = 125), - [1358] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, .production_id = 125), - [1360] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 7, .production_id = 123), - [1362] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 7, .production_id = 123), - [1364] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 6, .production_id = 117), - [1366] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 6, .production_id = 117), - [1368] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 6, .production_id = 115), - [1370] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 6, .production_id = 115), - [1372] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 6, .production_id = 114), - [1374] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 6, .production_id = 114), - [1376] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 6, .production_id = 113), - [1378] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 6, .production_id = 113), - [1380] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 3, .production_id = 50), - [1382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(685), - [1384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1207), - [1386] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 2, .production_id = 24), - [1388] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_concatenated_string, 2), - [1390] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_concatenated_string, 2), - [1392] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), - [1394] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), - [1396] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), SHIFT_REPEAT(944), - [1399] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 3, .production_id = 20), - [1401] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 3, .production_id = 20), - [1403] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 2, .production_id = 2), - [1405] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 2, .production_id = 2), - [1407] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_comprehension, 4, .production_id = 51), - [1409] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_comprehension, 4, .production_id = 51), - [1411] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_set_comprehension, 4, .production_id = 51), - [1413] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_set_comprehension, 4, .production_id = 51), - [1415] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, .production_id = 61), - [1417] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, .production_id = 61), - [1419] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 5, .production_id = 61), - [1421] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 5, .production_id = 61), - [1423] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 5, .production_id = 61), - [1425] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 5, .production_id = 61), - [1427] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 5, .production_id = 92), - [1429] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 5, .production_id = 92), - [1431] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 2), - [1433] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 2), - [1435] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 3, .production_id = 67), - [1437] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 3, .production_id = 67), - [1439] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 3, .production_id = 31), - [1441] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 3, .production_id = 31), - [1443] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 3), - [1445] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 3), - [1447] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_set, 3, .production_id = 25), - [1449] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_set, 3, .production_id = 25), - [1451] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 3, .production_id = 31), - [1453] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 3, .production_id = 31), - [1455] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 3), - [1457] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 3), - [1459] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, .production_id = 25), - [1461] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, .production_id = 25), - [1463] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple, 3, .production_id = 25), - [1465] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple, 3, .production_id = 25), - [1467] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_expression, 3, .production_id = 26), - [1469] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesized_expression, 3, .production_id = 26), - [1471] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, .production_id = 31), - [1473] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, .production_id = 31), - [1475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1449), - [1477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(177), - [1479] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1), - [1481] = {.entry = {.count = 1, .reusable = false}}, SHIFT(716), - [1483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(707), - [1485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(696), - [1487] = {.entry = {.count = 1, .reusable = true}}, SHIFT(695), - [1489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(692), - [1491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(310), - [1493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(690), - [1495] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1), - [1497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(716), - [1499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1436), - [1501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(687), - [1503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(686), - [1505] = {.entry = {.count = 1, .reusable = false}}, SHIFT(696), - [1507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(673), - [1509] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 2), - [1511] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 2), - [1513] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call, 2, .production_id = 17), - [1515] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_call, 2, .production_id = 17), - [1517] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 4, .production_id = 61), - [1519] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 4, .production_id = 61), - [1521] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_comprehension, 4, .production_id = 51), - [1523] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_comprehension, 4, .production_id = 51), - [1525] = {.entry = {.count = 1, .reusable = false}}, SHIFT(762), - [1527] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_keyword_separator, 1), - [1529] = {.entry = {.count = 1, .reusable = false}}, SHIFT(767), - [1531] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_generator_expression, 4, .production_id = 51), - [1533] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_generator_expression, 4, .production_id = 51), - [1535] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, .production_id = 67), - [1537] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, .production_id = 67), - [1539] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 4, .production_id = 31), - [1541] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 4, .production_id = 31), - [1543] = {.entry = {.count = 1, .reusable = false}}, SHIFT(693), - [1545] = {.entry = {.count = 1, .reusable = true}}, SHIFT(698), - [1547] = {.entry = {.count = 1, .reusable = true}}, SHIFT(702), - [1549] = {.entry = {.count = 1, .reusable = true}}, SHIFT(703), - [1551] = {.entry = {.count = 1, .reusable = true}}, SHIFT(704), - [1553] = {.entry = {.count = 1, .reusable = true}}, SHIFT(705), - [1555] = {.entry = {.count = 1, .reusable = true}}, SHIFT(693), - [1557] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1446), - [1559] = {.entry = {.count = 1, .reusable = true}}, SHIFT(710), - [1561] = {.entry = {.count = 1, .reusable = true}}, SHIFT(711), - [1563] = {.entry = {.count = 1, .reusable = false}}, SHIFT(702), - [1565] = {.entry = {.count = 1, .reusable = true}}, SHIFT(676), - [1567] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, .production_id = 92), - [1569] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, .production_id = 92), - [1571] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_operator, 3, .production_id = 39), - [1573] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_operator, 3, .production_id = 39), - [1575] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_operator, 2, .production_id = 13), - [1577] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_operator, 2, .production_id = 13), - [1579] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 41), - [1581] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 41), - [1583] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, .production_id = 71), - [1585] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, .production_id = 71), - [1587] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, .production_id = 72), - [1589] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, .production_id = 72), - [1591] = {.entry = {.count = 1, .reusable = true}}, SHIFT(452), - [1593] = {.entry = {.count = 1, .reusable = false}}, SHIFT(794), - [1595] = {.entry = {.count = 1, .reusable = false}}, SHIFT(694), - [1597] = {.entry = {.count = 1, .reusable = false}}, SHIFT(832), - [1599] = {.entry = {.count = 1, .reusable = false}}, SHIFT(691), - [1601] = {.entry = {.count = 1, .reusable = false}}, SHIFT(618), - [1603] = {.entry = {.count = 1, .reusable = false}}, SHIFT(679), - [1605] = {.entry = {.count = 1, .reusable = false}}, SHIFT(712), - [1607] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), SHIFT_REPEAT(934), - [1610] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1500), - [1612] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), - [1614] = {.entry = {.count = 1, .reusable = false}}, SHIFT(730), - [1616] = {.entry = {.count = 1, .reusable = true}}, SHIFT(723), - [1618] = {.entry = {.count = 1, .reusable = true}}, SHIFT(722), - [1620] = {.entry = {.count = 1, .reusable = true}}, SHIFT(721), - [1622] = {.entry = {.count = 1, .reusable = true}}, SHIFT(717), - [1624] = {.entry = {.count = 1, .reusable = true}}, SHIFT(301), - [1626] = {.entry = {.count = 1, .reusable = true}}, SHIFT(714), - [1628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(730), - [1630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1494), - [1632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(706), - [1634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(700), - [1636] = {.entry = {.count = 1, .reusable = false}}, SHIFT(722), - [1638] = {.entry = {.count = 1, .reusable = true}}, SHIFT(669), - [1640] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), SHIFT_REPEAT(952), - [1643] = {.entry = {.count = 1, .reusable = false}}, SHIFT(879), - [1645] = {.entry = {.count = 1, .reusable = false}}, SHIFT(880), - [1647] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1448), - [1649] = {.entry = {.count = 1, .reusable = true}}, SHIFT(184), - [1651] = {.entry = {.count = 1, .reusable = false}}, SHIFT(729), - [1653] = {.entry = {.count = 1, .reusable = true}}, SHIFT(728), - [1655] = {.entry = {.count = 1, .reusable = true}}, SHIFT(680), - [1657] = {.entry = {.count = 1, .reusable = true}}, SHIFT(697), - [1659] = {.entry = {.count = 1, .reusable = true}}, SHIFT(681), - [1661] = {.entry = {.count = 1, .reusable = true}}, SHIFT(299), - [1663] = {.entry = {.count = 1, .reusable = true}}, SHIFT(699), - [1665] = {.entry = {.count = 1, .reusable = true}}, SHIFT(729), - [1667] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1430), - [1669] = {.entry = {.count = 1, .reusable = true}}, SHIFT(708), - [1671] = {.entry = {.count = 1, .reusable = true}}, SHIFT(682), - [1673] = {.entry = {.count = 1, .reusable = false}}, SHIFT(680), - [1675] = {.entry = {.count = 1, .reusable = true}}, SHIFT(670), + [666] = {.entry = {.count = 1, .reusable = false}}, SHIFT(151), + [668] = {.entry = {.count = 1, .reusable = true}}, SHIFT(470), + [670] = {.entry = {.count = 1, .reusable = true}}, SHIFT(751), + [672] = {.entry = {.count = 1, .reusable = true}}, SHIFT(423), + [674] = {.entry = {.count = 1, .reusable = true}}, SHIFT(800), + [676] = {.entry = {.count = 1, .reusable = true}}, SHIFT(809), + [678] = {.entry = {.count = 1, .reusable = true}}, SHIFT(214), + [680] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1427), + [682] = {.entry = {.count = 1, .reusable = true}}, SHIFT(816), + [684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1438), + [686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(774), + [688] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_list, 3, 0, 16), + [690] = {.entry = {.count = 1, .reusable = false}}, SHIFT(770), + [692] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), + [694] = {.entry = {.count = 1, .reusable = false}}, SHIFT(681), + [696] = {.entry = {.count = 1, .reusable = false}}, SHIFT(768), + [698] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_list, 3, 0, 16), + [700] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_list, 3, 0, 16), + [702] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161), + [704] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_list, 2, 0, 7), + [706] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_list, 2, 0, 7), + [708] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_list, 2, 0, 7), + [710] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1525), + [712] = {.entry = {.count = 1, .reusable = true}}, SHIFT(627), + [714] = {.entry = {.count = 1, .reusable = false}}, SHIFT(761), + [716] = {.entry = {.count = 1, .reusable = true}}, SHIFT(617), + [718] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1503), + [720] = {.entry = {.count = 1, .reusable = false}}, SHIFT(758), + [722] = {.entry = {.count = 1, .reusable = false}}, SHIFT(152), + [724] = {.entry = {.count = 1, .reusable = true}}, SHIFT(782), + [726] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1530), + [728] = {.entry = {.count = 1, .reusable = true}}, SHIFT(200), + [730] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 3, 0, 50), + [732] = {.entry = {.count = 1, .reusable = true}}, SHIFT(407), + [734] = {.entry = {.count = 1, .reusable = false}}, SHIFT(413), + [736] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 1, 0, 0), + [738] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 2, 0, 24), + [740] = {.entry = {.count = 1, .reusable = false}}, SHIFT(831), + [742] = {.entry = {.count = 1, .reusable = false}}, SHIFT(849), + [744] = {.entry = {.count = 1, .reusable = false}}, SHIFT(154), + [746] = {.entry = {.count = 1, .reusable = true}}, SHIFT(836), + [748] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1415), + [750] = {.entry = {.count = 1, .reusable = false}}, SHIFT(466), + [752] = {.entry = {.count = 1, .reusable = true}}, SHIFT(675), + [754] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 6, 0, 126), + [756] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 6, 0, 126), + [758] = {.entry = {.count = 1, .reusable = false}}, SHIFT(886), + [760] = {.entry = {.count = 1, .reusable = true}}, SHIFT(626), + [762] = {.entry = {.count = 1, .reusable = true}}, SHIFT(803), + [764] = {.entry = {.count = 1, .reusable = true}}, SHIFT(671), + [766] = {.entry = {.count = 1, .reusable = true}}, SHIFT(799), + [768] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 1, 0, 0), + [770] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression_list, 3, 0, 16), + [772] = {.entry = {.count = 1, .reusable = false}}, SHIFT(388), + [774] = {.entry = {.count = 1, .reusable = true}}, SHIFT(443), + [776] = {.entry = {.count = 1, .reusable = true}}, SHIFT(846), + [778] = {.entry = {.count = 1, .reusable = true}}, SHIFT(801), + [780] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 6, 0, 125), + [782] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 6, 0, 125), + [784] = {.entry = {.count = 1, .reusable = true}}, SHIFT(848), + [786] = {.entry = {.count = 1, .reusable = true}}, SHIFT(834), + [788] = {.entry = {.count = 1, .reusable = true}}, SHIFT(833), + [790] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression_list, 2, 0, 7), + [792] = {.entry = {.count = 1, .reusable = true}}, SHIFT(805), + [794] = {.entry = {.count = 1, .reusable = true}}, SHIFT(701), + [796] = {.entry = {.count = 1, .reusable = true}}, SHIFT(625), + [798] = {.entry = {.count = 1, .reusable = true}}, SHIFT(778), + [800] = {.entry = {.count = 1, .reusable = true}}, SHIFT(624), + [802] = {.entry = {.count = 1, .reusable = true}}, SHIFT(784), + [804] = {.entry = {.count = 1, .reusable = true}}, SHIFT(811), + [806] = {.entry = {.count = 1, .reusable = true}}, SHIFT(703), + [808] = {.entry = {.count = 1, .reusable = true}}, SHIFT(628), + [810] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 5, 0, 101), + [812] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 5, 0, 101), + [814] = {.entry = {.count = 1, .reusable = true}}, SHIFT(796), + [816] = {.entry = {.count = 1, .reusable = true}}, SHIFT(618), + [818] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 7, 0, 144), + [820] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 7, 0, 144), + [822] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attribute, 3, 0, 40), + [824] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_attribute, 3, 0, 40), + [826] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subscript, 6, 0, 96), + [828] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subscript, 6, 0, 96), + [830] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subscript, 5, 0, 96), + [832] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subscript, 5, 0, 96), + [834] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subscript, 5, 0, 69), + [836] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subscript, 5, 0, 69), + [838] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subscript, 4, 0, 69), + [840] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subscript, 4, 0, 69), + [842] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 5, 0, 81), + [844] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 5, 0, 81), + [846] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1478), + [848] = {.entry = {.count = 1, .reusable = true}}, SHIFT(393), + [850] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1475), + [852] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 4, 0, 56), + [854] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 4, 0, 56), + [856] = {.entry = {.count = 1, .reusable = false}}, SHIFT(381), + [858] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1460), + [860] = {.entry = {.count = 1, .reusable = false}}, SHIFT(383), + [862] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1496), + [864] = {.entry = {.count = 1, .reusable = true}}, SHIFT(416), + [866] = {.entry = {.count = 1, .reusable = true}}, SHIFT(270), + [868] = {.entry = {.count = 1, .reusable = true}}, SHIFT(220), + [870] = {.entry = {.count = 1, .reusable = true}}, SHIFT(829), + [872] = {.entry = {.count = 1, .reusable = true}}, SHIFT(830), + [874] = {.entry = {.count = 1, .reusable = true}}, SHIFT(351), + [876] = {.entry = {.count = 1, .reusable = true}}, SHIFT(317), + [878] = {.entry = {.count = 1, .reusable = true}}, SHIFT(839), + [880] = {.entry = {.count = 1, .reusable = true}}, SHIFT(334), + [882] = {.entry = {.count = 1, .reusable = true}}, SHIFT(225), + [884] = {.entry = {.count = 1, .reusable = true}}, SHIFT(227), + [886] = {.entry = {.count = 1, .reusable = true}}, SHIFT(781), + [888] = {.entry = {.count = 1, .reusable = true}}, SHIFT(637), + [890] = {.entry = {.count = 1, .reusable = true}}, SHIFT(793), + [892] = {.entry = {.count = 1, .reusable = true}}, SHIFT(819), + [894] = {.entry = {.count = 1, .reusable = true}}, SHIFT(817), + [896] = {.entry = {.count = 1, .reusable = true}}, SHIFT(613), + [898] = {.entry = {.count = 1, .reusable = true}}, SHIFT(631), + [900] = {.entry = {.count = 1, .reusable = true}}, SHIFT(599), + [902] = {.entry = {.count = 1, .reusable = true}}, SHIFT(300), + [904] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1524), + [906] = {.entry = {.count = 1, .reusable = true}}, SHIFT(776), + [908] = {.entry = {.count = 1, .reusable = true}}, SHIFT(812), + [910] = {.entry = {.count = 1, .reusable = true}}, SHIFT(603), + [912] = {.entry = {.count = 1, .reusable = true}}, SHIFT(287), + [914] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1416), + [916] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat1, 2, 0, 0), + [918] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_try_statement_repeat1, 2, 0, 0), + [920] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(381), + [923] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 1, 0, 0), + [925] = {.entry = {.count = 1, .reusable = true}}, SHIFT(309), + [927] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat2, 2, 0, 0), + [929] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_try_statement_repeat2, 2, 0, 0), + [931] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_try_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(393), + [934] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, 0, 77), + [936] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, 0, 77), + [938] = {.entry = {.count = 1, .reusable = false}}, SHIFT(432), + [940] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, 0, 76), + [942] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, 0, 76), + [944] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, 0, 105), + [946] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, 0, 105), + [948] = {.entry = {.count = 1, .reusable = false}}, SHIFT(484), + [950] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 4, 0, 54), + [952] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 4, 0, 54), + [954] = {.entry = {.count = 1, .reusable = true}}, SHIFT(920), + [956] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 2, 0, 70), + [958] = {.entry = {.count = 1, .reusable = true}}, SHIFT(307), + [960] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(383), + [963] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_try_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(416), + [966] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3, 0, 0), + [968] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 4, 0, 28), + [970] = {.entry = {.count = 1, .reusable = true}}, SHIFT(183), + [972] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1431), + [974] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__simple_statements, 4, 0, 0), + [976] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__simple_statements, 4, 0, 0), + [978] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__simple_statements, 3, 0, 0), + [980] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__simple_statements, 3, 0, 0), + [982] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1454), + [984] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 4, 0, 98), + [986] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1307), + [988] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3, 0, 10), + [990] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 4, 0, 29), + [992] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 2, 0, 103), + [994] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_if_statement_repeat1, 2, 0, 103), + [996] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 2, 0, 103), SHIFT_REPEAT(432), + [999] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__simple_statements, 2, 0, 0), + [1001] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__simple_statements, 2, 0, 0), + [1003] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, 0, 68), + [1005] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block, 1, 0, 0), + [1007] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 1, 0, 0), + [1009] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, 0, 70), + [1011] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 2, 0, 0), + [1013] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block, 2, 0, 0), + [1015] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 2, 0, 0), + [1017] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 2, 0, 103), SHIFT_REPEAT(484), + [1020] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 3, 0, 56), + [1022] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 3, 0, 56), + [1024] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_cases_repeat1, 2, 0, 0), + [1026] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_cases_repeat1, 2, 0, 0), + [1028] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_cases_repeat1, 2, 0, 0), SHIFT_REPEAT(852), + [1031] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), + [1033] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), REDUCE(sym_list_splat_pattern, 2, 0, 9), + [1036] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), + [1038] = {.entry = {.count = 1, .reusable = true}}, SHIFT(417), + [1040] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_splat_pattern, 2, 0, 9), + [1042] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_splat_pattern, 2, 0, 9), + [1044] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 6, 0, 159), + [1046] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 6, 0, 159), + [1048] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_cases, 1, 0, 0), + [1050] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_cases, 1, 0, 0), + [1052] = {.entry = {.count = 1, .reusable = false}}, SHIFT(852), + [1054] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_cases_repeat1, 2, 0, 0), SHIFT_REPEAT(851), + [1057] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 4, 0, 81), + [1059] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 4, 0, 81), + [1061] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 4, 0, 133), + [1063] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 4, 0, 133), + [1065] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 4, 0, 133), + [1067] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 4, 0, 133), + [1069] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 5, 0, 150), + [1071] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 5, 0, 150), + [1073] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_pattern, 1, 0, 0), REDUCE(sym_primary_expression, 1, 0, 0), + [1076] = {.entry = {.count = 1, .reusable = true}}, SHIFT(467), + [1078] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern, 1, 0, 0), + [1080] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 1, 0, 0), + [1082] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 5, 0, 150), + [1084] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 5, 0, 150), + [1086] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 6, 0, 159), + [1088] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 6, 0, 159), + [1090] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 7, 0, 164), + [1092] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 7, 0, 164), + [1094] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 7, 0, 164), + [1096] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 7, 0, 164), + [1098] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), + [1100] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), + [1102] = {.entry = {.count = 1, .reusable = false}}, SHIFT(851), + [1104] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 6, 0, 81), + [1106] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 6, 0, 81), + [1108] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 5, 0, 56), + [1110] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 5, 0, 56), + [1112] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_elif_clause, 5, 0, 77), + [1114] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_elif_clause, 5, 0, 77), + [1116] = {.entry = {.count = 1, .reusable = false}}, SHIFT(328), + [1118] = {.entry = {.count = 1, .reusable = false}}, SHIFT(356), + [1120] = {.entry = {.count = 1, .reusable = false}}, SHIFT(131), + [1122] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 4, 0, 55), + [1124] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 4, 0, 55), + [1126] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 8, 0, 146), + [1128] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 8, 0, 146), + [1130] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_elif_clause, 4, 0, 54), + [1132] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_elif_clause, 4, 0, 54), + [1134] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 5, 0, 80), + [1136] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 5, 0, 80), + [1138] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), + [1140] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_list_pattern, 2, 0, 0), REDUCE(sym_list, 2, 0, 0), + [1143] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), + [1145] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_pattern, 2, 0, 0), + [1147] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_pattern, 2, 0, 0), + [1149] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 7, 0, 132), + [1151] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 7, 0, 132), + [1153] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 7, 0, 128), + [1155] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 7, 0, 128), + [1157] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 1, 0, 74), + [1159] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_if_statement_repeat1, 1, 0, 74), + [1161] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 6, 0, 108), + [1163] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 6, 0, 108), + [1165] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple, 2, 0, 0), + [1167] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_tuple_pattern, 2, 0, 0), REDUCE(sym_tuple, 2, 0, 0), + [1170] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple, 2, 0, 0), + [1172] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_pattern, 2, 0, 0), + [1174] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple_pattern, 2, 0, 0), + [1176] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_else_clause, 4, 0, 81), + [1178] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_else_clause, 4, 0, 81), + [1180] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 5, 0, 152), + [1182] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 5, 0, 152), + [1184] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 5, 0, 153), + [1186] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 5, 0, 153), + [1188] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_else_clause, 3, 0, 56), + [1190] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_else_clause, 3, 0, 56), + [1192] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 4, 0, 137), + [1194] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 4, 0, 137), + [1196] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 6, 0, 160), + [1198] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 6, 0, 160), + [1200] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_finally_clause, 4, 0, 81), + [1202] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_finally_clause, 4, 0, 81), + [1204] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 5, 0, 91), + [1206] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 5, 0, 91), + [1208] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 5, 0, 79), + [1210] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 5, 0, 79), + [1212] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 7, 0, 81), + [1214] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 7, 0, 81), + [1216] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 6, 0, 109), + [1218] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 6, 0, 109), + [1220] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_finally_clause, 3, 0, 56), + [1222] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_finally_clause, 3, 0, 56), + [1224] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 10, 0, 163), + [1226] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 10, 0, 163), + [1228] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 9, 0, 162), + [1230] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 9, 0, 162), + [1232] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 4, 0, 57), + [1234] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 4, 0, 57), + [1236] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 9, 0, 157), + [1238] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 9, 0, 157), + [1240] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 9, 0, 156), + [1242] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 9, 0, 156), + [1244] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 5, 0, 82), + [1246] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 5, 0, 82), + [1248] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 9, 0, 158), + [1250] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 9, 0, 158), + [1252] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 7, 0, 131), + [1254] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 7, 0, 131), + [1256] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, 0, 130), + [1258] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, 0, 130), + [1260] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, 0, 129), + [1262] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, 0, 129), + [1264] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 5, 0, 78), + [1266] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 5, 0, 78), + [1268] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 7, 0, 127), + [1270] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 7, 0, 127), + [1272] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, 0, 140), + [1274] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, 0, 140), + [1276] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, 0, 141), + [1278] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, 0, 141), + [1280] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, 0, 155), + [1282] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, 0, 155), + [1284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, 0, 154), + [1286] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, 0, 154), + [1288] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 6, 0, 121), + [1290] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 6, 0, 121), + [1292] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 6, 0, 120), + [1294] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 6, 0, 120), + [1296] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_statement, 4, 0, 59), + [1298] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_match_statement, 4, 0, 59), + [1300] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_statement, 4, 0, 60), + [1302] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_match_statement, 4, 0, 60), + [1304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 8, 0, 149), + [1306] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 8, 0, 149), + [1308] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 6, 0, 107), + [1310] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 6, 0, 107), + [1312] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 6, 0, 119), + [1314] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 6, 0, 119), + [1316] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 6, 0, 118), + [1318] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 6, 0, 118), + [1320] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 6, 0, 117), + [1322] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 6, 0, 117), + [1324] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, 0, 75), + [1326] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, 0, 75), + [1328] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, 0, 148), + [1330] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, 0, 148), + [1332] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 7, 0, 142), + [1334] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 7, 0, 142), + [1336] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 6, 0, 56), + [1338] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 6, 0, 56), + [1340] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, 0, 147), + [1342] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, 0, 147), + [1344] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 5, 0, 87), + [1346] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 5, 0, 87), + [1348] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 8, 0, 145), + [1350] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 8, 0, 145), + [1352] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 5, 0, 89), + [1354] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 5, 0, 89), + [1356] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 5, 0, 90), + [1358] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 5, 0, 90), + [1360] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 6, 0, 106), + [1362] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 6, 0, 106), + [1364] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, 0, 104), + [1366] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, 0, 104), + [1368] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, 0, 102), + [1370] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, 0, 102), + [1372] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_decorated_definition, 2, 0, 19), + [1374] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_decorated_definition, 2, 0, 19), + [1376] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 4, 0, 64), + [1378] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 4, 0, 64), + [1380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1255), + [1382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(681), + [1384] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 2, 0, 24), + [1386] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 3, 0, 50), + [1388] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2, 0, 0), + [1390] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_concatenated_string_repeat1, 2, 0, 0), + [1392] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2, 0, 0), SHIFT_REPEAT(923), + [1395] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_concatenated_string, 2, 0, 0), + [1397] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_concatenated_string, 2, 0, 0), + [1399] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 3, 0, 20), + [1401] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 3, 0, 20), + [1403] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 2, 0, 2), + [1405] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 2, 0, 2), + [1407] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, 0, 93), + [1409] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, 0, 93), + [1411] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 5, 0, 61), + [1413] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 5, 0, 61), + [1415] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_generator_expression, 4, 0, 51), + [1417] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_generator_expression, 4, 0, 51), + [1419] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, 0, 61), + [1421] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, 0, 61), + [1423] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 2, 0, 0), + [1425] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 2, 0, 0), + [1427] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, 0, 31), + [1429] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, 0, 31), + [1431] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_set, 3, 0, 25), + [1433] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_set, 3, 0, 25), + [1435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1520), + [1437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), + [1439] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), + [1441] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), + [1443] = {.entry = {.count = 1, .reusable = false}}, SHIFT(718), + [1445] = {.entry = {.count = 1, .reusable = true}}, SHIFT(719), + [1447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(722), + [1449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(724), + [1451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(727), + [1453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(258), + [1455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(728), + [1457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(718), + [1459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1514), + [1461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(729), + [1463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(730), + [1465] = {.entry = {.count = 1, .reusable = false}}, SHIFT(722), + [1467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(668), + [1469] = {.entry = {.count = 1, .reusable = false}}, SHIFT(767), + [1471] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_keyword_separator, 1, 0, 0), + [1473] = {.entry = {.count = 1, .reusable = false}}, SHIFT(747), + [1475] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 5, 0, 61), + [1477] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 5, 0, 61), + [1479] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 5, 0, 93), + [1481] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 5, 0, 93), + [1483] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 2, 0, 0), + [1485] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 2, 0, 0), + [1487] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, 0, 67), + [1489] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, 0, 67), + [1491] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 4, 0, 61), + [1493] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 4, 0, 61), + [1495] = {.entry = {.count = 1, .reusable = false}}, SHIFT(708), + [1497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(697), + [1499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(690), + [1501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(723), + [1503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(726), + [1505] = {.entry = {.count = 1, .reusable = true}}, SHIFT(731), + [1507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(708), + [1509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1422), + [1511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(682), + [1513] = {.entry = {.count = 1, .reusable = true}}, SHIFT(712), + [1515] = {.entry = {.count = 1, .reusable = false}}, SHIFT(690), + [1517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(679), + [1519] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 3, 0, 31), + [1521] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 3, 0, 31), + [1523] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 3, 0, 0), + [1525] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 3, 0, 0), + [1527] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call, 2, 0, 17), + [1529] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_call, 2, 0, 17), + [1531] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 25), + [1533] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 25), + [1535] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_comprehension, 4, 0, 51), + [1537] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_comprehension, 4, 0, 51), + [1539] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 4, 0, 31), + [1541] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 4, 0, 31), + [1543] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 3, 0, 67), + [1545] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 3, 0, 67), + [1547] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_set_comprehension, 4, 0, 51), + [1549] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_set_comprehension, 4, 0, 51), + [1551] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 3, 0, 31), + [1553] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 3, 0, 31), + [1555] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 3, 0, 0), + [1557] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 3, 0, 0), + [1559] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_expression, 3, 0, 26), + [1561] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesized_expression, 3, 0, 26), + [1563] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_comprehension, 4, 0, 51), + [1565] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_comprehension, 4, 0, 51), + [1567] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple, 3, 0, 25), + [1569] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple, 3, 0, 25), + [1571] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_operator, 2, 0, 13), + [1573] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_operator, 2, 0, 13), + [1575] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, 0, 41), + [1577] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, 0, 41), + [1579] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_operator, 3, 0, 39), + [1581] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_operator, 3, 0, 39), + [1583] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, 0, 71), + [1585] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, 0, 71), + [1587] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, 0, 72), + [1589] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, 0, 72), + [1591] = {.entry = {.count = 1, .reusable = false}}, SHIFT(616), + [1593] = {.entry = {.count = 1, .reusable = false}}, SHIFT(702), + [1595] = {.entry = {.count = 1, .reusable = false}}, SHIFT(815), + [1597] = {.entry = {.count = 1, .reusable = false}}, SHIFT(714), + [1599] = {.entry = {.count = 1, .reusable = false}}, SHIFT(808), + [1601] = {.entry = {.count = 1, .reusable = false}}, SHIFT(717), + [1603] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2, 0, 0), SHIFT_REPEAT(936), + [1606] = {.entry = {.count = 1, .reusable = true}}, SHIFT(406), + [1608] = {.entry = {.count = 1, .reusable = false}}, SHIFT(698), + [1610] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2, 0, 0), SHIFT_REPEAT(910), + [1613] = {.entry = {.count = 1, .reusable = false}}, SHIFT(881), + [1615] = {.entry = {.count = 1, .reusable = false}}, SHIFT(874), + [1617] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1448), + [1619] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), + [1621] = {.entry = {.count = 1, .reusable = false}}, SHIFT(696), + [1623] = {.entry = {.count = 1, .reusable = true}}, SHIFT(691), + [1625] = {.entry = {.count = 1, .reusable = true}}, SHIFT(686), + [1627] = {.entry = {.count = 1, .reusable = true}}, SHIFT(688), + [1629] = {.entry = {.count = 1, .reusable = true}}, SHIFT(721), + [1631] = {.entry = {.count = 1, .reusable = true}}, SHIFT(256), + [1633] = {.entry = {.count = 1, .reusable = true}}, SHIFT(705), + [1635] = {.entry = {.count = 1, .reusable = true}}, SHIFT(696), + [1637] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1449), + [1639] = {.entry = {.count = 1, .reusable = true}}, SHIFT(693), + [1641] = {.entry = {.count = 1, .reusable = true}}, SHIFT(709), + [1643] = {.entry = {.count = 1, .reusable = false}}, SHIFT(686), + [1645] = {.entry = {.count = 1, .reusable = true}}, SHIFT(672), + [1647] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1424), + [1649] = {.entry = {.count = 1, .reusable = true}}, SHIFT(180), + [1651] = {.entry = {.count = 1, .reusable = false}}, SHIFT(716), + [1653] = {.entry = {.count = 1, .reusable = true}}, SHIFT(715), + [1655] = {.entry = {.count = 1, .reusable = true}}, SHIFT(707), + [1657] = {.entry = {.count = 1, .reusable = true}}, SHIFT(706), + [1659] = {.entry = {.count = 1, .reusable = true}}, SHIFT(704), + [1661] = {.entry = {.count = 1, .reusable = true}}, SHIFT(251), + [1663] = {.entry = {.count = 1, .reusable = true}}, SHIFT(700), + [1665] = {.entry = {.count = 1, .reusable = true}}, SHIFT(716), + [1667] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1433), + [1669] = {.entry = {.count = 1, .reusable = true}}, SHIFT(695), + [1671] = {.entry = {.count = 1, .reusable = true}}, SHIFT(694), + [1673] = {.entry = {.count = 1, .reusable = false}}, SHIFT(707), + [1675] = {.entry = {.count = 1, .reusable = true}}, SHIFT(669), [1677] = {.entry = {.count = 1, .reusable = false}}, SHIFT(451), - [1679] = {.entry = {.count = 1, .reusable = true}}, SHIFT(392), - [1681] = {.entry = {.count = 1, .reusable = false}}, SHIFT(925), - [1683] = {.entry = {.count = 1, .reusable = true}}, SHIFT(853), - [1685] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1259), - [1687] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1390), - [1689] = {.entry = {.count = 1, .reusable = false}}, SHIFT(971), - [1691] = {.entry = {.count = 1, .reusable = true}}, SHIFT(856), - [1693] = {.entry = {.count = 1, .reusable = true}}, SHIFT(892), - [1695] = {.entry = {.count = 1, .reusable = false}}, SHIFT(943), - [1697] = {.entry = {.count = 1, .reusable = true}}, SHIFT(943), - [1699] = {.entry = {.count = 1, .reusable = false}}, SHIFT(975), - [1701] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_open_sequence_match_pattern, 2), - [1703] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_open_sequence_match_pattern, 2), - [1705] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_open_sequence_match_pattern, 3), - [1707] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_open_sequence_match_pattern, 3), - [1709] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1006), - [1711] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1011), - [1713] = {.entry = {.count = 1, .reusable = true}}, SHIFT(987), - [1715] = {.entry = {.count = 1, .reusable = false}}, SHIFT(999), - [1717] = {.entry = {.count = 1, .reusable = true}}, SHIFT(998), - [1719] = {.entry = {.count = 1, .reusable = true}}, SHIFT(981), - [1721] = {.entry = {.count = 1, .reusable = true}}, SHIFT(970), - [1723] = {.entry = {.count = 1, .reusable = false}}, SHIFT(984), - [1725] = {.entry = {.count = 1, .reusable = false}}, SHIFT(957), - [1727] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), - [1729] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), - [1731] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(702), - [1734] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(1446), - [1737] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(702), - [1740] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(676), - [1743] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(696), - [1746] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(1436), - [1749] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(696), - [1752] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(673), - [1755] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comparison_operator, 2, .production_id = 18), - [1757] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_comparison_operator, 2, .production_id = 18), - [1759] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__patterns_repeat1, 2, .production_id = 36), - [1761] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__patterns_repeat1, 2, .production_id = 36), SHIFT_REPEAT(607), - [1764] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_pattern, 3, .production_id = 25), - [1766] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_pattern, 3, .production_id = 25), - [1768] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__patterns_repeat1, 2, .production_id = 31), - [1770] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(722), - [1773] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(1494), - [1776] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(722), - [1779] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(669), - [1782] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_splat_pattern, 2, .production_id = 34), - [1784] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_splat_pattern, 2, .production_id = 33), - [1786] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(680), - [1789] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(1430), - [1792] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(680), - [1795] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(670), - [1798] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), - [1800] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_list, 2, .production_id = 16), - [1802] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1339), + [1679] = {.entry = {.count = 1, .reusable = true}}, SHIFT(471), + [1681] = {.entry = {.count = 1, .reusable = false}}, SHIFT(930), + [1683] = {.entry = {.count = 1, .reusable = true}}, SHIFT(858), + [1685] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1334), + [1687] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_open_sequence_match_pattern, 3, 0, 0), + [1689] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_open_sequence_match_pattern, 3, 0, 0), + [1691] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1354), + [1693] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1014), + [1695] = {.entry = {.count = 1, .reusable = true}}, SHIFT(854), + [1697] = {.entry = {.count = 1, .reusable = true}}, SHIFT(893), + [1699] = {.entry = {.count = 1, .reusable = false}}, SHIFT(946), + [1701] = {.entry = {.count = 1, .reusable = true}}, SHIFT(946), + [1703] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1007), + [1705] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_open_sequence_match_pattern, 2, 0, 0), + [1707] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_open_sequence_match_pattern, 2, 0, 0), + [1709] = {.entry = {.count = 1, .reusable = true}}, SHIFT(984), + [1711] = {.entry = {.count = 1, .reusable = true}}, SHIFT(983), + [1713] = {.entry = {.count = 1, .reusable = true}}, SHIFT(995), + [1715] = {.entry = {.count = 1, .reusable = false}}, SHIFT(998), + [1717] = {.entry = {.count = 1, .reusable = true}}, SHIFT(987), + [1719] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1000), + [1721] = {.entry = {.count = 1, .reusable = true}}, SHIFT(971), + [1723] = {.entry = {.count = 1, .reusable = false}}, SHIFT(957), + [1725] = {.entry = {.count = 1, .reusable = false}}, SHIFT(986), + [1727] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comparison_operator, 2, 0, 18), + [1729] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_comparison_operator, 2, 0, 18), + [1731] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, 0, 42), + [1733] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, 0, 42), + [1735] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, 0, 42), SHIFT_REPEAT(722), + [1738] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, 0, 42), SHIFT_REPEAT(1514), + [1741] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, 0, 42), SHIFT_REPEAT(722), + [1744] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, 0, 42), SHIFT_REPEAT(668), + [1747] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, 0, 42), SHIFT_REPEAT(690), + [1750] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, 0, 42), SHIFT_REPEAT(1422), + [1753] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, 0, 42), SHIFT_REPEAT(690), + [1756] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, 0, 42), SHIFT_REPEAT(679), + [1759] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__patterns_repeat1, 2, 0, 36), + [1761] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__patterns_repeat1, 2, 0, 36), SHIFT_REPEAT(608), + [1764] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_splat_pattern, 2, 0, 33), + [1766] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_pattern, 3, 0, 25), + [1768] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_pattern, 3, 0, 25), + [1770] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__patterns_repeat1, 2, 0, 31), + [1772] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, 0, 42), SHIFT_REPEAT(686), + [1775] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, 0, 42), SHIFT_REPEAT(1449), + [1778] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, 0, 42), SHIFT_REPEAT(686), + [1781] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, 0, 42), SHIFT_REPEAT(672), + [1784] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_splat_pattern, 2, 0, 34), + [1786] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, 0, 42), SHIFT_REPEAT(707), + [1789] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, 0, 42), SHIFT_REPEAT(1433), + [1792] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, 0, 42), SHIFT_REPEAT(707), + [1795] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, 0, 42), SHIFT_REPEAT(669), + [1798] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), + [1800] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_list, 2, 0, 16), + [1802] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1342), [1804] = {.entry = {.count = 1, .reusable = true}}, SHIFT(596), - [1806] = {.entry = {.count = 1, .reusable = false}}, SHIFT(636), - [1808] = {.entry = {.count = 1, .reusable = true}}, SHIFT(444), - [1810] = {.entry = {.count = 1, .reusable = true}}, SHIFT(715), - [1812] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1340), - [1814] = {.entry = {.count = 1, .reusable = true}}, SHIFT(463), - [1816] = {.entry = {.count = 1, .reusable = true}}, SHIFT(309), - [1818] = {.entry = {.count = 1, .reusable = true}}, SHIFT(458), - [1820] = {.entry = {.count = 1, .reusable = true}}, SHIFT(165), - [1822] = {.entry = {.count = 1, .reusable = true}}, SHIFT(348), - [1824] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156), - [1826] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), - [1828] = {.entry = {.count = 1, .reusable = true}}, SHIFT(481), - [1830] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1365), - [1832] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1008), - [1834] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1357), - [1836] = {.entry = {.count = 1, .reusable = true}}, SHIFT(993), - [1838] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1177), - [1840] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1380), - [1842] = {.entry = {.count = 1, .reusable = true}}, SHIFT(986), - [1844] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameters, 2), - [1846] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameters, 3), - [1848] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_await, 2), - [1850] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_await, 2), - [1852] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_not_operator, 2, .production_id = 10), - [1854] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_not_operator, 2, .production_id = 10), - [1856] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_value_pattern_repeat1, 2), - [1858] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_value_pattern_repeat1, 2), SHIFT_REPEAT(1445), - [1861] = {.entry = {.count = 1, .reusable = true}}, SHIFT(182), - [1863] = {.entry = {.count = 1, .reusable = true}}, SHIFT(386), - [1865] = {.entry = {.count = 1, .reusable = true}}, SHIFT(473), - [1867] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1416), - [1869] = {.entry = {.count = 1, .reusable = true}}, SHIFT(601), - [1871] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 1, .production_id = 7), - [1873] = {.entry = {.count = 1, .reusable = true}}, SHIFT(455), - [1875] = {.entry = {.count = 1, .reusable = true}}, SHIFT(457), - [1877] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda, 4, .production_id = 66), - [1879] = {.entry = {.count = 1, .reusable = true}}, SHIFT(429), - [1881] = {.entry = {.count = 1, .reusable = true}}, SHIFT(446), - [1883] = {.entry = {.count = 1, .reusable = true}}, SHIFT(409), - [1885] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_conditional_expression, 5), - [1887] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_conditional_expression, 5), - [1889] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1445), - [1891] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_class_name, 2), - [1893] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_value_pattern, 2), - [1895] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda, 3, .production_id = 32), - [1897] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lambda, 3, .production_id = 32), - [1899] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 1), - [1901] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_expression, 3, .production_id = 35), - [1903] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_named_expression, 3, .production_id = 35), - [1905] = {.entry = {.count = 1, .reusable = true}}, SHIFT(842), - [1907] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_with_item, 1, .dynamic_precedence = -1, .production_id = 12), SHIFT(182), - [1910] = {.entry = {.count = 1, .reusable = false}}, SHIFT(608), - [1912] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean_operator, 3, .production_id = 39), - [1914] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean_operator, 3, .production_id = 39), - [1916] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lambda, 4, .production_id = 66), - [1918] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_class_name, 1), - [1920] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_capture_pattern, 1), - [1922] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_expression, 3, .production_id = 27), - [1924] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_named_expression, 3, .production_id = 27), - [1926] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield, 2), - [1928] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), - [1930] = {.entry = {.count = 1, .reusable = true}}, SHIFT(628), - [1932] = {.entry = {.count = 1, .reusable = true}}, SHIFT(785), - [1934] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, .production_id = 31), - [1936] = {.entry = {.count = 1, .reusable = false}}, SHIFT(178), - [1938] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1031), - [1940] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1031), - [1942] = {.entry = {.count = 1, .reusable = false}}, SHIFT_EXTRA(), - [1944] = {.entry = {.count = 1, .reusable = true}}, SHIFT(744), - [1946] = {.entry = {.count = 1, .reusable = true}}, SHIFT(736), - [1948] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, .production_id = 21), SHIFT_REPEAT(178), - [1951] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 2, .production_id = 21), SHIFT_REPEAT(1031), - [1954] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, .production_id = 21), SHIFT_REPEAT(1031), - [1957] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 2, .production_id = 21), - [1959] = {.entry = {.count = 1, .reusable = true}}, SHIFT(758), - [1961] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield, 3), - [1963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(799), - [1965] = {.entry = {.count = 1, .reusable = true}}, SHIFT(216), - [1967] = {.entry = {.count = 1, .reusable = true}}, SHIFT(609), - [1969] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 1, .production_id = 83), - [1971] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1381), - [1973] = {.entry = {.count = 1, .reusable = true}}, SHIFT(610), - [1975] = {.entry = {.count = 1, .reusable = true}}, SHIFT(820), - [1977] = {.entry = {.count = 1, .reusable = true}}, SHIFT(196), - [1979] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_splat, 2, .production_id = 14), - [1981] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_splat, 2), - [1983] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1291), - [1985] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1318), - [1987] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 2, .production_id = 109), - [1989] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1387), - [1991] = {.entry = {.count = 1, .reusable = true}}, SHIFT(769), - [1993] = {.entry = {.count = 1, .reusable = true}}, SHIFT(621), - [1995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(203), - [1997] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_or_pattern_repeat1, 2), - [1999] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_or_pattern_repeat1, 2), SHIFT_REPEAT(866), - [2002] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2), - [2004] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2), SHIFT_REPEAT(390), - [2007] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2), SHIFT_REPEAT(1416), - [2010] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2), SHIFT_REPEAT(601), - [2013] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__comprehension_clauses, 1), - [2015] = {.entry = {.count = 1, .reusable = true}}, SHIFT(390), - [2017] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_or_pattern, 3), - [2019] = {.entry = {.count = 1, .reusable = true}}, SHIFT(866), - [2021] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__expression_within_for_in_clause, 1), - [2023] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__comprehension_clauses, 2), - [2025] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__f_expression, 1), - [2027] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_or_pattern, 4), - [2029] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_list, 2, .production_id = 16), - [2031] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), - [2033] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1468), - [2035] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 8, .production_id = 135), - [2037] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 7, .production_id = 135), - [2039] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 7), - [2041] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 6, .production_id = 135), - [2043] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_or_pattern, 1), - [2045] = {.entry = {.count = 1, .reusable = true}}, SHIFT(867), - [2047] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 6), - [2049] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 3), - [2051] = {.entry = {.count = 1, .reusable = true}}, SHIFT(411), - [2053] = {.entry = {.count = 1, .reusable = true}}, SHIFT(410), - [2055] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_group_pattern, 3, .production_id = 130), - [2057] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 5, .production_id = 122), - [2059] = {.entry = {.count = 1, .reusable = true}}, SHIFT(192), - [2061] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 5, .production_id = 121), - [2063] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), - [2065] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 5, .production_id = 135), - [2067] = {.entry = {.count = 1, .reusable = true}}, SHIFT(477), - [2069] = {.entry = {.count = 1, .reusable = true}}, SHIFT(210), - [2071] = {.entry = {.count = 1, .reusable = true}}, SHIFT(415), - [2073] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 2), - [2075] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), - [2077] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 5), - [2079] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 5), - [2081] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 3), - [2083] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 9, .production_id = 135), - [2085] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 3, .production_id = 131), - [2087] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1435), - [2089] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 2), - [2091] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_clause, 2), - [2093] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 6, .production_id = 140), - [2095] = {.entry = {.count = 1, .reusable = true}}, SHIFT(185), - [2097] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1520), - [2099] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1516), - [2101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1498), - [2103] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 3, .production_id = 135), - [2105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(865), - [2107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1488), - [2109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1511), - [2111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1508), - [2113] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 4, .production_id = 135), - [2115] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, .production_id = 36), - [2117] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, .production_id = 36), SHIFT_REPEAT(245), - [2120] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 2), - [2122] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 4), - [2124] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 4, .production_id = 147), - [2126] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 4), - [2128] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_for_in_clause_repeat1, 2), - [2130] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_for_in_clause_repeat1, 2), SHIFT_REPEAT(280), - [2133] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 4, .production_id = 100), - [2135] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213), - [2137] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1061), - [2139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1144), - [2141] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1444), - [2143] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_within_for_in_clause, 3, .production_id = 32), - [2145] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_statement, 1), - [2147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1139), - [2149] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1456), - [2151] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1457), - [2153] = {.entry = {.count = 1, .reusable = true}}, SHIFT(262), - [2155] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), - [2157] = {.entry = {.count = 1, .reusable = true}}, SHIFT(352), - [2159] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type, 1), - [2161] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_pattern, 1), - [2163] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1440), - [2165] = {.entry = {.count = 1, .reusable = true}}, SHIFT(395), - [2167] = {.entry = {.count = 1, .reusable = true}}, SHIFT(396), - [2169] = {.entry = {.count = 1, .reusable = true}}, SHIFT(480), - [2171] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_exec_statement, 4, .production_id = 15), - [2173] = {.entry = {.count = 1, .reusable = true}}, SHIFT(426), - [2175] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string_content, 1), - [2177] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1055), - [2179] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1055), - [2181] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string_content, 1), - [2183] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_within_for_in_clause, 4, .production_id = 66), - [2185] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__right_hand_side, 1), - [2187] = {.entry = {.count = 1, .reusable = true}}, SHIFT(252), - [2189] = {.entry = {.count = 1, .reusable = true}}, SHIFT(624), - [2191] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pair, 3, .production_id = 62), - [2193] = {.entry = {.count = 1, .reusable = true}}, SHIFT(269), - [2195] = {.entry = {.count = 1, .reusable = true}}, SHIFT(219), - [2197] = {.entry = {.count = 1, .reusable = true}}, SHIFT(300), - [2199] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 2, .production_id = 10), - [2201] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assert_statement, 2), - [2203] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 2), - [2205] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_delete_statement, 2, .production_id = 11), - [2207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(261), - [2209] = {.entry = {.count = 1, .reusable = true}}, SHIFT(822), - [2211] = {.entry = {.count = 1, .reusable = true}}, SHIFT(246), - [2213] = {.entry = {.count = 1, .reusable = true}}, SHIFT(815), - [2215] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_item, 1, .dynamic_precedence = -1, .production_id = 12), - [2217] = {.entry = {.count = 1, .reusable = true}}, SHIFT(608), - [2219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(251), - [2221] = {.entry = {.count = 1, .reusable = true}}, SHIFT(774), - [2223] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__collection_elements_repeat1, 2, .production_id = 31), - [2225] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_content_repeat1, 2), - [2227] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_content_repeat1, 2), SHIFT_REPEAT(1055), - [2230] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_content_repeat1, 2), SHIFT_REPEAT(1055), - [2233] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_content_repeat1, 2), - [2235] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1088), - [2237] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1193), - [2239] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1400), - [2241] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_value_pattern_repeat1, 2), SHIFT_REPEAT(1477), - [2244] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dotted_name, 2), - [2246] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), - [2248] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 3, .production_id = 43), - [2250] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 3, .production_id = 43), - [2252] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dotted_name, 1), - [2254] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_decorated_definition_repeat1, 2), - [2256] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_decorated_definition_repeat1, 2), SHIFT_REPEAT(417), - [2259] = {.entry = {.count = 1, .reusable = true}}, SHIFT(399), - [2261] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), - [2263] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, .production_id = 95), - [2265] = {.entry = {.count = 1, .reusable = true}}, SHIFT(289), - [2267] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_assert_statement_repeat1, 2), - [2269] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_print_statement_repeat1, 2, .production_id = 10), - [2271] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 4, .production_id = 43), - [2273] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 4, .production_id = 43), - [2275] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1477), - [2277] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 5, .production_id = 43), - [2279] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 5, .production_id = 43), - [2281] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), - [2283] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 1, .production_id = 3), - [2285] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 1, .production_id = 3), - [2287] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_default_parameter, 3, .production_id = 35), - [2289] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 6, .production_id = 43), - [2291] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 6, .production_id = 43), - [2293] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), - [2295] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 1, .production_id = 4), - [2297] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 1, .production_id = 4), - [2299] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_open_sequence_match_pattern_repeat1, 2), - [2301] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_open_sequence_match_pattern_repeat1, 2), SHIFT_REPEAT(859), - [2304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_chevron, 2), - [2306] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1184), - [2308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1180), - [2310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(471), - [2312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(103), - [2314] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 2, .production_id = 68), - [2316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(294), - [2318] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typed_default_parameter, 5, .production_id = 118), - [2320] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), - [2322] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_subscript_repeat1, 2, .production_id = 94), - [2324] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_as_pattern, 3, .production_id = 134), - [2326] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 4, .production_id = 120), - [2328] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 4, .production_id = 119), - [2330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(205), - [2332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 3, .production_id = 22), - [2334] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, .production_id = 36), SHIFT_REPEAT(244), - [2337] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1125), - [2339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1253), - [2341] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1181), - [2343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1260), - [2345] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_bound, 2, .production_id = 110), - [2347] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_format_specifier, 2), - [2349] = {.entry = {.count = 1, .reusable = true}}, SHIFT(183), - [2351] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1117), - [2353] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 5, .production_id = 139), - [2355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(468), - [2357] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), - [2359] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 3, .production_id = 30), - [2361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), - [2363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(104), - [2365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1037), - [2367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), - [2369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1118), - [2371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1450), - [2373] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 1, .production_id = 6), - [2375] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_star_pattern, 2, .production_id = 11), - [2377] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 2, .production_id = 16), - [2379] = {.entry = {.count = 1, .reusable = true}}, SHIFT(175), - [2381] = {.entry = {.count = 1, .reusable = true}}, SHIFT(195), - [2383] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_alias_statement, 4, .production_id = 63), - [2385] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__collection_elements_repeat1, 2, .production_id = 36), - [2387] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__collection_elements_repeat1, 2, .production_id = 36), SHIFT_REPEAT(230), - [2390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), - [2392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1188), - [2394] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_format_specifier_repeat1, 2), - [2396] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_format_specifier_repeat1, 2), SHIFT_REPEAT(183), - [2399] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_format_specifier_repeat1, 2), SHIFT_REPEAT(1117), - [2402] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 2, .production_id = 6), - [2404] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, .production_id = 93), - [2406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1060), - [2408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1173), - [2410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1278), - [2412] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_alias_statement, 5, .production_id = 87), - [2414] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 4, .production_id = 53), - [2416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(398), - [2418] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), - [2420] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, .production_id = 31), - [2422] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_format_specifier, 1), - [2424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1099), - [2426] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_keyword_argument, 3, .production_id = 27), - [2428] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_keyword_argument, 3, .production_id = 35), - [2430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(893), - [2432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(852), - [2434] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typed_parameter, 3, .production_id = 65), - [2436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(479), - [2438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), - [2440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), - [2442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), - [2444] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_exec_statement, 5, .production_id = 15), - [2446] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_global_statement_repeat1, 2), SHIFT_REPEAT(1490), - [2449] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_global_statement_repeat1, 2), - [2451] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevar_parameter, 1, .production_id = 6), - [2453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(434), - [2455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), - [2457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), - [2459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1061), - [2461] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_import_prefix, 1), - [2463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1165), - [2465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(474), - [2467] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 1, .production_id = 7), - [2469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(597), - [2471] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_guard, 2, .production_id = 132), - [2473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(405), - [2475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(295), - [2477] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 2), - [2479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), - [2481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(389), - [2483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), - [2485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1490), - [2487] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_global_statement, 2), - [2489] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_nonlocal_statement, 2), - [2491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1185), - [2493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), - [2495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), - [2497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), - [2499] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_assert_statement_repeat1, 2), SHIFT_REPEAT(480), - [2502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1182), - [2504] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1443), - [2506] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_print_statement_repeat1, 2, .production_id = 52), SHIFT_REPEAT(483), - [2509] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_print_statement_repeat1, 2, .production_id = 52), - [2511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1093), - [2513] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 2, .production_id = 22), - [2515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1095), - [2517] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_import_prefix_repeat1, 2), - [2519] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_import_prefix_repeat1, 2), SHIFT_REPEAT(1165), - [2522] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 2, .production_id = 16), - [2524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(595), - [2526] = {.entry = {.count = 1, .reusable = true}}, SHIFT(448), - [2528] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_list_splat, 3, .production_id = 49), - [2530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304), - [2532] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3, .production_id = 28), - [2534] = {.entry = {.count = 1, .reusable = true}}, SHIFT(303), - [2536] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3, .production_id = 29), - [2538] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1067), - [2540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1315), - [2542] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assert_statement, 3), - [2544] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_list_splat, 3), - [2546] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameter, 1), - [2548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(361), - [2550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(438), - [2552] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_with_clause_repeat1, 2), - [2554] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_with_clause_repeat1, 2), SHIFT_REPEAT(351), - [2557] = {.entry = {.count = 1, .reusable = true}}, SHIFT(849), - [2559] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1332), - [2561] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1284), - [2563] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, .production_id = 23), - [2565] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_decorator, 3), - [2567] = {.entry = {.count = 1, .reusable = true}}, SHIFT(482), - [2569] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, .production_id = 44), SHIFT_REPEAT(1312), - [2572] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, .production_id = 44), - [2574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(851), - [2576] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_nonlocal_statement, 3), - [2578] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_global_statement, 3), - [2580] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), - [2582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1412), - [2584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(968), - [2586] = {.entry = {.count = 1, .reusable = true}}, SHIFT(274), - [2588] = {.entry = {.count = 1, .reusable = true}}, SHIFT(342), - [2590] = {.entry = {.count = 1, .reusable = true}}, SHIFT(233), - [2592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(239), - [2594] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__simple_statements_repeat1, 2), SHIFT_REPEAT(147), - [2597] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__simple_statements_repeat1, 2), - [2599] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__parameters_repeat1, 2), - [2601] = {.entry = {.count = 1, .reusable = true}}, SHIFT(855), - [2603] = {.entry = {.count = 1, .reusable = true}}, SHIFT(973), - [2605] = {.entry = {.count = 1, .reusable = true}}, SHIFT(273), - [2607] = {.entry = {.count = 1, .reusable = true}}, SHIFT(343), - [2609] = {.entry = {.count = 1, .reusable = true}}, SHIFT(896), - [2611] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1142), - [2613] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1147), - [2615] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1020), - [2617] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1250), - [2619] = {.entry = {.count = 1, .reusable = true}}, SHIFT(138), - [2621] = {.entry = {.count = 1, .reusable = true}}, SHIFT(313), - [2623] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), - [2625] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_mapping_pattern_repeat1, 2), SHIFT_REPEAT(905), - [2628] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_mapping_pattern_repeat1, 2), - [2630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1004), - [2632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(861), - [2634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(862), - [2636] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139), - [2638] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1233), - [2640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1314), - [2642] = {.entry = {.count = 1, .reusable = true}}, SHIFT(891), - [2644] = {.entry = {.count = 1, .reusable = true}}, SHIFT(988), - [2646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(459), - [2648] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), - [2650] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), - [2652] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_aliased_import, 3, .production_id = 45), - [2654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1322), - [2656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(793), - [2658] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), - [2660] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameters, 1), - [2662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(895), - [2664] = {.entry = {.count = 1, .reusable = true}}, SHIFT(802), - [2666] = {.entry = {.count = 1, .reusable = true}}, SHIFT(189), - [2668] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), - [2670] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, .production_id = 36), - [2672] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, .production_id = 36), SHIFT_REPEAT(222), - [2675] = {.entry = {.count = 1, .reusable = true}}, SHIFT(253), - [2677] = {.entry = {.count = 1, .reusable = true}}, SHIFT(790), - [2679] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_repeat1, 2, .production_id = 36), SHIFT_REPEAT(275), - [2682] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_repeat1, 2, .production_id = 36), - [2684] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_relative_import, 1), - [2686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), - [2688] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), - [2690] = {.entry = {.count = 1, .reusable = true}}, SHIFT(358), - [2692] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, .production_id = 44), SHIFT_REPEAT(1317), - [2695] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), - [2697] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), - [2699] = {.entry = {.count = 1, .reusable = true}}, SHIFT(796), - [2701] = {.entry = {.count = 1, .reusable = true}}, SHIFT(249), - [2703] = {.entry = {.count = 1, .reusable = true}}, SHIFT(640), - [2705] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), - [2707] = {.entry = {.count = 1, .reusable = true}}, SHIFT(360), - [2709] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), - [2711] = {.entry = {.count = 1, .reusable = true}}, SHIFT(242), - [2713] = {.entry = {.count = 1, .reusable = true}}, SHIFT(634), - [2715] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), - [2717] = {.entry = {.count = 1, .reusable = true}}, SHIFT(362), - [2719] = {.entry = {.count = 1, .reusable = true}}, SHIFT(899), - [2721] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameters, 4, .production_id = 111), - [2723] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_type_parameters_repeat1, 2, .production_id = 112), SHIFT_REPEAT(1020), - [2726] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_type_parameters_repeat1, 2, .production_id = 112), - [2728] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), - [2730] = {.entry = {.count = 1, .reusable = true}}, SHIFT(620), - [2732] = {.entry = {.count = 1, .reusable = true}}, SHIFT(208), - [2734] = {.entry = {.count = 1, .reusable = true}}, SHIFT(894), - [2736] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1087), - [2738] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1110), - [2740] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), - [2742] = {.entry = {.count = 1, .reusable = true}}, SHIFT(369), - [2744] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), - [2746] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 3, .production_id = 37), - [2748] = {.entry = {.count = 1, .reusable = true}}, SHIFT(782), - [2750] = {.entry = {.count = 1, .reusable = true}}, SHIFT(215), - [2752] = {.entry = {.count = 1, .reusable = true}}, SHIFT(351), - [2754] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 2), - [2756] = {.entry = {.count = 1, .reusable = true}}, SHIFT(364), - [2758] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1489), - [2760] = {.entry = {.count = 1, .reusable = true}}, SHIFT(290), - [2762] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_format_specifier_repeat1, 1, .production_id = 73), - [2764] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_format_specifier_repeat1, 1, .production_id = 73), - [2766] = {.entry = {.count = 1, .reusable = true}}, SHIFT(257), - [2768] = {.entry = {.count = 1, .reusable = true}}, SHIFT(810), - [2770] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), - [2772] = {.entry = {.count = 1, .reusable = true}}, SHIFT(836), - [2774] = {.entry = {.count = 1, .reusable = true}}, SHIFT(831), - [2776] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), - [2778] = {.entry = {.count = 1, .reusable = true}}, SHIFT(830), - [2780] = {.entry = {.count = 1, .reusable = true}}, SHIFT(198), - [2782] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__parameters_repeat1, 2), SHIFT_REPEAT(903), - [2785] = {.entry = {.count = 1, .reusable = true}}, SHIFT(235), - [2787] = {.entry = {.count = 1, .reusable = true}}, SHIFT(632), - [2789] = {.entry = {.count = 1, .reusable = true}}, SHIFT(209), - [2791] = {.entry = {.count = 1, .reusable = true}}, SHIFT(644), - [2793] = {.entry = {.count = 1, .reusable = true}}, SHIFT(207), - [2795] = {.entry = {.count = 1, .reusable = true}}, SHIFT(613), - [2797] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206), - [2799] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_item, 3, .dynamic_precedence = -1, .production_id = 58), - [2801] = {.entry = {.count = 1, .reusable = true}}, SHIFT(256), - [2803] = {.entry = {.count = 1, .reusable = true}}, SHIFT(221), - [2805] = {.entry = {.count = 1, .reusable = true}}, SHIFT(255), - [2807] = {.entry = {.count = 1, .reusable = true}}, SHIFT(220), - [2809] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1307), - [2811] = {.entry = {.count = 1, .reusable = true}}, SHIFT(827), - [2813] = {.entry = {.count = 1, .reusable = true}}, SHIFT(199), - [2815] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), - [2817] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_maybe_star_pattern, 1), - [2819] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_patterns, 1), - [2821] = {.entry = {.count = 1, .reusable = true}}, SHIFT(225), - [2823] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1195), - [2825] = {.entry = {.count = 1, .reusable = true}}, SHIFT(224), - [2827] = {.entry = {.count = 1, .reusable = true}}, SHIFT(286), - [2829] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__parameters_repeat1, 2), SHIFT_REPEAT(902), - [2832] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat1, 2), - [2834] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat1, 2), SHIFT_REPEAT(863), - [2837] = {.entry = {.count = 1, .reusable = true}}, SHIFT(821), - [2839] = {.entry = {.count = 1, .reusable = true}}, SHIFT(186), - [2841] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_subscript_repeat1, 2, .production_id = 97), SHIFT_REPEAT(314), - [2844] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_subscript_repeat1, 2, .production_id = 97), - [2846] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), - [2848] = {.entry = {.count = 1, .reusable = true}}, SHIFT(809), - [2850] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1170), - [2852] = {.entry = {.count = 1, .reusable = true}}, SHIFT(243), - [2854] = {.entry = {.count = 1, .reusable = true}}, SHIFT(835), - [2856] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1175), - [2858] = {.entry = {.count = 1, .reusable = true}}, SHIFT(297), - [2860] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), - [2862] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), - [2864] = {.entry = {.count = 1, .reusable = true}}, SHIFT(302), - [2866] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1069), - [2868] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat2, 2), - [2870] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat2, 2), SHIFT_REPEAT(1353), - [2873] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), - [2875] = {.entry = {.count = 1, .reusable = true}}, SHIFT(308), - [2877] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 1), - [2879] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameters, 3, .production_id = 85), - [2881] = {.entry = {.count = 1, .reusable = true}}, SHIFT(857), - [2883] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1329), - [2885] = {.entry = {.count = 1, .reusable = true}}, SHIFT(776), - [2887] = {.entry = {.count = 1, .reusable = true}}, SHIFT(214), - [2889] = {.entry = {.count = 1, .reusable = true}}, SHIFT(966), - [2891] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1215), - [2893] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1338), - [2895] = {.entry = {.count = 1, .reusable = true}}, SHIFT(898), - [2897] = {.entry = {.count = 1, .reusable = true}}, SHIFT(462), - [2899] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_exec_statement, 2, .production_id = 15), - [2901] = {.entry = {.count = 1, .reusable = true}}, SHIFT(461), - [2903] = {.entry = {.count = 1, .reusable = true}}, SHIFT(858), - [2905] = {.entry = {.count = 1, .reusable = true}}, SHIFT(989), - [2907] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_positional_separator, 1), - [2909] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_future_import_statement, 6, .production_id = 98), - [2911] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevar_parameter, 2, .production_id = 84), - [2913] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), - [2915] = {.entry = {.count = 1, .reusable = true}}, SHIFT(341), - [2917] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pass_statement, 1), - [2919] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_break_statement, 1), - [2921] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_continue_statement, 1), - [2923] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_from_statement, 6, .production_id = 99), - [2925] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevartuple_parameter, 2, .production_id = 23), - [2927] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_key_value_pattern, 3, .production_id = 62), - [2929] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1087), - [2931] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1424), - [2933] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), - [2935] = {.entry = {.count = 1, .reusable = true}}, SHIFT(350), - [2937] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_positional_pattern, 1), - [2939] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_double_star_pattern, 2, .production_id = 11), - [2941] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1426), - [2943] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 5, .production_id = 91), - [2945] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99), - [2947] = {.entry = {.count = 1, .reusable = true}}, SHIFT(368), - [2949] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), - [2951] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321), - [2953] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameters, 3), - [2955] = {.entry = {.count = 1, .reusable = true}}, SHIFT(105), - [2957] = {.entry = {.count = 1, .reusable = true}}, SHIFT(322), - [2959] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), - [2961] = {.entry = {.count = 1, .reusable = true}}, SHIFT(346), - [2963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), - [2965] = {.entry = {.count = 1, .reusable = true}}, SHIFT(323), - [2967] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), - [2969] = {.entry = {.count = 1, .reusable = true}}, SHIFT(324), - [2971] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, .production_id = 67), - [2973] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameters, 2), - [2975] = {.entry = {.count = 1, .reusable = false}}, SHIFT(990), - [2977] = {.entry = {.count = 1, .reusable = true}}, SHIFT(990), - [2979] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_statement, 2, .production_id = 5), - [2981] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_repeat1, 2, .production_id = 31), - [2983] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_future_import_statement, 4, .production_id = 46), - [2985] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_augmented_assignment, 3, .production_id = 39), - [2987] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1010), - [2989] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1010), - [2991] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_type_parameters_repeat1, 2, .production_id = 85), - [2993] = {.entry = {.count = 1, .reusable = false}}, SHIFT(951), - [2995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(951), - [2997] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 3, .production_id = 38), - [2999] = {.entry = {.count = 1, .reusable = true}}, SHIFT(977), - [3001] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_from_statement, 4, .production_id = 48), - [3003] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_from_statement, 4, .production_id = 47), - [3005] = {.entry = {.count = 1, .reusable = true}}, SHIFT(854), - [3007] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_keyword_pattern, 3, .production_id = 157), - [3009] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_wildcard_import, 1), - [3011] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1496), - [3013] = {.entry = {.count = 1, .reusable = true}}, SHIFT(972), - [3015] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_paramspec_parameter, 2, .production_id = 23), - [3017] = {.entry = {.count = 1, .reusable = true}}, SHIFT(850), - [3019] = {.entry = {.count = 1, .reusable = true}}, SHIFT(612), - [3021] = {.entry = {.count = 1, .reusable = true}}, SHIFT(860), - [3023] = {.entry = {.count = 1, .reusable = true}}, SHIFT(817), - [3025] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_relative_import, 2, .production_id = 23), - [3027] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1222), - [3029] = {.entry = {.count = 1, .reusable = true}}, SHIFT(839), - [3031] = {.entry = {.count = 1, .reusable = true}}, SHIFT(848), - [3033] = {.entry = {.count = 1, .reusable = true}}, SHIFT(312), - [3035] = {.entry = {.count = 1, .reusable = true}}, SHIFT(818), - [3037] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1342), - [3039] = {.entry = {.count = 1, .reusable = true}}, SHIFT(606), - [3041] = {.entry = {.count = 1, .reusable = true}}, SHIFT(775), - [3043] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1350), - [3045] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), - [3047] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 4), - [3049] = {.entry = {.count = 1, .reusable = true}}, SHIFT(397), - [3051] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), - [3053] = {.entry = {.count = 1, .reusable = true}}, SHIFT(804), - [3055] = {.entry = {.count = 1, .reusable = true}}, SHIFT(724), - [3057] = {.entry = {.count = 1, .reusable = true}}, SHIFT(784), - [3059] = {.entry = {.count = 1, .reusable = true}}, SHIFT(622), - [3061] = {.entry = {.count = 1, .reusable = true}}, SHIFT(635), - [3063] = {.entry = {.count = 1, .reusable = true}}, SHIFT(873), - [3065] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), - [3067] = {.entry = {.count = 1, .reusable = true}}, SHIFT(718), - [3069] = {.entry = {.count = 1, .reusable = true}}, SHIFT(611), - [3071] = {.entry = {.count = 1, .reusable = true}}, SHIFT(795), - [3073] = {.entry = {.count = 1, .reusable = true}}, SHIFT(791), - [3075] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1089), - [3077] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1056), - [3079] = {.entry = {.count = 1, .reusable = true}}, SHIFT(637), - [3081] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1382), - [3083] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1116), - [3085] = {.entry = {.count = 1, .reusable = true}}, SHIFT(917), - [3087] = {.entry = {.count = 1, .reusable = true}}, SHIFT(688), - [3089] = {.entry = {.count = 1, .reusable = true}}, SHIFT(780), - [3091] = {.entry = {.count = 1, .reusable = true}}, SHIFT(829), - [3093] = {.entry = {.count = 1, .reusable = true}}, SHIFT(227), - [3095] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1226), - [3097] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), - [3099] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1129), - [3101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(465), - [3103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1374), - [3105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1352), - [3107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1402), - [3109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(436), - [3111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), - [3113] = {.entry = {.count = 1, .reusable = true}}, SHIFT(623), - [3115] = {.entry = {.count = 1, .reusable = true}}, SHIFT(816), - [3117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(625), - [3119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), - [3121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(819), - [3123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(626), - [3125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), - [3127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(814), - [3129] = {.entry = {.count = 1, .reusable = true}}, SHIFT(108), - [3131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), - [3133] = {.entry = {.count = 1, .reusable = true}}, SHIFT(813), - [3135] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), - [3137] = {.entry = {.count = 1, .reusable = true}}, SHIFT(840), - [3139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), - [3141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1101), - [3143] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), - [3145] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), - [3147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(102), - [3149] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), - [3151] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), - [3153] = {.entry = {.count = 1, .reusable = true}}, SHIFT(627), - [3155] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), - [3157] = {.entry = {.count = 1, .reusable = true}}, SHIFT(864), - [3159] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 5), - [3161] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 3), - [3163] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1223), - [3165] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), - [3167] = {.entry = {.count = 1, .reusable = true}}, SHIFT(435), - [3169] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1179), - [3171] = {.entry = {.count = 1, .reusable = true}}, SHIFT(701), - [3173] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), - [3175] = {.entry = {.count = 1, .reusable = true}}, SHIFT(969), - [3177] = {.entry = {.count = 1, .reusable = true}}, SHIFT(874), - [3179] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1107), - [3181] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), - [3183] = {.entry = {.count = 1, .reusable = true}}, SHIFT(365), - [3185] = {.entry = {.count = 1, .reusable = true}}, SHIFT(106), - [3187] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [3189] = {.entry = {.count = 1, .reusable = true}}, SHIFT(771), - [3191] = {.entry = {.count = 1, .reusable = true}}, SHIFT(773), - [3193] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), - [3195] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), - [3197] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1108), - [3199] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1155), - [3201] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1154), - [3203] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1128), - [3205] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), - [3207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(777), - [3209] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1176), - [3211] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1074), - [3213] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1132), - [3215] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1131), - [3217] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_parameters, 1), - [3219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(437), + [1806] = {.entry = {.count = 1, .reusable = false}}, SHIFT(623), + [1808] = {.entry = {.count = 1, .reusable = true}}, SHIFT(284), + [1810] = {.entry = {.count = 1, .reusable = true}}, SHIFT(684), + [1812] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1343), + [1814] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169), + [1816] = {.entry = {.count = 1, .reusable = true}}, SHIFT(345), + [1818] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156), + [1820] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), + [1822] = {.entry = {.count = 1, .reusable = true}}, SHIFT(418), + [1824] = {.entry = {.count = 1, .reusable = true}}, SHIFT(458), + [1826] = {.entry = {.count = 1, .reusable = true}}, SHIFT(472), + [1828] = {.entry = {.count = 1, .reusable = true}}, SHIFT(404), + [1830] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1401), + [1832] = {.entry = {.count = 1, .reusable = true}}, SHIFT(985), + [1834] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1395), + [1836] = {.entry = {.count = 1, .reusable = true}}, SHIFT(977), + [1838] = {.entry = {.count = 1, .reusable = true}}, SHIFT(991), + [1840] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1141), + [1842] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1372), + [1844] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameters, 3, 0, 0), + [1846] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameters, 2, 0, 0), + [1848] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_not_operator, 2, 0, 10), + [1850] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_not_operator, 2, 0, 10), + [1852] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_await, 2, 0, 0), + [1854] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_await, 2, 0, 0), + [1856] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_value_pattern_repeat1, 2, 0, 0), + [1858] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_value_pattern_repeat1, 2, 0, 0), SHIFT_REPEAT(1512), + [1861] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_expression, 3, 0, 35), + [1863] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_named_expression, 3, 0, 35), + [1865] = {.entry = {.count = 1, .reusable = true}}, SHIFT(408), + [1867] = {.entry = {.count = 1, .reusable = true}}, SHIFT(409), + [1869] = {.entry = {.count = 1, .reusable = false}}, SHIFT(181), + [1871] = {.entry = {.count = 1, .reusable = true}}, SHIFT(990), + [1873] = {.entry = {.count = 1, .reusable = false}}, SHIFT(990), + [1875] = {.entry = {.count = 1, .reusable = false}}, SHIFT_EXTRA(), + [1877] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1242), + [1879] = {.entry = {.count = 1, .reusable = true}}, SHIFT(757), + [1881] = {.entry = {.count = 1, .reusable = true}}, SHIFT(820), + [1883] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_with_item, 1, -1, 12), SHIFT(178), + [1886] = {.entry = {.count = 1, .reusable = false}}, SHIFT(609), + [1888] = {.entry = {.count = 1, .reusable = true}}, SHIFT(389), + [1890] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1468), + [1892] = {.entry = {.count = 1, .reusable = true}}, SHIFT(604), + [1894] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1512), + [1896] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_class_name, 2, 0, 0), + [1898] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_value_pattern, 2, 0, 0), + [1900] = {.entry = {.count = 1, .reusable = true}}, SHIFT(178), + [1902] = {.entry = {.count = 1, .reusable = true}}, SHIFT(412), + [1904] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 1, 0, 7), + [1906] = {.entry = {.count = 1, .reusable = true}}, SHIFT(610), + [1908] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_conditional_expression, 5, 0, 0), + [1910] = {.entry = {.count = 1, .reusable = true}}, SHIFT(440), + [1912] = {.entry = {.count = 1, .reusable = true}}, SHIFT(411), + [1914] = {.entry = {.count = 1, .reusable = true}}, SHIFT(410), + [1916] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean_operator, 3, 0, 39), + [1918] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean_operator, 3, 0, 39), + [1920] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_expression, 3, 0, 27), + [1922] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_named_expression, 3, 0, 27), + [1924] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda, 4, 0, 66), + [1926] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lambda, 4, 0, 66), + [1928] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1245), + [1930] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, 0, 21), SHIFT_REPEAT(181), + [1933] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 2, 0, 21), SHIFT_REPEAT(990), + [1936] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, 0, 21), SHIFT_REPEAT(990), + [1939] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 2, 0, 21), + [1941] = {.entry = {.count = 1, .reusable = true}}, SHIFT(611), + [1943] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda, 3, 0, 32), + [1945] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lambda, 3, 0, 32), + [1947] = {.entry = {.count = 1, .reusable = true}}, SHIFT(735), + [1949] = {.entry = {.count = 1, .reusable = true}}, SHIFT(766), + [1951] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield, 2, 0, 0), + [1953] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), + [1955] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_class_name, 1, 0, 0), + [1957] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_capture_pattern, 1, 0, 0), + [1959] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_conditional_expression, 5, 0, 0), + [1961] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 1, 0, 0), + [1963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(743), + [1965] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, 0, 31), + [1967] = {.entry = {.count = 1, .reusable = true}}, SHIFT(641), + [1969] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213), + [1971] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_splat, 2, 0, 0), + [1973] = {.entry = {.count = 1, .reusable = true}}, SHIFT(828), + [1975] = {.entry = {.count = 1, .reusable = true}}, SHIFT(196), + [1977] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 1, 0, 83), + [1979] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1393), + [1981] = {.entry = {.count = 1, .reusable = true}}, SHIFT(643), + [1983] = {.entry = {.count = 1, .reusable = true}}, SHIFT(804), + [1985] = {.entry = {.count = 1, .reusable = true}}, SHIFT(205), + [1987] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield, 3, 0, 0), + [1989] = {.entry = {.count = 1, .reusable = true}}, SHIFT(779), + [1991] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 2, 0, 110), + [1993] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1347), + [1995] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_splat, 2, 0, 14), + [1997] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2, 0, 0), + [1999] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2, 0, 0), SHIFT_REPEAT(401), + [2002] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2, 0, 0), SHIFT_REPEAT(1468), + [2005] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2, 0, 0), SHIFT_REPEAT(604), + [2008] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_or_pattern_repeat1, 2, 0, 0), + [2010] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_or_pattern_repeat1, 2, 0, 0), SHIFT_REPEAT(868), + [2013] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_or_pattern, 3, 0, 0), + [2015] = {.entry = {.count = 1, .reusable = true}}, SHIFT(868), + [2017] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__comprehension_clauses, 1, 0, 0), + [2019] = {.entry = {.count = 1, .reusable = true}}, SHIFT(401), + [2021] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__expression_within_for_in_clause, 1, 0, 0), + [2023] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_or_pattern, 4, 0, 0), + [2025] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__f_expression, 1, 0, 0), + [2027] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__comprehension_clauses, 2, 0, 0), + [2029] = {.entry = {.count = 1, .reusable = true}}, SHIFT(469), + [2031] = {.entry = {.count = 1, .reusable = true}}, SHIFT(403), + [2033] = {.entry = {.count = 1, .reusable = true}}, SHIFT(442), + [2035] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 3, 0, 0), + [2037] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1527), + [2039] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1523), + [2041] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1505), + [2043] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 4, 0, 139), + [2045] = {.entry = {.count = 1, .reusable = true}}, SHIFT(480), + [2047] = {.entry = {.count = 1, .reusable = true}}, SHIFT(201), + [2049] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 2, 0, 0), + [2051] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 6, 0, 0), + [2053] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 6, 0, 139), + [2055] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1475), + [2057] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 2, 0, 0), + [2059] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 7, 0, 0), + [2061] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 7, 0, 139), + [2063] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 8, 0, 139), + [2065] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1452), + [2067] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1518), + [2069] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1515), + [2071] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 9, 0, 139), + [2073] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 5, 0, 0), + [2075] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 2, 0, 0), + [2077] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 5, 0, 0), + [2079] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 5, 0, 139), + [2081] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 4, 0, 101), + [2083] = {.entry = {.count = 1, .reusable = true}}, SHIFT(211), + [2085] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string_content, 1, 0, 0), + [2087] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1010), + [2089] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1010), + [2091] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string_content, 1, 0, 0), + [2093] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 4, 0, 0), + [2095] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_list, 2, 0, 16), + [2097] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), + [2099] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), + [2101] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 4, 0, 151), + [2103] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 4, 0, 0), + [2105] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_for_in_clause_repeat1, 2, 0, 0), + [2107] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_for_in_clause_repeat1, 2, 0, 0), SHIFT_REPEAT(299), + [2110] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 6, 0, 144), + [2112] = {.entry = {.count = 1, .reusable = true}}, SHIFT(216), + [2114] = {.entry = {.count = 1, .reusable = true}}, SHIFT(865), + [2116] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 5, 0, 125), + [2118] = {.entry = {.count = 1, .reusable = true}}, SHIFT(195), + [2120] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 3, 0, 139), + [2122] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1496), + [2124] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 3, 0, 135), + [2126] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 5, 0, 126), + [2128] = {.entry = {.count = 1, .reusable = true}}, SHIFT(185), + [2130] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_clause, 2, 0, 0), + [2132] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 3, 0, 0), + [2134] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_content_repeat1, 2, 0, 0), + [2136] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_content_repeat1, 2, 0, 0), SHIFT_REPEAT(1010), + [2139] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_content_repeat1, 2, 0, 0), SHIFT_REPEAT(1010), + [2142] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_content_repeat1, 2, 0, 0), + [2144] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_group_pattern, 3, 0, 134), + [2146] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_or_pattern, 1, 0, 0), + [2148] = {.entry = {.count = 1, .reusable = true}}, SHIFT(867), + [2150] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, 0, 36), + [2152] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, 0, 36), SHIFT_REPEAT(255), + [2155] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_within_for_in_clause, 4, 0, 66), + [2157] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1067), + [2159] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1170), + [2161] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1399), + [2163] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1087), + [2165] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1186), + [2167] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1453), + [2169] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_delete_statement, 2, 0, 11), + [2171] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__right_hand_side, 1, 0, 0), + [2173] = {.entry = {.count = 1, .reusable = true}}, SHIFT(257), + [2175] = {.entry = {.count = 1, .reusable = true}}, SHIFT(632), + [2177] = {.entry = {.count = 1, .reusable = true}}, SHIFT(246), + [2179] = {.entry = {.count = 1, .reusable = true}}, SHIFT(278), + [2181] = {.entry = {.count = 1, .reusable = true}}, SHIFT(827), + [2183] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), + [2185] = {.entry = {.count = 1, .reusable = true}}, SHIFT(371), + [2187] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_item, 1, -1, 12), + [2189] = {.entry = {.count = 1, .reusable = true}}, SHIFT(609), + [2191] = {.entry = {.count = 1, .reusable = true}}, SHIFT(441), + [2193] = {.entry = {.count = 1, .reusable = true}}, SHIFT(468), + [2195] = {.entry = {.count = 1, .reusable = true}}, SHIFT(465), + [2197] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1090), + [2199] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1482), + [2201] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1481), + [2203] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 2, 0, 0), + [2205] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_statement, 1, 0, 0), + [2207] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_pattern, 1, 0, 0), + [2209] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1456), + [2211] = {.entry = {.count = 1, .reusable = true}}, SHIFT(266), + [2213] = {.entry = {.count = 1, .reusable = true}}, SHIFT(824), + [2215] = {.entry = {.count = 1, .reusable = true}}, SHIFT(446), + [2217] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assert_statement, 2, 0, 0), + [2219] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__collection_elements_repeat1, 2, 0, 31), + [2221] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_within_for_in_clause, 3, 0, 32), + [2223] = {.entry = {.count = 1, .reusable = true}}, SHIFT(249), + [2225] = {.entry = {.count = 1, .reusable = true}}, SHIFT(226), + [2227] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pair, 3, 0, 62), + [2229] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_exec_statement, 4, 0, 15), + [2231] = {.entry = {.count = 1, .reusable = true}}, SHIFT(252), + [2233] = {.entry = {.count = 1, .reusable = true}}, SHIFT(777), + [2235] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type, 1, 0, 0), + [2237] = {.entry = {.count = 1, .reusable = true}}, SHIFT(298), + [2239] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 2, 0, 10), + [2241] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1152), + [2243] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dotted_name, 2, 0, 0), + [2245] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 5, 0, 43), + [2247] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 5, 0, 43), + [2249] = {.entry = {.count = 1, .reusable = true}}, SHIFT(460), + [2251] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), + [2253] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), + [2255] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1457), + [2257] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_print_statement_repeat1, 2, 0, 10), + [2259] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typed_default_parameter, 5, 0, 122), + [2261] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_assert_statement_repeat1, 2, 0, 0), + [2263] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dotted_name, 1, 0, 0), + [2265] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 6, 0, 43), + [2267] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 6, 0, 43), + [2269] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_decorated_definition_repeat1, 2, 0, 0), + [2271] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_decorated_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(422), + [2274] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, 0, 98), + [2276] = {.entry = {.count = 1, .reusable = true}}, SHIFT(296), + [2278] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 4, 0, 43), + [2280] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 4, 0, 43), + [2282] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_subscript_repeat1, 2, 0, 95), + [2284] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99), + [2286] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_bound, 2, 0, 112), + [2288] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_open_sequence_match_pattern_repeat1, 2, 0, 0), + [2290] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_open_sequence_match_pattern_repeat1, 2, 0, 0), SHIFT_REPEAT(861), + [2293] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 2, 0, 68), + [2295] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304), + [2297] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_chevron, 2, 0, 0), + [2299] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), + [2301] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), + [2303] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 3, 0, 43), + [2305] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 3, 0, 43), + [2307] = {.entry = {.count = 1, .reusable = true}}, SHIFT(430), + [2309] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), + [2311] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_default_parameter, 3, 0, 35), + [2313] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_as_pattern, 3, 0, 138), + [2315] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_value_pattern_repeat1, 2, 0, 0), SHIFT_REPEAT(1457), + [2318] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 1, 0, 4), + [2320] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 1, 0, 4), + [2322] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 1, 0, 3), + [2324] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 1, 0, 3), + [2326] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevar_parameter, 1, 0, 6), + [2328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(485), + [2330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(295), + [2332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1174), + [2334] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 3, 0, 22), + [2336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1128), + [2338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1462), + [2340] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 1, 0, 6), + [2342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), + [2344] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_star_pattern, 2, 0, 11), + [2346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1109), + [2348] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1341), + [2350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1147), + [2352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1267), + [2354] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_param_default, 2, 0, 113), + [2356] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_alias_statement, 4, 0, 63), + [2358] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, 0, 94), + [2360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(192), + [2362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(426), + [2364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), + [2366] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 3, 0, 30), + [2368] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_format_specifier, 1, 0, 0), + [2370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(184), + [2372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1114), + [2374] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_alias_statement, 5, 0, 88), + [2376] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 2, 0, 16), + [2378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), + [2380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), + [2382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), + [2384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1056), + [2386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), + [2388] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_format_specifier, 2, 0, 0), + [2390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1129), + [2392] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, 0, 31), + [2394] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__collection_elements_repeat1, 2, 0, 36), + [2396] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__collection_elements_repeat1, 2, 0, 36), SHIFT_REPEAT(237), + [2399] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 5, 0, 143), + [2401] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1081), + [2403] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1191), + [2405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1234), + [2407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(175), + [2409] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1132), + [2411] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 4, 0, 124), + [2413] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 4, 0, 123), + [2415] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 4, 0, 53), + [2417] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, 0, 36), SHIFT_REPEAT(253), + [2420] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_keyword_argument, 3, 0, 27), + [2422] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_keyword_argument, 3, 0, 35), + [2424] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 2, 0, 6), + [2426] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_format_specifier_repeat1, 2, 0, 0), + [2428] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_format_specifier_repeat1, 2, 0, 0), SHIFT_REPEAT(184), + [2431] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_format_specifier_repeat1, 2, 0, 0), SHIFT_REPEAT(1129), + [2434] = {.entry = {.count = 1, .reusable = true}}, SHIFT(457), + [2436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), + [2438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(433), + [2440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1087), + [2442] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_decorator, 3, 0, 0), + [2444] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_assert_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(446), + [2447] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_print_statement_repeat1, 2, 0, 52), SHIFT_REPEAT(483), + [2450] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_print_statement_repeat1, 2, 0, 52), + [2452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), + [2454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), + [2456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(314), + [2458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), + [2460] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), + [2462] = {.entry = {.count = 1, .reusable = true}}, SHIFT(339), + [2464] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameter, 1, 0, 0), + [2466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(360), + [2468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(434), + [2470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), + [2472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(449), + [2474] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_list_splat, 3, 0, 49), + [2476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1225), + [2478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1291), + [2480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), + [2482] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), + [2484] = {.entry = {.count = 1, .reusable = true}}, SHIFT(322), + [2486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [2488] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), + [2490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(852), + [2492] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevar_parameter, 2, 0, 84), + [2494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), + [2496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), + [2498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), + [2500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(341), + [2502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), + [2504] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1143), + [2506] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1510), + [2508] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), + [2510] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_list_splat, 3, 0, 0), + [2512] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1494), + [2514] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_nonlocal_statement, 3, 0, 0), + [2516] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_global_statement, 3, 0, 0), + [2518] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_with_clause_repeat1, 2, 0, 0), + [2520] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_with_clause_repeat1, 2, 0, 0), SHIFT_REPEAT(375), + [2523] = {.entry = {.count = 1, .reusable = true}}, SHIFT(462), + [2525] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139), + [2527] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_guard, 2, 0, 136), + [2529] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 1, 0, 7), + [2531] = {.entry = {.count = 1, .reusable = true}}, SHIFT(597), + [2533] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), + [2535] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), + [2537] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_global_statement, 2, 0, 0), + [2539] = {.entry = {.count = 1, .reusable = true}}, SHIFT(895), + [2541] = {.entry = {.count = 1, .reusable = true}}, SHIFT(851), + [2543] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, 0, 44), SHIFT_REPEAT(1322), + [2546] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, 0, 44), + [2548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), + [2550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(376), + [2552] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevartuple_parameter, 2, 0, 23), + [2554] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, 0, 23), + [2556] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_paramspec_parameter, 2, 0, 23), + [2558] = {.entry = {.count = 1, .reusable = true}}, SHIFT(285), + [2560] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 2, 0, 0), + [2562] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_global_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1494), + [2565] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_global_statement_repeat1, 2, 0, 0), + [2567] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_import_prefix, 1, 0, 0), + [2569] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1205), + [2571] = {.entry = {.count = 1, .reusable = true}}, SHIFT(138), + [2573] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), + [2575] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1133), + [2577] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1072), + [2579] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1319), + [2581] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typed_parameter, 3, 0, 65), + [2583] = {.entry = {.count = 1, .reusable = true}}, SHIFT(473), + [2585] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assert_statement, 3, 0, 0), + [2587] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_exec_statement, 5, 0, 15), + [2589] = {.entry = {.count = 1, .reusable = true}}, SHIFT(301), + [2591] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3, 0, 29), + [2593] = {.entry = {.count = 1, .reusable = true}}, SHIFT(479), + [2595] = {.entry = {.count = 1, .reusable = true}}, SHIFT(286), + [2597] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3, 0, 28), + [2599] = {.entry = {.count = 1, .reusable = true}}, SHIFT(448), + [2601] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), + [2603] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 2, 0, 16), + [2605] = {.entry = {.count = 1, .reusable = true}}, SHIFT(598), + [2607] = {.entry = {.count = 1, .reusable = true}}, SHIFT(850), + [2609] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_import_prefix_repeat1, 2, 0, 0), + [2611] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_import_prefix_repeat1, 2, 0, 0), SHIFT_REPEAT(1205), + [2614] = {.entry = {.count = 1, .reusable = true}}, SHIFT(108), + [2616] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), + [2618] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1316), + [2620] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1093), + [2622] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 2, 0, 22), + [2624] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), + [2626] = {.entry = {.count = 1, .reusable = true}}, SHIFT(303), + [2628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1095), + [2630] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_nonlocal_statement, 2, 0, 0), + [2632] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__simple_statements_repeat1, 2, 0, 0), SHIFT_REPEAT(147), + [2635] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__simple_statements_repeat1, 2, 0, 0), + [2637] = {.entry = {.count = 1, .reusable = true}}, SHIFT(899), + [2639] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameters, 1, 0, 0), + [2641] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_item, 3, -1, 58), + [2643] = {.entry = {.count = 1, .reusable = true}}, SHIFT(780), + [2645] = {.entry = {.count = 1, .reusable = true}}, SHIFT(207), + [2647] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), + [2649] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 3, 0, 37), + [2651] = {.entry = {.count = 1, .reusable = true}}, SHIFT(847), + [2653] = {.entry = {.count = 1, .reusable = true}}, SHIFT(198), + [2655] = {.entry = {.count = 1, .reusable = true}}, SHIFT(239), + [2657] = {.entry = {.count = 1, .reusable = true}}, SHIFT(894), + [2659] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1009), + [2661] = {.entry = {.count = 1, .reusable = true}}, SHIFT(229), + [2663] = {.entry = {.count = 1, .reusable = true}}, SHIFT(810), + [2665] = {.entry = {.count = 1, .reusable = true}}, SHIFT(193), + [2667] = {.entry = {.count = 1, .reusable = true}}, SHIFT(900), + [2669] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1531), + [2671] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat2, 2, 0, 0), + [2673] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat2, 2, 0, 0), SHIFT_REPEAT(1391), + [2676] = {.entry = {.count = 1, .reusable = true}}, SHIFT(845), + [2678] = {.entry = {.count = 1, .reusable = true}}, SHIFT(199), + [2680] = {.entry = {.count = 1, .reusable = true}}, SHIFT(375), + [2682] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 1, 0, 0), + [2684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(979), + [2686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1260), + [2688] = {.entry = {.count = 1, .reusable = true}}, SHIFT(897), + [2690] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_aliased_import, 3, 0, 45), + [2692] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), + [2694] = {.entry = {.count = 1, .reusable = true}}, SHIFT(837), + [2696] = {.entry = {.count = 1, .reusable = true}}, SHIFT(844), + [2698] = {.entry = {.count = 1, .reusable = true}}, SHIFT(208), + [2700] = {.entry = {.count = 1, .reusable = true}}, SHIFT(263), + [2702] = {.entry = {.count = 1, .reusable = true}}, SHIFT(639), + [2704] = {.entry = {.count = 1, .reusable = true}}, SHIFT(243), + [2706] = {.entry = {.count = 1, .reusable = true}}, SHIFT(838), + [2708] = {.entry = {.count = 1, .reusable = true}}, SHIFT(261), + [2710] = {.entry = {.count = 1, .reusable = true}}, SHIFT(814), + [2712] = {.entry = {.count = 1, .reusable = true}}, SHIFT(241), + [2714] = {.entry = {.count = 1, .reusable = true}}, SHIFT(835), + [2716] = {.entry = {.count = 1, .reusable = true}}, SHIFT(262), + [2718] = {.entry = {.count = 1, .reusable = true}}, SHIFT(629), + [2720] = {.entry = {.count = 1, .reusable = true}}, SHIFT(896), + [2722] = {.entry = {.count = 1, .reusable = true}}, SHIFT(856), + [2724] = {.entry = {.count = 1, .reusable = true}}, SHIFT(966), + [2726] = {.entry = {.count = 1, .reusable = true}}, SHIFT(221), + [2728] = {.entry = {.count = 1, .reusable = true}}, SHIFT(288), + [2730] = {.entry = {.count = 1, .reusable = true}}, SHIFT(980), + [2732] = {.entry = {.count = 1, .reusable = true}}, SHIFT(638), + [2734] = {.entry = {.count = 1, .reusable = true}}, SHIFT(210), + [2736] = {.entry = {.count = 1, .reusable = true}}, SHIFT(238), + [2738] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1268), + [2740] = {.entry = {.count = 1, .reusable = true}}, SHIFT(982), + [2742] = {.entry = {.count = 1, .reusable = true}}, SHIFT(863), + [2744] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [2746] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1233), + [2748] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_mapping_pattern_repeat1, 2, 0, 0), SHIFT_REPEAT(906), + [2751] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_mapping_pattern_repeat1, 2, 0, 0), + [2753] = {.entry = {.count = 1, .reusable = true}}, SHIFT(290), + [2755] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__parameters_repeat1, 2, 0, 0), + [2757] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), + [2759] = {.entry = {.count = 1, .reusable = true}}, SHIFT(794), + [2761] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameters, 4, 0, 115), + [2763] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_repeat1, 2, 0, 36), SHIFT_REPEAT(269), + [2766] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_repeat1, 2, 0, 36), + [2768] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__parameters_repeat1, 2, 0, 0), SHIFT_REPEAT(904), + [2771] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_type_parameters_repeat1, 2, 0, 116), SHIFT_REPEAT(1030), + [2774] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_type_parameters_repeat1, 2, 0, 116), + [2776] = {.entry = {.count = 1, .reusable = true}}, SHIFT(615), + [2778] = {.entry = {.count = 1, .reusable = true}}, SHIFT(186), + [2780] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat1, 2, 0, 0), + [2782] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat1, 2, 0, 0), SHIFT_REPEAT(864), + [2785] = {.entry = {.count = 1, .reusable = true}}, SHIFT(612), + [2787] = {.entry = {.count = 1, .reusable = true}}, SHIFT(204), + [2789] = {.entry = {.count = 1, .reusable = true}}, SHIFT(619), + [2791] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206), + [2793] = {.entry = {.count = 1, .reusable = true}}, SHIFT(265), + [2795] = {.entry = {.count = 1, .reusable = true}}, SHIFT(786), + [2797] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), + [2799] = {.entry = {.count = 1, .reusable = true}}, SHIFT(224), + [2801] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), + [2803] = {.entry = {.count = 1, .reusable = true}}, SHIFT(223), + [2805] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1304), + [2807] = {.entry = {.count = 1, .reusable = true}}, SHIFT(452), + [2809] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), + [2811] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, 0, 44), SHIFT_REPEAT(1227), + [2814] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1238), + [2816] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_subscript_repeat1, 2, 0, 97), SHIFT_REPEAT(254), + [2819] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_subscript_repeat1, 2, 0, 97), + [2821] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 2, 0, 0), + [2823] = {.entry = {.count = 1, .reusable = true}}, SHIFT(353), + [2825] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1030), + [2827] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1344), + [2829] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1495), + [2831] = {.entry = {.count = 1, .reusable = true}}, SHIFT(294), + [2833] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, 0, 36), + [2835] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, 0, 36), SHIFT_REPEAT(219), + [2838] = {.entry = {.count = 1, .reusable = true}}, SHIFT(247), + [2840] = {.entry = {.count = 1, .reusable = true}}, SHIFT(420), + [2842] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_exec_statement, 2, 0, 15), + [2844] = {.entry = {.count = 1, .reusable = true}}, SHIFT(431), + [2846] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__parameters_repeat1, 2, 0, 0), SHIFT_REPEAT(902), + [2849] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), + [2851] = {.entry = {.count = 1, .reusable = true}}, SHIFT(773), + [2853] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), + [2855] = {.entry = {.count = 1, .reusable = true}}, SHIFT(788), + [2857] = {.entry = {.count = 1, .reusable = true}}, SHIFT(187), + [2859] = {.entry = {.count = 1, .reusable = true}}, SHIFT(222), + [2861] = {.entry = {.count = 1, .reusable = true}}, SHIFT(790), + [2863] = {.entry = {.count = 1, .reusable = true}}, SHIFT(190), + [2865] = {.entry = {.count = 1, .reusable = true}}, SHIFT(245), + [2867] = {.entry = {.count = 1, .reusable = true}}, SHIFT(330), + [2869] = {.entry = {.count = 1, .reusable = true}}, SHIFT(244), + [2871] = {.entry = {.count = 1, .reusable = true}}, SHIFT(327), + [2873] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_format_specifier_repeat1, 1, 0, 73), + [2875] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_format_specifier_repeat1, 1, 0, 73), + [2877] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1060), + [2879] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1145), + [2881] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1160), + [2883] = {.entry = {.count = 1, .reusable = true}}, SHIFT(968), + [2885] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1271), + [2887] = {.entry = {.count = 1, .reusable = true}}, SHIFT(860), + [2889] = {.entry = {.count = 1, .reusable = true}}, SHIFT(293), + [2891] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1183), + [2893] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1200), + [2895] = {.entry = {.count = 1, .reusable = true}}, SHIFT(892), + [2897] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_relative_import, 1, 0, 0), + [2899] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1091), + [2901] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1097), + [2903] = {.entry = {.count = 1, .reusable = true}}, SHIFT(855), + [2905] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), + [2907] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_maybe_star_pattern, 1, 0, 0), + [2909] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_patterns, 1, 0, 0), + [2911] = {.entry = {.count = 1, .reusable = true}}, SHIFT(859), + [2913] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_positional_separator, 1, 0, 0), + [2915] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameters, 3, 0, 86), + [2917] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1278), + [2919] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), + [2921] = {.entry = {.count = 1, .reusable = true}}, SHIFT(361), + [2923] = {.entry = {.count = 1, .reusable = false}}, SHIFT(994), + [2925] = {.entry = {.count = 1, .reusable = true}}, SHIFT(994), + [2927] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [2929] = {.entry = {.count = 1, .reusable = true}}, SHIFT(324), + [2931] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameters, 3, 0, 0), + [2933] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_double_star_pattern, 2, 0, 11), + [2935] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_key_value_pattern, 3, 0, 62), + [2937] = {.entry = {.count = 1, .reusable = false}}, SHIFT(951), + [2939] = {.entry = {.count = 1, .reusable = true}}, SHIFT(951), + [2941] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevar_parameter, 2, 0, 85), + [2943] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), + [2945] = {.entry = {.count = 1, .reusable = true}}, SHIFT(362), + [2947] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_positional_pattern, 1, 0, 0), + [2949] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_statement, 2, 0, 5), + [2951] = {.entry = {.count = 1, .reusable = true}}, SHIFT(853), + [2953] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), + [2955] = {.entry = {.count = 1, .reusable = true}}, SHIFT(343), + [2957] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 5, 0, 92), + [2959] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1492), + [2961] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, 0, 67), + [2963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), + [2965] = {.entry = {.count = 1, .reusable = true}}, SHIFT(347), + [2967] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), + [2969] = {.entry = {.count = 1, .reusable = true}}, SHIFT(344), + [2971] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), + [2973] = {.entry = {.count = 1, .reusable = true}}, SHIFT(364), + [2975] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameters, 2, 0, 0), + [2977] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_future_import_statement, 6, 0, 99), + [2979] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_from_statement, 6, 0, 100), + [2981] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_keyword_pattern, 3, 0, 161), + [2983] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1509), + [2985] = {.entry = {.count = 1, .reusable = true}}, SHIFT(970), + [2987] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_repeat1, 2, 0, 31), + [2989] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_type_parameters_repeat1, 2, 0, 86), + [2991] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevar_parameter, 3, 0, 114), + [2993] = {.entry = {.count = 1, .reusable = true}}, SHIFT(106), + [2995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(380), + [2997] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1011), + [2999] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_paramspec_parameter, 3, 0, 111), + [3001] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevartuple_parameter, 3, 0, 111), + [3003] = {.entry = {.count = 1, .reusable = true}}, SHIFT(857), + [3005] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1003), + [3007] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1003), + [3009] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_from_statement, 4, 0, 48), + [3011] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1091), + [3013] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_from_statement, 4, 0, 47), + [3015] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_wildcard_import, 1, 0, 0), + [3017] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_future_import_statement, 4, 0, 46), + [3019] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_continue_statement, 1, 0, 0), + [3021] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1450), + [3023] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_break_statement, 1, 0, 0), + [3025] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 3, 0, 38), + [3027] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pass_statement, 1, 0, 0), + [3029] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_augmented_assignment, 3, 0, 39), + [3031] = {.entry = {.count = 1, .reusable = true}}, SHIFT(785), + [3033] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_parameters, 1, 0, 0), + [3035] = {.entry = {.count = 1, .reusable = true}}, SHIFT(832), + [3037] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1187), + [3039] = {.entry = {.count = 1, .reusable = true}}, SHIFT(840), + [3041] = {.entry = {.count = 1, .reusable = true}}, SHIFT(843), + [3043] = {.entry = {.count = 1, .reusable = true}}, SHIFT(826), + [3045] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), + [3047] = {.entry = {.count = 1, .reusable = true}}, SHIFT(841), + [3049] = {.entry = {.count = 1, .reusable = true}}, SHIFT(687), + [3051] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1176), + [3053] = {.entry = {.count = 1, .reusable = true}}, SHIFT(842), + [3055] = {.entry = {.count = 1, .reusable = true}}, SHIFT(387), + [3057] = {.entry = {.count = 1, .reusable = true}}, SHIFT(825), + [3059] = {.entry = {.count = 1, .reusable = true}}, SHIFT(823), + [3061] = {.entry = {.count = 1, .reusable = true}}, SHIFT(822), + [3063] = {.entry = {.count = 1, .reusable = true}}, SHIFT(875), + [3065] = {.entry = {.count = 1, .reusable = true}}, SHIFT(464), + [3067] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 5, 0, 0), + [3069] = {.entry = {.count = 1, .reusable = true}}, SHIFT(821), + [3071] = {.entry = {.count = 1, .reusable = true}}, SHIFT(699), + [3073] = {.entry = {.count = 1, .reusable = true}}, SHIFT(105), + [3075] = {.entry = {.count = 1, .reusable = true}}, SHIFT(289), + [3077] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), + [3079] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1068), + [3081] = {.entry = {.count = 1, .reusable = true}}, SHIFT(783), + [3083] = {.entry = {.count = 1, .reusable = true}}, SHIFT(792), + [3085] = {.entry = {.count = 1, .reusable = true}}, SHIFT(806), + [3087] = {.entry = {.count = 1, .reusable = true}}, SHIFT(102), + [3089] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), + [3091] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), + [3093] = {.entry = {.count = 1, .reusable = true}}, SHIFT(435), + [3095] = {.entry = {.count = 1, .reusable = true}}, SHIFT(645), + [3097] = {.entry = {.count = 1, .reusable = true}}, SHIFT(876), + [3099] = {.entry = {.count = 1, .reusable = true}}, SHIFT(862), + [3101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(329), + [3103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(725), + [3105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1018), + [3107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1121), + [3109] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 4, 0, 0), + [3111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1084), + [3113] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1103), + [3115] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), + [3117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1169), + [3119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), + [3121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1243), + [3123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1376), + [3125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1375), + [3127] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_relative_import, 2, 0, 23), + [3129] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), + [3131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(605), + [3133] = {.entry = {.count = 1, .reusable = true}}, SHIFT(789), + [3135] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), + [3137] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1337), + [3139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(866), + [3141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), + [3143] = {.entry = {.count = 1, .reusable = true}}, SHIFT(103), + [3145] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), + [3147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), + [3149] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), + [3151] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1181), + [3153] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1179), + [3155] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1351), + [3157] = {.entry = {.count = 1, .reusable = true}}, SHIFT(772), + [3159] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), + [3161] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), + [3163] = {.entry = {.count = 1, .reusable = true}}, SHIFT(104), + [3165] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), + [3167] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), + [3169] = {.entry = {.count = 1, .reusable = true}}, SHIFT(787), + [3171] = {.entry = {.count = 1, .reusable = true}}, SHIFT(791), + [3173] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1302), + [3175] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 3, 0, 0), + [3177] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), + [3179] = {.entry = {.count = 1, .reusable = true}}, SHIFT(429), + [3181] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), + [3183] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [3185] = {.entry = {.count = 1, .reusable = true}}, SHIFT(642), + [3187] = {.entry = {.count = 1, .reusable = true}}, SHIFT(644), + [3189] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1113), + [3191] = {.entry = {.count = 1, .reusable = true}}, SHIFT(640), + [3193] = {.entry = {.count = 1, .reusable = true}}, SHIFT(636), + [3195] = {.entry = {.count = 1, .reusable = true}}, SHIFT(614), + [3197] = {.entry = {.count = 1, .reusable = true}}, SHIFT(978), + [3199] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1405), + [3201] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [3203] = {.entry = {.count = 1, .reusable = true}}, SHIFT(934), + [3205] = {.entry = {.count = 1, .reusable = true}}, SHIFT(711), + [3207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1112), + [3209] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1211), + [3211] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1172), + [3213] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1173), + [3215] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), + [3217] = {.entry = {.count = 1, .reusable = true}}, SHIFT(218), + [3219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(428), + [3221] = {.entry = {.count = 1, .reusable = true}}, SHIFT(620), + [3223] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1196), + [3225] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1201), + [3227] = {.entry = {.count = 1, .reusable = true}}, SHIFT(633), + [3229] = {.entry = {.count = 1, .reusable = true}}, SHIFT(635), + [3231] = {.entry = {.count = 1, .reusable = true}}, SHIFT(807), +}; + +enum ts_external_scanner_symbol_identifiers { + ts_external_token__newline = 0, + ts_external_token__indent = 1, + ts_external_token__dedent = 2, + ts_external_token__string_start = 3, + ts_external_token__string_content = 4, + ts_external_token__string_end = 5, +}; + +static const TSSymbol ts_external_scanner_symbol_map[EXTERNAL_TOKEN_COUNT] = { + [ts_external_token__newline] = sym__newline, + [ts_external_token__indent] = sym__indent, + [ts_external_token__dedent] = sym__dedent, + [ts_external_token__string_start] = sym__string_start, + [ts_external_token__string_content] = sym__string_content, + [ts_external_token__string_end] = sym__string_end, +}; + +static const bool ts_external_scanner_states[8][EXTERNAL_TOKEN_COUNT] = { + [1] = { + [ts_external_token__newline] = true, + [ts_external_token__indent] = true, + [ts_external_token__dedent] = true, + [ts_external_token__string_start] = true, + [ts_external_token__string_content] = true, + [ts_external_token__string_end] = true, + }, + [2] = { + [ts_external_token__string_start] = true, + }, + [3] = { + [ts_external_token__dedent] = true, + [ts_external_token__string_start] = true, + }, + [4] = { + [ts_external_token__newline] = true, + [ts_external_token__string_start] = true, + }, + [5] = { + [ts_external_token__newline] = true, + [ts_external_token__indent] = true, + [ts_external_token__string_start] = true, + }, + [6] = { + [ts_external_token__newline] = true, + }, + [7] = { + [ts_external_token__string_content] = true, + [ts_external_token__string_end] = true, + }, }; #ifdef __cplusplus @@ -76454,11 +74274,15 @@ bool tree_sitter_python_external_scanner_scan(void *, TSLexer *, const bool *); unsigned tree_sitter_python_external_scanner_serialize(void *, char *); void tree_sitter_python_external_scanner_deserialize(void *, const char *, unsigned); -#ifdef _WIN32 -#define extern __declspec(dllexport) +#ifdef TREE_SITTER_HIDE_SYMBOLS +#define TS_PUBLIC +#elif defined(_WIN32) +#define TS_PUBLIC __declspec(dllexport) +#else +#define TS_PUBLIC __attribute__((visibility("default"))) #endif -extern const TSLanguage *tree_sitter_python(void) { +TS_PUBLIC const TSLanguage *tree_sitter_python(void) { static const TSLanguage language = { .version = LANGUAGE_VERSION, .symbol_count = SYMBOL_COUNT, diff --git a/python/extractor/tsg-python/tsp/src/tree_sitter/alloc.h b/python/extractor/tsg-python/tsp/src/tree_sitter/alloc.h new file mode 100644 index 000000000000..1abdd1201578 --- /dev/null +++ b/python/extractor/tsg-python/tsp/src/tree_sitter/alloc.h @@ -0,0 +1,54 @@ +#ifndef TREE_SITTER_ALLOC_H_ +#define TREE_SITTER_ALLOC_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +// Allow clients to override allocation functions +#ifdef TREE_SITTER_REUSE_ALLOCATOR + +extern void *(*ts_current_malloc)(size_t size); +extern void *(*ts_current_calloc)(size_t count, size_t size); +extern void *(*ts_current_realloc)(void *ptr, size_t size); +extern void (*ts_current_free)(void *ptr); + +#ifndef ts_malloc +#define ts_malloc ts_current_malloc +#endif +#ifndef ts_calloc +#define ts_calloc ts_current_calloc +#endif +#ifndef ts_realloc +#define ts_realloc ts_current_realloc +#endif +#ifndef ts_free +#define ts_free ts_current_free +#endif + +#else + +#ifndef ts_malloc +#define ts_malloc malloc +#endif +#ifndef ts_calloc +#define ts_calloc calloc +#endif +#ifndef ts_realloc +#define ts_realloc realloc +#endif +#ifndef ts_free +#define ts_free free +#endif + +#endif + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_ALLOC_H_ diff --git a/python/extractor/tsg-python/tsp/src/tree_sitter/array.h b/python/extractor/tsg-python/tsp/src/tree_sitter/array.h new file mode 100644 index 000000000000..15a3b233bbb8 --- /dev/null +++ b/python/extractor/tsg-python/tsp/src/tree_sitter/array.h @@ -0,0 +1,290 @@ +#ifndef TREE_SITTER_ARRAY_H_ +#define TREE_SITTER_ARRAY_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "./alloc.h" + +#include +#include +#include +#include +#include + +#ifdef _MSC_VER +#pragma warning(disable : 4101) +#elif defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-variable" +#endif + +#define Array(T) \ + struct { \ + T *contents; \ + uint32_t size; \ + uint32_t capacity; \ + } + +/// Initialize an array. +#define array_init(self) \ + ((self)->size = 0, (self)->capacity = 0, (self)->contents = NULL) + +/// Create an empty array. +#define array_new() \ + { NULL, 0, 0 } + +/// Get a pointer to the element at a given `index` in the array. +#define array_get(self, _index) \ + (assert((uint32_t)(_index) < (self)->size), &(self)->contents[_index]) + +/// Get a pointer to the first element in the array. +#define array_front(self) array_get(self, 0) + +/// Get a pointer to the last element in the array. +#define array_back(self) array_get(self, (self)->size - 1) + +/// Clear the array, setting its size to zero. Note that this does not free any +/// memory allocated for the array's contents. +#define array_clear(self) ((self)->size = 0) + +/// Reserve `new_capacity` elements of space in the array. If `new_capacity` is +/// less than the array's current capacity, this function has no effect. +#define array_reserve(self, new_capacity) \ + _array__reserve((Array *)(self), array_elem_size(self), new_capacity) + +/// Free any memory allocated for this array. Note that this does not free any +/// memory allocated for the array's contents. +#define array_delete(self) _array__delete((Array *)(self)) + +/// Push a new `element` onto the end of the array. +#define array_push(self, element) \ + (_array__grow((Array *)(self), 1, array_elem_size(self)), \ + (self)->contents[(self)->size++] = (element)) + +/// Increase the array's size by `count` elements. +/// New elements are zero-initialized. +#define array_grow_by(self, count) \ + do { \ + if ((count) == 0) break; \ + _array__grow((Array *)(self), count, array_elem_size(self)); \ + memset((self)->contents + (self)->size, 0, (count) * array_elem_size(self)); \ + (self)->size += (count); \ + } while (0) + +/// Append all elements from one array to the end of another. +#define array_push_all(self, other) \ + array_extend((self), (other)->size, (other)->contents) + +/// Append `count` elements to the end of the array, reading their values from the +/// `contents` pointer. +#define array_extend(self, count, contents) \ + _array__splice( \ + (Array *)(self), array_elem_size(self), (self)->size, \ + 0, count, contents \ + ) + +/// Remove `old_count` elements from the array starting at the given `index`. At +/// the same index, insert `new_count` new elements, reading their values from the +/// `new_contents` pointer. +#define array_splice(self, _index, old_count, new_count, new_contents) \ + _array__splice( \ + (Array *)(self), array_elem_size(self), _index, \ + old_count, new_count, new_contents \ + ) + +/// Insert one `element` into the array at the given `index`. +#define array_insert(self, _index, element) \ + _array__splice((Array *)(self), array_elem_size(self), _index, 0, 1, &(element)) + +/// Remove one element from the array at the given `index`. +#define array_erase(self, _index) \ + _array__erase((Array *)(self), array_elem_size(self), _index) + +/// Pop the last element off the array, returning the element by value. +#define array_pop(self) ((self)->contents[--(self)->size]) + +/// Assign the contents of one array to another, reallocating if necessary. +#define array_assign(self, other) \ + _array__assign((Array *)(self), (const Array *)(other), array_elem_size(self)) + +/// Swap one array with another +#define array_swap(self, other) \ + _array__swap((Array *)(self), (Array *)(other)) + +/// Get the size of the array contents +#define array_elem_size(self) (sizeof *(self)->contents) + +/// Search a sorted array for a given `needle` value, using the given `compare` +/// callback to determine the order. +/// +/// If an existing element is found to be equal to `needle`, then the `index` +/// out-parameter is set to the existing value's index, and the `exists` +/// out-parameter is set to true. Otherwise, `index` is set to an index where +/// `needle` should be inserted in order to preserve the sorting, and `exists` +/// is set to false. +#define array_search_sorted_with(self, compare, needle, _index, _exists) \ + _array__search_sorted(self, 0, compare, , needle, _index, _exists) + +/// Search a sorted array for a given `needle` value, using integer comparisons +/// of a given struct field (specified with a leading dot) to determine the order. +/// +/// See also `array_search_sorted_with`. +#define array_search_sorted_by(self, field, needle, _index, _exists) \ + _array__search_sorted(self, 0, _compare_int, field, needle, _index, _exists) + +/// Insert a given `value` into a sorted array, using the given `compare` +/// callback to determine the order. +#define array_insert_sorted_with(self, compare, value) \ + do { \ + unsigned _index, _exists; \ + array_search_sorted_with(self, compare, &(value), &_index, &_exists); \ + if (!_exists) array_insert(self, _index, value); \ + } while (0) + +/// Insert a given `value` into a sorted array, using integer comparisons of +/// a given struct field (specified with a leading dot) to determine the order. +/// +/// See also `array_search_sorted_by`. +#define array_insert_sorted_by(self, field, value) \ + do { \ + unsigned _index, _exists; \ + array_search_sorted_by(self, field, (value) field, &_index, &_exists); \ + if (!_exists) array_insert(self, _index, value); \ + } while (0) + +// Private + +typedef Array(void) Array; + +/// This is not what you're looking for, see `array_delete`. +static inline void _array__delete(Array *self) { + if (self->contents) { + ts_free(self->contents); + self->contents = NULL; + self->size = 0; + self->capacity = 0; + } +} + +/// This is not what you're looking for, see `array_erase`. +static inline void _array__erase(Array *self, size_t element_size, + uint32_t index) { + assert(index < self->size); + char *contents = (char *)self->contents; + memmove(contents + index * element_size, contents + (index + 1) * element_size, + (self->size - index - 1) * element_size); + self->size--; +} + +/// This is not what you're looking for, see `array_reserve`. +static inline void _array__reserve(Array *self, size_t element_size, uint32_t new_capacity) { + if (new_capacity > self->capacity) { + if (self->contents) { + self->contents = ts_realloc(self->contents, new_capacity * element_size); + } else { + self->contents = ts_malloc(new_capacity * element_size); + } + self->capacity = new_capacity; + } +} + +/// This is not what you're looking for, see `array_assign`. +static inline void _array__assign(Array *self, const Array *other, size_t element_size) { + _array__reserve(self, element_size, other->size); + self->size = other->size; + memcpy(self->contents, other->contents, self->size * element_size); +} + +/// This is not what you're looking for, see `array_swap`. +static inline void _array__swap(Array *self, Array *other) { + Array swap = *other; + *other = *self; + *self = swap; +} + +/// This is not what you're looking for, see `array_push` or `array_grow_by`. +static inline void _array__grow(Array *self, uint32_t count, size_t element_size) { + uint32_t new_size = self->size + count; + if (new_size > self->capacity) { + uint32_t new_capacity = self->capacity * 2; + if (new_capacity < 8) new_capacity = 8; + if (new_capacity < new_size) new_capacity = new_size; + _array__reserve(self, element_size, new_capacity); + } +} + +/// This is not what you're looking for, see `array_splice`. +static inline void _array__splice(Array *self, size_t element_size, + uint32_t index, uint32_t old_count, + uint32_t new_count, const void *elements) { + uint32_t new_size = self->size + new_count - old_count; + uint32_t old_end = index + old_count; + uint32_t new_end = index + new_count; + assert(old_end <= self->size); + + _array__reserve(self, element_size, new_size); + + char *contents = (char *)self->contents; + if (self->size > old_end) { + memmove( + contents + new_end * element_size, + contents + old_end * element_size, + (self->size - old_end) * element_size + ); + } + if (new_count > 0) { + if (elements) { + memcpy( + (contents + index * element_size), + elements, + new_count * element_size + ); + } else { + memset( + (contents + index * element_size), + 0, + new_count * element_size + ); + } + } + self->size += new_count - old_count; +} + +/// A binary search routine, based on Rust's `std::slice::binary_search_by`. +/// This is not what you're looking for, see `array_search_sorted_with` or `array_search_sorted_by`. +#define _array__search_sorted(self, start, compare, suffix, needle, _index, _exists) \ + do { \ + *(_index) = start; \ + *(_exists) = false; \ + uint32_t size = (self)->size - *(_index); \ + if (size == 0) break; \ + int comparison; \ + while (size > 1) { \ + uint32_t half_size = size / 2; \ + uint32_t mid_index = *(_index) + half_size; \ + comparison = compare(&((self)->contents[mid_index] suffix), (needle)); \ + if (comparison <= 0) *(_index) = mid_index; \ + size -= half_size; \ + } \ + comparison = compare(&((self)->contents[*(_index)] suffix), (needle)); \ + if (comparison == 0) *(_exists) = true; \ + else if (comparison < 0) *(_index) += 1; \ + } while (0) + +/// Helper macro for the `_sorted_by` routines below. This takes the left (existing) +/// parameter by reference in order to work with the generic sorting function above. +#define _compare_int(a, b) ((int)*(a) - (int)(b)) + +#ifdef _MSC_VER +#pragma warning(default : 4101) +#elif defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic pop +#endif + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_ARRAY_H_ diff --git a/python/extractor/tsg-python/tsp/src/tree_sitter/parser.h b/python/extractor/tsg-python/tsp/src/tree_sitter/parser.h index 2b14ac1046bb..799f599bd4e2 100644 --- a/python/extractor/tsg-python/tsp/src/tree_sitter/parser.h +++ b/python/extractor/tsg-python/tsp/src/tree_sitter/parser.h @@ -13,9 +13,8 @@ extern "C" { #define ts_builtin_sym_end 0 #define TREE_SITTER_SERIALIZATION_BUFFER_SIZE 1024 -typedef uint16_t TSStateId; - #ifndef TREE_SITTER_API_H_ +typedef uint16_t TSStateId; typedef uint16_t TSSymbol; typedef uint16_t TSFieldId; typedef struct TSLanguage TSLanguage; @@ -48,6 +47,7 @@ struct TSLexer { uint32_t (*get_column)(TSLexer *); bool (*is_at_included_range_start)(const TSLexer *); bool (*eof)(const TSLexer *); + void (*log)(const TSLexer *, const char *, ...); }; typedef enum { @@ -87,6 +87,11 @@ typedef union { } entry; } TSParseActionEntry; +typedef struct { + int32_t start; + int32_t end; +} TSCharacterRange; + struct TSLanguage { uint32_t version; uint32_t symbol_count; @@ -126,13 +131,38 @@ struct TSLanguage { const TSStateId *primary_state_ids; }; +static inline bool set_contains(TSCharacterRange *ranges, uint32_t len, int32_t lookahead) { + uint32_t index = 0; + uint32_t size = len - index; + while (size > 1) { + uint32_t half_size = size / 2; + uint32_t mid_index = index + half_size; + TSCharacterRange *range = &ranges[mid_index]; + if (lookahead >= range->start && lookahead <= range->end) { + return true; + } else if (lookahead > range->end) { + index = mid_index; + } + size -= half_size; + } + TSCharacterRange *range = &ranges[index]; + return (lookahead >= range->start && lookahead <= range->end); +} + /* * Lexer Macros */ +#ifdef _MSC_VER +#define UNUSED __pragma(warning(suppress : 4101)) +#else +#define UNUSED __attribute__((unused)) +#endif + #define START_LEXER() \ bool result = false; \ bool skip = false; \ + UNUSED \ bool eof = false; \ int32_t lookahead; \ goto start; \ @@ -148,6 +178,17 @@ struct TSLanguage { goto next_state; \ } +#define ADVANCE_MAP(...) \ + { \ + static const uint16_t map[] = { __VA_ARGS__ }; \ + for (uint32_t i = 0; i < sizeof(map) / sizeof(map[0]); i += 2) { \ + if (map[i] == lookahead) { \ + state = map[i + 1]; \ + goto next_state; \ + } \ + } \ + } + #define SKIP(state_value) \ { \ skip = true; \ @@ -166,7 +207,7 @@ struct TSLanguage { * Parse Table Macros */ -#define SMALL_STATE(id) id - LARGE_STATE_COUNT +#define SMALL_STATE(id) ((id) - LARGE_STATE_COUNT) #define STATE(id) id @@ -176,7 +217,7 @@ struct TSLanguage { {{ \ .shift = { \ .type = TSParseActionTypeShift, \ - .state = state_value \ + .state = (state_value) \ } \ }} @@ -184,7 +225,7 @@ struct TSLanguage { {{ \ .shift = { \ .type = TSParseActionTypeShift, \ - .state = state_value, \ + .state = (state_value), \ .repetition = true \ } \ }} @@ -197,14 +238,15 @@ struct TSLanguage { } \ }} -#define REDUCE(symbol_val, child_count_val, ...) \ - {{ \ - .reduce = { \ - .type = TSParseActionTypeReduce, \ - .symbol = symbol_val, \ - .child_count = child_count_val, \ - __VA_ARGS__ \ - }, \ +#define REDUCE(symbol_name, children, precedence, prod_id) \ + {{ \ + .reduce = { \ + .type = TSParseActionTypeReduce, \ + .symbol = symbol_name, \ + .child_count = children, \ + .dynamic_precedence = precedence, \ + .production_id = prod_id \ + }, \ }} #define RECOVER() \ From 55ee3eb36b21989ed826b70ef7790f9f52815e05 Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 8 Oct 2024 12:28:31 +0000 Subject: [PATCH 123/217] Python: Add TSG support for type defaults --- python/extractor/tsg-python/python.tsg | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/python/extractor/tsg-python/python.tsg b/python/extractor/tsg-python/python.tsg index e185bbbae798..8a9ab01e9915 100644 --- a/python/extractor/tsg-python/python.tsg +++ b/python/extractor/tsg-python/python.tsg @@ -3388,6 +3388,7 @@ (typevar_parameter name: (_) @name bound: (_)? @bound + default: (_)? @default ) @typevar { attr (@name.node) ctx = "store" @@ -3396,22 +3397,36 @@ attr (@bound.node) ctx = "load" attr (@typevar.node) bound = @bound.node } + if some @default { + attr (@default.node) ctx = "load" + attr (@typevar.node) default = @default.node + } } (typevartuple_parameter name: (_) @name + default: (_)? @default ) @typevartuple { attr (@name.node) ctx = "store" attr (@typevartuple.node) name = @name.node + if some @default { + attr (@default.node) ctx = "load" + attr (@typevartuple.node) default = @default.node + } } (paramspec_parameter name: (_) @name + default: (_)? @default ) @paramspec { attr (@name.node) ctx = "store" attr (@paramspec.node) name = @name.node + if some @default { + attr (@default.node) ctx = "load" + attr (@paramspec.node) default = @default.node + } } ;;;;;; End of Type parameters (`T: ..., *T, **T`) From 2af0d78435823831e06e0eb62e6bc2affc17e0c4 Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 8 Oct 2024 12:31:49 +0000 Subject: [PATCH 124/217] Python: Add `default` field to the relevant AST nodes --- python/extractor/semmle/python/ast.py | 15 +++++++++------ python/extractor/semmle/python/master.py | 3 +++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/python/extractor/semmle/python/ast.py b/python/extractor/semmle/python/ast.py index 25b93cae72ac..6033e39e009b 100644 --- a/python/extractor/semmle/python/ast.py +++ b/python/extractor/semmle/python/ast.py @@ -500,10 +500,11 @@ def __init__(self, n, text): self.text = text class ParamSpec(type_parameter): - __slots__ = "name", + __slots__ = "name", "default", - def __init__(self, name): + def __init__(self, name, default): self.name = name + self.default = default @@ -607,17 +608,19 @@ def __init__(self, name, type_parameters, value): self.value = value class TypeVar(type_parameter): - __slots__ = "name", "bound", + __slots__ = "name", "bound", "default" - def __init__(self, name, bound): + def __init__(self, name, bound, default): self.name = name self.bound = bound + self.default = default class TypeVarTuple(type_parameter): - __slots__ = "name", + __slots__ = "name", "default", - def __init__(self, name): + def __init__(self, name, default): self.name = name + self.default = default class UnaryOp(expr): __slots__ = "op", "operand", diff --git a/python/extractor/semmle/python/master.py b/python/extractor/semmle/python/master.py index 200340061fc6..508a706a97a0 100755 --- a/python/extractor/semmle/python/master.py +++ b/python/extractor/semmle/python/master.py @@ -397,6 +397,7 @@ Num.field('text', number) ParamSpec.field('name', expr) +ParamSpec.field('default', expr) Print.field('dest', expr, 'destination') Print.field('values', expr_list) @@ -448,8 +449,10 @@ TypeVar.field('name', expr) TypeVar.field('bound', expr) +TypeVar.field('default', expr) TypeVarTuple.field('name', expr) +TypeVarTuple.field('default', expr) UnaryOp.field('op', unaryop, 'operator') UnaryOp.field('operand', expr) From 36d89745f96abad21daf987198161813d72011c7 Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 8 Oct 2024 12:30:46 +0000 Subject: [PATCH 125/217] Python: Fix dbscheme/AST autogeneration There was an errant `ql` in the relevant paths, a leftover from the move from the internal repo. Also, we can no longer rely on an intree version of the CodeQL CLI, so from now on we'll just assume it's present in the path. (On Codespaces, `gh codeql` is a decent replacement, especially if using the `install-stub` functionality. --- python/extractor/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/python/extractor/Makefile b/python/extractor/Makefile index 1f2c5d0752b9..54095f6572be 100644 --- a/python/extractor/Makefile +++ b/python/extractor/Makefile @@ -21,19 +21,19 @@ $(TOKENIZER_FILE): $(TOKENIZER_DEPS) MASTER_FILE = semmle/python/master.py -DBSCHEME_FILE = $(GIT_ROOT)/ql/python/ql/lib/semmlecode.python.dbscheme +DBSCHEME_FILE = $(GIT_ROOT)/python/ql/lib/semmlecode.python.dbscheme .PHONY: dbscheme dbscheme: $(MASTER_FILE) python3 -m semmle.dbscheme_gen $(DBSCHEME_FILE) -AST_GENERATED_DIR = $(GIT_ROOT)/ql/python/ql/lib/semmle/python/ +AST_GENERATED_DIR = $(GIT_ROOT)/python/ql/lib/semmle/python/ AST_GENERATED_FILE = $(AST_GENERATED_DIR)AstGenerated.qll .PHONY: ast ast: $(MASTER_FILE) python3 -m semmle.query_gen $(AST_GENERATED_DIR) - $(GIT_ROOT)/target/intree/codeql/codeql query format --in-place $(AST_GENERATED_FILE) + codeql query format --in-place $(AST_GENERATED_FILE) ################################################################################ # Tests From 182a192cc0d3aa480b038c0030f316627d7f565e Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 8 Oct 2024 12:31:02 +0000 Subject: [PATCH 126/217] Python: Regenerate dbscheme/AST --- python/ql/lib/semmle/python/AstGenerated.qll | 9 +++++++++ python/ql/lib/semmlecode.python.dbscheme | 3 +++ 2 files changed, 12 insertions(+) diff --git a/python/ql/lib/semmle/python/AstGenerated.qll b/python/ql/lib/semmle/python/AstGenerated.qll index 1550095b3952..e672cda001dd 100644 --- a/python/ql/lib/semmle/python/AstGenerated.qll +++ b/python/ql/lib/semmle/python/AstGenerated.qll @@ -1126,6 +1126,9 @@ class ParamSpec_ extends @py_ParamSpec, TypeParameter { /** Gets the name of this parameter spec. */ Expr getName() { py_exprs(result, _, this, 1) } + /** Gets the default of this parameter spec. */ + Expr getDefault() { py_exprs(result, _, this, 2) } + override string toString() { result = "ParamSpec" } } @@ -1466,6 +1469,9 @@ class TypeVar_ extends @py_TypeVar, TypeParameter { /** Gets the bound of this type variable. */ Expr getBound() { py_exprs(result, _, this, 2) } + /** Gets the default of this type variable. */ + Expr getDefault() { py_exprs(result, _, this, 3) } + override string toString() { result = "TypeVar" } } @@ -1474,6 +1480,9 @@ class TypeVarTuple_ extends @py_TypeVarTuple, TypeParameter { /** Gets the name of this type variable tuple. */ Expr getName() { py_exprs(result, _, this, 1) } + /** Gets the default of this type variable tuple. */ + Expr getDefault() { py_exprs(result, _, this, 2) } + override string toString() { result = "TypeVarTuple" } } diff --git a/python/ql/lib/semmlecode.python.dbscheme b/python/ql/lib/semmlecode.python.dbscheme index 728c6d65e61d..5af903da088e 100644 --- a/python/ql/lib/semmlecode.python.dbscheme +++ b/python/ql/lib/semmlecode.python.dbscheme @@ -617,6 +617,7 @@ py_extracted_version(int module : @py_Module ref, /* ParamSpec.location = 0, location */ /* ParamSpec.name = 1, expr */ +/* ParamSpec.default = 2, expr */ /* Pass.location = 0, location */ @@ -715,9 +716,11 @@ py_extracted_version(int module : @py_Module ref, /* TypeVar.location = 0, location */ /* TypeVar.name = 1, expr */ /* TypeVar.bound = 2, expr */ +/* TypeVar.default = 3, expr */ /* TypeVarTuple.location = 0, location */ /* TypeVarTuple.name = 1, expr */ +/* TypeVarTuple.default = 2, expr */ /* UnaryExpr.location = 0, location */ /* UnaryExpr.parenthesised = 1, bool */ From 819b3d77ab53ec67c1ae29419de48cd9934d0189 Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 8 Oct 2024 12:39:58 +0000 Subject: [PATCH 127/217] Python: Update test expectations Note that this still includes the somewhat puzzling parsing of `Spam[**P2]` as an exponentiation with an empty left hand side. When we fix that bug, we should also update this test to contain actually valid syntax. --- .../extractor/tests/parser/types_new.expected | 294 +++++++++++++++++- 1 file changed, 293 insertions(+), 1 deletion(-) diff --git a/python/extractor/tests/parser/types_new.expected b/python/extractor/tests/parser/types_new.expected index be42268c201a..a390ed1aae2a 100644 --- a/python/extractor/tests/parser/types_new.expected +++ b/python/extractor/tests/parser/types_new.expected @@ -1,4 +1,4 @@ -Module: [1, 0] - [6, 0] +Module: [1, 0] - [23, 0] body: [ TypeAlias: [1, 0] - [1, 34] name: @@ -12,6 +12,7 @@ Module: [1, 0] - [6, 0] variable: Variable('T1', None) ctx: Store bound: None + default: None TypeVar: [1, 11] - [1, 17] name: Name: [1, 11] - [1, 13] @@ -21,16 +22,19 @@ Module: [1, 0] - [6, 0] Name: [1, 15] - [1, 17] variable: Variable('E1', None) ctx: Load + default: None TypeVarTuple: [1, 19] - [1, 22] name: Name: [1, 20] - [1, 22] variable: Variable('T3', None) ctx: Store + default: None ParamSpec: [1, 24] - [1, 28] name: Name: [1, 26] - [1, 28] variable: Variable('T4', None) ctx: Store + default: None ] value: Name: [1, 32] - [1, 34] @@ -64,6 +68,7 @@ Module: [1, 0] - [6, 0] variable: Variable('T6', None) ctx: Store bound: None + default: None TypeVar: [3, 10] - [3, 16] name: Name: [3, 10] - [3, 12] @@ -73,16 +78,19 @@ Module: [1, 0] - [6, 0] Name: [3, 14] - [3, 16] variable: Variable('E2', None) ctx: Load + default: None TypeVarTuple: [3, 18] - [3, 21] name: Name: [3, 19] - [3, 21] variable: Variable('T8', None) ctx: Store + default: None ParamSpec: [3, 23] - [3, 27] name: Name: [3, 25] - [3, 27] variable: Variable('T9', None) ctx: Store + default: None ] args: [] vararg: None @@ -109,6 +117,7 @@ Module: [1, 0] - [6, 0] variable: Variable('T10', None) ctx: Store bound: None + default: None TypeVar: [5, 13] - [5, 20] name: Name: [5, 13] - [5, 16] @@ -118,16 +127,19 @@ Module: [1, 0] - [6, 0] Name: [5, 18] - [5, 20] variable: Variable('E3', None) ctx: Load + default: None TypeVarTuple: [5, 22] - [5, 26] name: Name: [5, 23] - [5, 26] variable: Variable('T12', None) ctx: Store + default: None ParamSpec: [5, 28] - [5, 33] name: Name: [5, 30] - [5, 33] variable: Variable('T13', None) ctx: Store + default: None ] bases: [] keywords: [] @@ -139,4 +151,284 @@ Module: [1, 0] - [6, 0] value: Ellipsis: [5, 36] - [5, 39] ] + Assign: [10, 0] - [10, 22] + targets: [ + Name: [10, 6] - [10, 10] + variable: Variable('Foo1', None) + ctx: Store + ] + value: + ClassExpr: [10, 0] - [10, 22] + name: 'Foo1' + type_parameters: [ + TypeVar: [10, 11] - [10, 20] + name: + Name: [10, 11] - [10, 14] + variable: Variable('T14', None) + ctx: Store + bound: None + default: + Name: [10, 17] - [10, 20] + variable: Variable('str', None) + ctx: Load + ] + bases: [] + keywords: [] + inner_scope: + Class: [10, 0] - [10, 22] + name: 'Foo1' + body: [ + Expr: [10, 23] - [10, 26] + value: + Ellipsis: [10, 23] - [10, 26] + ] + Assign: [13, 0] - [13, 30] + targets: [ + Name: [13, 6] - [13, 10] + variable: Variable('Baz1', None) + ctx: Store + ] + value: + ClassExpr: [13, 0] - [13, 30] + name: 'Baz1' + type_parameters: [ + ParamSpec: [13, 11] - [13, 28] + name: + Name: [13, 13] - [13, 15] + variable: Variable('P1', None) + ctx: Store + default: + List: [13, 18] - [13, 28] + elts: [ + Name: [13, 19] - [13, 22] + variable: Variable('int', None) + ctx: Load + Name: [13, 24] - [13, 27] + variable: Variable('str', None) + ctx: Load + ] + ctx: Load + ] + bases: [] + keywords: [] + inner_scope: + Class: [13, 0] - [13, 30] + name: 'Baz1' + body: [ + Expr: [13, 31] - [13, 34] + value: + Ellipsis: [13, 31] - [13, 34] + ] + Assign: [16, 0] - [16, 37] + targets: [ + Name: [16, 6] - [16, 10] + variable: Variable('Qux1', None) + ctx: Store + ] + value: + ClassExpr: [16, 0] - [16, 37] + name: 'Qux1' + type_parameters: [ + TypeVarTuple: [16, 11] - [16, 35] + name: + Name: [16, 12] - [16, 15] + variable: Variable('Ts1', None) + ctx: Store + default: + Starred: [16, 18] - [16, 35] + value: + Subscript: [16, 19] - [16, 35] + value: + Name: [16, 19] - [16, 24] + variable: Variable('tuple', None) + ctx: Load + index: + Tuple: [16, 25] - [16, 34] + elts: [ + Name: [16, 25] - [16, 28] + variable: Variable('int', None) + ctx: Load + Name: [16, 30] - [16, 34] + variable: Variable('bool', None) + ctx: Load + ] + ctx: Load + ctx: Load + ctx: Load + ] + bases: [] + keywords: [] + inner_scope: + Class: [16, 0] - [16, 37] + name: 'Qux1' + body: [ + Expr: [16, 38] - [16, 41] + value: + Ellipsis: [16, 38] - [16, 41] + ] + TypeAlias: [19, 0] - [19, 40] + name: + Name: [19, 5] - [19, 9] + variable: Variable('Foo2', None) + ctx: Store + type_parameters: [ + TypeVar: [19, 10] - [19, 13] + name: + Name: [19, 10] - [19, 13] + variable: Variable('T15', None) + ctx: Store + bound: None + default: None + TypeVar: [19, 15] - [19, 23] + name: + Name: [19, 15] - [19, 17] + variable: Variable('U1', None) + ctx: Store + bound: None + default: + Name: [19, 20] - [19, 23] + variable: Variable('str', None) + ctx: Load + ] + value: + Subscript: [19, 27] - [19, 40] + value: + Name: [19, 27] - [19, 31] + variable: Variable('Bar1', None) + ctx: Load + index: + Tuple: [19, 32] - [19, 39] + elts: [ + Name: [19, 32] - [19, 35] + variable: Variable('T15', None) + ctx: Load + Name: [19, 37] - [19, 39] + variable: Variable('U1', None) + ctx: Load + ] + ctx: Load + ctx: Load + TypeAlias: [20, 0] - [20, 41] + name: + Name: [20, 5] - [20, 9] + variable: Variable('Baz2', None) + ctx: Store + type_parameters: [ + ParamSpec: [20, 10] - [20, 27] + name: + Name: [20, 12] - [20, 14] + variable: Variable('P2', None) + ctx: Store + default: + List: [20, 17] - [20, 27] + elts: [ + Name: [20, 18] - [20, 21] + variable: Variable('int', None) + ctx: Load + Name: [20, 23] - [20, 26] + variable: Variable('str', None) + ctx: Load + ] + ctx: Load + ] + value: + Subscript: [20, 31] - [20, 41] + value: + Name: [20, 31] - [20, 35] + variable: Variable('Spam', None) + ctx: Load + index: + BinOp: [20, 36] - [20, 40] + left: + Name: [20, 36] - [20, 36] + variable: Variable('', None) + ctx: Load + op: Pow + right: + Name: [20, 38] - [20, 40] + variable: Variable('P2', None) + ctx: Load + ctx: Load + TypeAlias: [21, 0] - [21, 41] + name: + Name: [21, 5] - [21, 9] + variable: Variable('Qux2', None) + ctx: Store + type_parameters: [ + TypeVarTuple: [21, 10] - [21, 28] + name: + Name: [21, 11] - [21, 14] + variable: Variable('Ts2', None) + ctx: Store + default: + Starred: [21, 17] - [21, 28] + value: + Subscript: [21, 18] - [21, 28] + value: + Name: [21, 18] - [21, 23] + variable: Variable('tuple', None) + ctx: Load + index: + Name: [21, 24] - [21, 27] + variable: Variable('str', None) + ctx: Load + ctx: Load + ctx: Load + ] + value: + Subscript: [21, 32] - [21, 41] + value: + Name: [21, 32] - [21, 35] + variable: Variable('Ham', None) + ctx: Load + index: + Starred: [21, 36] - [21, 40] + value: + Name: [21, 37] - [21, 40] + variable: Variable('Ts2', None) + ctx: Load + ctx: Load + ctx: Load + TypeAlias: [22, 0] - [22, 39] + name: + Name: [22, 5] - [22, 8] + variable: Variable('Rab', None) + ctx: Store + type_parameters: [ + TypeVar: [22, 9] - [22, 11] + name: + Name: [22, 9] - [22, 11] + variable: Variable('U2', None) + ctx: Store + bound: None + default: None + TypeVar: [22, 13] - [22, 22] + name: + Name: [22, 13] - [22, 16] + variable: Variable('T15', None) + ctx: Store + bound: None + default: + Name: [22, 19] - [22, 22] + variable: Variable('str', None) + ctx: Load + ] + value: + Subscript: [22, 26] - [22, 39] + value: + Name: [22, 26] - [22, 30] + variable: Variable('Bar2', None) + ctx: Load + index: + Tuple: [22, 31] - [22, 38] + elts: [ + Name: [22, 31] - [22, 34] + variable: Variable('T15', None) + ctx: Load + Name: [22, 36] - [22, 38] + variable: Variable('U2', None) + ctx: Load + ] + ctx: Load + ctx: Load ] From 8630f57710ed13d1999a4ed96e9c5dbed65423f4 Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 9 Oct 2024 12:39:53 +0000 Subject: [PATCH 128/217] Python: Add up-/downgrade scripts Adds up- and downgrade scripts for the support for type parameter defaults. In the upgrade direction we do nothing, matching the behaviour of `getDefault` not having a result for old databases. In the downgrade direction, we explicitly remove the relevant child (via the `py_exprs` database relation) for `TypeVar`, `TypeVarTuple`, and `ParamSpec` parameters. --- .../old.dbscheme | 1236 +++++++++++++++++ .../py_exprs.ql | 42 + .../semmlecode.python.dbscheme | 1233 ++++++++++++++++ .../upgrade.properties | 3 + .../old.dbscheme | 1233 ++++++++++++++++ .../semmlecode.python.dbscheme | 1236 +++++++++++++++++ .../upgrade.properties | 2 + 7 files changed, 4985 insertions(+) create mode 100644 python/downgrades/5af903da088e3746aa283700a43a779302453523/old.dbscheme create mode 100644 python/downgrades/5af903da088e3746aa283700a43a779302453523/py_exprs.ql create mode 100644 python/downgrades/5af903da088e3746aa283700a43a779302453523/semmlecode.python.dbscheme create mode 100644 python/downgrades/5af903da088e3746aa283700a43a779302453523/upgrade.properties create mode 100644 python/ql/lib/upgrades/728c6d65e61d808ae276013ebc15abc3a97aaef1/old.dbscheme create mode 100644 python/ql/lib/upgrades/728c6d65e61d808ae276013ebc15abc3a97aaef1/semmlecode.python.dbscheme create mode 100644 python/ql/lib/upgrades/728c6d65e61d808ae276013ebc15abc3a97aaef1/upgrade.properties diff --git a/python/downgrades/5af903da088e3746aa283700a43a779302453523/old.dbscheme b/python/downgrades/5af903da088e3746aa283700a43a779302453523/old.dbscheme new file mode 100644 index 000000000000..5af903da088e --- /dev/null +++ b/python/downgrades/5af903da088e3746aa283700a43a779302453523/old.dbscheme @@ -0,0 +1,1236 @@ +/* + * This dbscheme is auto-generated by 'semmle/dbscheme_gen.py'. + * WARNING: Any modifications to this file will be lost. + * Relations can be changed by modifying master.py or + * by adding rules to dbscheme.template + */ + +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2020-07-02 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/*- DEPRECATED: External defects and metrics -*/ + +externalDefects( + unique int id : @externalDefect, + varchar(900) queryPath : string ref, + int location : @location ref, + varchar(900) message : string ref, + float severity : float ref +); + +externalMetrics( + unique int id : @externalMetric, + varchar(900) queryPath : string ref, + int location : @location ref, + float value : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- DEPRECATED: Snapshot date -*/ + +snapshotDate(unique date snapshotDate : date ref); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- DEPRECATED: Duplicate code -*/ + +duplicateCode( + unique int id : @duplication, + string relativePath : string ref, + int equivClass : int ref +); + +similarCode( + unique int id : @similarity, + string relativePath : string ref, + int equivClass : int ref +); + +@duplication_or_similarity = @duplication | @similarity + +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref +); + +/*- DEPRECATED: Version control data -*/ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Python dbscheme -*/ + +/* + * Line metrics + */ +py_codelines(int id : @py_scope ref, + int count : int ref); + +py_commentlines(int id : @py_scope ref, + int count : int ref); + +py_docstringlines(int id : @py_scope ref, + int count : int ref); + +py_alllines(int id : @py_scope ref, + int count : int ref); + +/**************************** + Python dbscheme +****************************/ + +@sourceline = @file | @py_Module | @xmllocatable; + +@location = @location_ast | @location_default ; + +locations_ast(unique int id: @location_ast, + int module: @py_Module ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +file_contents(unique int file: @file ref, string contents: string ref); + +py_module_path(int module: @py_Module ref, int file: @container ref); + +variable(unique int id : @py_variable, + int scope : @py_scope ref, + varchar(1) name : string ref); + +py_line_lengths(unique int id : @py_line, + int file: @py_Module ref, + int line : int ref, + int length : int ref); + +py_extracted_version(int module : @py_Module ref, + varchar(1) version : string ref); + +/* AUTO GENERATED PART STARTS HERE */ + + +/* AnnAssign.location = 0, location */ +/* AnnAssign.value = 1, expr */ +/* AnnAssign.annotation = 2, expr */ +/* AnnAssign.target = 3, expr */ + +/* Assert.location = 0, location */ +/* Assert.test = 1, expr */ +/* Assert.msg = 2, expr */ + +/* Assign.location = 0, location */ +/* Assign.value = 1, expr */ +/* Assign.targets = 2, expr_list */ + +/* AssignExpr.location = 0, location */ +/* AssignExpr.parenthesised = 1, bool */ +/* AssignExpr.value = 2, expr */ +/* AssignExpr.target = 3, expr */ + +/* Attribute.location = 0, location */ +/* Attribute.parenthesised = 1, bool */ +/* Attribute.value = 2, expr */ +/* Attribute.attr = 3, str */ +/* Attribute.ctx = 4, expr_context */ + +/* AugAssign.location = 0, location */ +/* AugAssign.operation = 1, BinOp */ + +/* Await.location = 0, location */ +/* Await.parenthesised = 1, bool */ +/* Await.value = 2, expr */ + +/* BinaryExpr.location = 0, location */ +/* BinaryExpr.parenthesised = 1, bool */ +/* BinaryExpr.left = 2, expr */ +/* BinaryExpr.op = 3, operator */ +/* BinaryExpr.right = 4, expr */ +/* BinaryExpr = AugAssign */ + +/* BoolExpr.location = 0, location */ +/* BoolExpr.parenthesised = 1, bool */ +/* BoolExpr.op = 2, boolop */ +/* BoolExpr.values = 3, expr_list */ + +/* Break.location = 0, location */ + +/* Bytes.location = 0, location */ +/* Bytes.parenthesised = 1, bool */ +/* Bytes.s = 2, bytes */ +/* Bytes.prefix = 3, bytes */ +/* Bytes.implicitly_concatenated_parts = 4, StringPart_list */ + +/* Call.location = 0, location */ +/* Call.parenthesised = 1, bool */ +/* Call.func = 2, expr */ +/* Call.positional_args = 3, expr_list */ +/* Call.named_args = 4, dict_item_list */ + +/* Case.location = 0, location */ +/* Case.pattern = 1, pattern */ +/* Case.guard = 2, expr */ +/* Case.body = 3, stmt_list */ + +/* Class.name = 0, str */ +/* Class.body = 1, stmt_list */ +/* Class = ClassExpr */ + +/* ClassExpr.location = 0, location */ +/* ClassExpr.parenthesised = 1, bool */ +/* ClassExpr.name = 2, str */ +/* ClassExpr.bases = 3, expr_list */ +/* ClassExpr.keywords = 4, dict_item_list */ +/* ClassExpr.inner_scope = 5, Class */ +/* ClassExpr.type_parameters = 6, type_parameter_list */ + +/* Compare.location = 0, location */ +/* Compare.parenthesised = 1, bool */ +/* Compare.left = 2, expr */ +/* Compare.ops = 3, cmpop_list */ +/* Compare.comparators = 4, expr_list */ + +/* Continue.location = 0, location */ + +/* Delete.location = 0, location */ +/* Delete.targets = 1, expr_list */ + +/* Dict.location = 0, location */ +/* Dict.parenthesised = 1, bool */ +/* Dict.items = 2, dict_item_list */ + +/* DictComp.location = 0, location */ +/* DictComp.parenthesised = 1, bool */ +/* DictComp.function = 2, Function */ +/* DictComp.iterable = 3, expr */ + +/* DictUnpacking.location = 0, location */ +/* DictUnpacking.value = 1, expr */ + +/* Ellipsis.location = 0, location */ +/* Ellipsis.parenthesised = 1, bool */ + +/* ExceptGroupStmt.location = 0, location */ +/* ExceptGroupStmt.type = 1, expr */ +/* ExceptGroupStmt.name = 2, expr */ +/* ExceptGroupStmt.body = 3, stmt_list */ + +/* ExceptStmt.location = 0, location */ +/* ExceptStmt.type = 1, expr */ +/* ExceptStmt.name = 2, expr */ +/* ExceptStmt.body = 3, stmt_list */ + +/* Exec.location = 0, location */ +/* Exec.body = 1, expr */ +/* Exec.globals = 2, expr */ +/* Exec.locals = 3, expr */ + +/* ExprStmt.location = 0, location */ +/* ExprStmt.value = 1, expr */ + +/* Filter.location = 0, location */ +/* Filter.parenthesised = 1, bool */ +/* Filter.value = 2, expr */ +/* Filter.filter = 3, expr */ + +/* For.location = 0, location */ +/* For.target = 1, expr */ +/* For.iter = 2, expr */ +/* For.body = 3, stmt_list */ +/* For.orelse = 4, stmt_list */ +/* For.is_async = 5, bool */ + +/* FormattedValue.location = 0, location */ +/* FormattedValue.parenthesised = 1, bool */ +/* FormattedValue.value = 2, expr */ +/* FormattedValue.conversion = 3, str */ +/* FormattedValue.format_spec = 4, JoinedStr */ + +/* Function.name = 0, str */ +/* Function.args = 1, parameter_list */ +/* Function.vararg = 2, expr */ +/* Function.kwonlyargs = 3, expr_list */ +/* Function.kwarg = 4, expr */ +/* Function.body = 5, stmt_list */ +/* Function.is_async = 6, bool */ +/* Function.type_parameters = 7, type_parameter_list */ +/* Function = FunctionParent */ + +/* FunctionExpr.location = 0, location */ +/* FunctionExpr.parenthesised = 1, bool */ +/* FunctionExpr.name = 2, str */ +/* FunctionExpr.args = 3, arguments */ +/* FunctionExpr.returns = 4, expr */ +/* FunctionExpr.inner_scope = 5, Function */ + +/* GeneratorExp.location = 0, location */ +/* GeneratorExp.parenthesised = 1, bool */ +/* GeneratorExp.function = 2, Function */ +/* GeneratorExp.iterable = 3, expr */ + +/* Global.location = 0, location */ +/* Global.names = 1, str_list */ + +/* Guard.location = 0, location */ +/* Guard.parenthesised = 1, bool */ +/* Guard.test = 2, expr */ + +/* If.location = 0, location */ +/* If.test = 1, expr */ +/* If.body = 2, stmt_list */ +/* If.orelse = 3, stmt_list */ + +/* IfExp.location = 0, location */ +/* IfExp.parenthesised = 1, bool */ +/* IfExp.test = 2, expr */ +/* IfExp.body = 3, expr */ +/* IfExp.orelse = 4, expr */ + +/* Import.location = 0, location */ +/* Import.names = 1, alias_list */ + +/* ImportExpr.location = 0, location */ +/* ImportExpr.parenthesised = 1, bool */ +/* ImportExpr.level = 2, int */ +/* ImportExpr.name = 3, str */ +/* ImportExpr.top = 4, bool */ + +/* ImportStar.location = 0, location */ +/* ImportStar.module = 1, expr */ + +/* ImportMember.location = 0, location */ +/* ImportMember.parenthesised = 1, bool */ +/* ImportMember.module = 2, expr */ +/* ImportMember.name = 3, str */ + +/* Fstring.location = 0, location */ +/* Fstring.parenthesised = 1, bool */ +/* Fstring.values = 2, expr_list */ +/* Fstring = FormattedValue */ + +/* KeyValuePair.location = 0, location */ +/* KeyValuePair.value = 1, expr */ +/* KeyValuePair.key = 2, expr */ + +/* Lambda.location = 0, location */ +/* Lambda.parenthesised = 1, bool */ +/* Lambda.args = 2, arguments */ +/* Lambda.inner_scope = 3, Function */ + +/* List.location = 0, location */ +/* List.parenthesised = 1, bool */ +/* List.elts = 2, expr_list */ +/* List.ctx = 3, expr_context */ + +/* ListComp.location = 0, location */ +/* ListComp.parenthesised = 1, bool */ +/* ListComp.function = 2, Function */ +/* ListComp.iterable = 3, expr */ +/* ListComp.generators = 4, comprehension_list */ +/* ListComp.elt = 5, expr */ + +/* MatchStmt.location = 0, location */ +/* MatchStmt.subject = 1, expr */ +/* MatchStmt.cases = 2, stmt_list */ + +/* MatchAsPattern.location = 0, location */ +/* MatchAsPattern.parenthesised = 1, bool */ +/* MatchAsPattern.pattern = 2, pattern */ +/* MatchAsPattern.alias = 3, expr */ + +/* MatchCapturePattern.location = 0, location */ +/* MatchCapturePattern.parenthesised = 1, bool */ +/* MatchCapturePattern.variable = 2, expr */ + +/* MatchClassPattern.location = 0, location */ +/* MatchClassPattern.parenthesised = 1, bool */ +/* MatchClassPattern.class = 2, expr */ +/* MatchClassPattern.class_name = 3, expr */ +/* MatchClassPattern.positional = 4, pattern_list */ +/* MatchClassPattern.keyword = 5, pattern_list */ + +/* MatchDoubleStarPattern.location = 0, location */ +/* MatchDoubleStarPattern.parenthesised = 1, bool */ +/* MatchDoubleStarPattern.target = 2, pattern */ + +/* MatchKeyValuePattern.location = 0, location */ +/* MatchKeyValuePattern.parenthesised = 1, bool */ +/* MatchKeyValuePattern.key = 2, pattern */ +/* MatchKeyValuePattern.value = 3, pattern */ + +/* MatchKeywordPattern.location = 0, location */ +/* MatchKeywordPattern.parenthesised = 1, bool */ +/* MatchKeywordPattern.attribute = 2, expr */ +/* MatchKeywordPattern.value = 3, pattern */ + +/* MatchLiteralPattern.location = 0, location */ +/* MatchLiteralPattern.parenthesised = 1, bool */ +/* MatchLiteralPattern.literal = 2, expr */ + +/* MatchMappingPattern.location = 0, location */ +/* MatchMappingPattern.parenthesised = 1, bool */ +/* MatchMappingPattern.mappings = 2, pattern_list */ + +/* MatchOrPattern.location = 0, location */ +/* MatchOrPattern.parenthesised = 1, bool */ +/* MatchOrPattern.patterns = 2, pattern_list */ + +/* MatchSequencePattern.location = 0, location */ +/* MatchSequencePattern.parenthesised = 1, bool */ +/* MatchSequencePattern.patterns = 2, pattern_list */ + +/* MatchStarPattern.location = 0, location */ +/* MatchStarPattern.parenthesised = 1, bool */ +/* MatchStarPattern.target = 2, pattern */ + +/* MatchValuePattern.location = 0, location */ +/* MatchValuePattern.parenthesised = 1, bool */ +/* MatchValuePattern.value = 2, expr */ + +/* MatchWildcardPattern.location = 0, location */ +/* MatchWildcardPattern.parenthesised = 1, bool */ + +/* Module.name = 0, str */ +/* Module.hash = 1, str */ +/* Module.body = 2, stmt_list */ +/* Module.kind = 3, str */ + +/* Name.location = 0, location */ +/* Name.parenthesised = 1, bool */ +/* Name.variable = 2, variable */ +/* Name.ctx = 3, expr_context */ +/* Name = ParameterList */ + +/* Nonlocal.location = 0, location */ +/* Nonlocal.names = 1, str_list */ + +/* Num.location = 0, location */ +/* Num.parenthesised = 1, bool */ +/* Num.n = 2, number */ +/* Num.text = 3, number */ + +/* ParamSpec.location = 0, location */ +/* ParamSpec.name = 1, expr */ +/* ParamSpec.default = 2, expr */ + +/* Pass.location = 0, location */ + +/* PlaceHolder.location = 0, location */ +/* PlaceHolder.parenthesised = 1, bool */ +/* PlaceHolder.variable = 2, variable */ +/* PlaceHolder.ctx = 3, expr_context */ + +/* Print.location = 0, location */ +/* Print.dest = 1, expr */ +/* Print.values = 2, expr_list */ +/* Print.nl = 3, bool */ + +/* Raise.location = 0, location */ +/* Raise.exc = 1, expr */ +/* Raise.cause = 2, expr */ +/* Raise.type = 3, expr */ +/* Raise.inst = 4, expr */ +/* Raise.tback = 5, expr */ + +/* Repr.location = 0, location */ +/* Repr.parenthesised = 1, bool */ +/* Repr.value = 2, expr */ + +/* Return.location = 0, location */ +/* Return.value = 1, expr */ + +/* Set.location = 0, location */ +/* Set.parenthesised = 1, bool */ +/* Set.elts = 2, expr_list */ + +/* SetComp.location = 0, location */ +/* SetComp.parenthesised = 1, bool */ +/* SetComp.function = 2, Function */ +/* SetComp.iterable = 3, expr */ + +/* Slice.location = 0, location */ +/* Slice.parenthesised = 1, bool */ +/* Slice.start = 2, expr */ +/* Slice.stop = 3, expr */ +/* Slice.step = 4, expr */ + +/* SpecialOperation.location = 0, location */ +/* SpecialOperation.parenthesised = 1, bool */ +/* SpecialOperation.name = 2, str */ +/* SpecialOperation.arguments = 3, expr_list */ + +/* Starred.location = 0, location */ +/* Starred.parenthesised = 1, bool */ +/* Starred.value = 2, expr */ +/* Starred.ctx = 3, expr_context */ + +/* Str.location = 0, location */ +/* Str.parenthesised = 1, bool */ +/* Str.s = 2, str */ +/* Str.prefix = 3, str */ +/* Str.implicitly_concatenated_parts = 4, StringPart_list */ + +/* StringPart.text = 0, str */ +/* StringPart.location = 1, location */ +/* StringPart = StringPartList */ +/* StringPartList = BytesOrStr */ + +/* Subscript.location = 0, location */ +/* Subscript.parenthesised = 1, bool */ +/* Subscript.value = 2, expr */ +/* Subscript.index = 3, expr */ +/* Subscript.ctx = 4, expr_context */ + +/* TemplateDottedNotation.location = 0, location */ +/* TemplateDottedNotation.parenthesised = 1, bool */ +/* TemplateDottedNotation.value = 2, expr */ +/* TemplateDottedNotation.attr = 3, str */ +/* TemplateDottedNotation.ctx = 4, expr_context */ + +/* TemplateWrite.location = 0, location */ +/* TemplateWrite.value = 1, expr */ + +/* Try.location = 0, location */ +/* Try.body = 1, stmt_list */ +/* Try.orelse = 2, stmt_list */ +/* Try.handlers = 3, stmt_list */ +/* Try.finalbody = 4, stmt_list */ + +/* Tuple.location = 0, location */ +/* Tuple.parenthesised = 1, bool */ +/* Tuple.elts = 2, expr_list */ +/* Tuple.ctx = 3, expr_context */ +/* Tuple = ParameterList */ + +/* TypeAlias.location = 0, location */ +/* TypeAlias.name = 1, expr */ +/* TypeAlias.type_parameters = 2, type_parameter_list */ +/* TypeAlias.value = 3, expr */ + +/* TypeVar.location = 0, location */ +/* TypeVar.name = 1, expr */ +/* TypeVar.bound = 2, expr */ +/* TypeVar.default = 3, expr */ + +/* TypeVarTuple.location = 0, location */ +/* TypeVarTuple.name = 1, expr */ +/* TypeVarTuple.default = 2, expr */ + +/* UnaryExpr.location = 0, location */ +/* UnaryExpr.parenthesised = 1, bool */ +/* UnaryExpr.op = 2, unaryop */ +/* UnaryExpr.operand = 3, expr */ + +/* While.location = 0, location */ +/* While.test = 1, expr */ +/* While.body = 2, stmt_list */ +/* While.orelse = 3, stmt_list */ + +/* With.location = 0, location */ +/* With.context_expr = 1, expr */ +/* With.optional_vars = 2, expr */ +/* With.body = 3, stmt_list */ +/* With.is_async = 4, bool */ + +/* Yield.location = 0, location */ +/* Yield.parenthesised = 1, bool */ +/* Yield.value = 2, expr */ + +/* YieldFrom.location = 0, location */ +/* YieldFrom.parenthesised = 1, bool */ +/* YieldFrom.value = 2, expr */ + +/* Alias.value = 0, expr */ +/* Alias.asname = 1, expr */ +/* Alias = AliasList */ +/* AliasList = Import */ + +/* Arguments.kw_defaults = 0, expr_list */ +/* Arguments.defaults = 1, expr_list */ +/* Arguments.annotations = 2, expr_list */ +/* Arguments.varargannotation = 3, expr */ +/* Arguments.kwargannotation = 4, expr */ +/* Arguments.kw_annotations = 5, expr_list */ +/* Arguments = ArgumentsParent */ +/* boolean = BoolParent */ +/* Boolop = BoolExpr */ +/* string = Bytes */ +/* Cmpop = CmpopList */ +/* CmpopList = Compare */ + +/* Comprehension.location = 0, location */ +/* Comprehension.iter = 1, expr */ +/* Comprehension.target = 2, expr */ +/* Comprehension.ifs = 3, expr_list */ +/* Comprehension = ComprehensionList */ +/* ComprehensionList = ListComp */ +/* DictItem = DictItemList */ +/* DictItemList = DictItemListParent */ + +/* Expr.location = 0, location */ +/* Expr.parenthesised = 1, bool */ +/* Expr = ExprParent */ +/* ExprContext = ExprContextParent */ +/* ExprList = ExprListParent */ +/* int = ImportExpr */ + +/* Keyword.location = 0, location */ +/* Keyword.value = 1, expr */ +/* Keyword.arg = 2, str */ +/* Location = LocationParent */ +/* string = Num */ +/* Operator = BinaryExpr */ +/* ParameterList = Function */ + +/* Pattern.location = 0, location */ +/* Pattern.parenthesised = 1, bool */ +/* Pattern = PatternParent */ +/* PatternList = PatternListParent */ + +/* Stmt.location = 0, location */ +/* Stmt = StmtList */ +/* StmtList = StmtListParent */ +/* string = StrParent */ +/* StringList = StrListParent */ + +/* TypeParameter.location = 0, location */ +/* TypeParameter = TypeParameterList */ +/* TypeParameterList = TypeParameterListParent */ +/* Unaryop = UnaryExpr */ +/* Variable = VariableParent */ +py_Classes(unique int id : @py_Class, + unique int parent : @py_ClassExpr ref); + +py_Functions(unique int id : @py_Function, + unique int parent : @py_Function_parent ref); + +py_Modules(unique int id : @py_Module); + +py_StringParts(unique int id : @py_StringPart, + int parent : @py_StringPart_list ref, + int idx : int ref); + +py_StringPart_lists(unique int id : @py_StringPart_list, + unique int parent : @py_Bytes_or_Str ref); + +py_aliases(unique int id : @py_alias, + int parent : @py_alias_list ref, + int idx : int ref); + +py_alias_lists(unique int id : @py_alias_list, + unique int parent : @py_Import ref); + +py_arguments(unique int id : @py_arguments, + unique int parent : @py_arguments_parent ref); + +py_bools(int parent : @py_bool_parent ref, + int idx : int ref); + +py_boolops(unique int id : @py_boolop, + int kind: int ref, + unique int parent : @py_BoolExpr ref); + +py_bytes(varchar(1) id : string ref, + int parent : @py_Bytes ref, + int idx : int ref); + +py_cmpops(unique int id : @py_cmpop, + int kind: int ref, + int parent : @py_cmpop_list ref, + int idx : int ref); + +py_cmpop_lists(unique int id : @py_cmpop_list, + unique int parent : @py_Compare ref); + +py_comprehensions(unique int id : @py_comprehension, + int parent : @py_comprehension_list ref, + int idx : int ref); + +py_comprehension_lists(unique int id : @py_comprehension_list, + unique int parent : @py_ListComp ref); + +py_dict_items(unique int id : @py_dict_item, + int kind: int ref, + int parent : @py_dict_item_list ref, + int idx : int ref); + +py_dict_item_lists(unique int id : @py_dict_item_list, + unique int parent : @py_dict_item_list_parent ref); + +py_exprs(unique int id : @py_expr, + int kind: int ref, + int parent : @py_expr_parent ref, + int idx : int ref); + +py_expr_contexts(unique int id : @py_expr_context, + int kind: int ref, + unique int parent : @py_expr_context_parent ref); + +py_expr_lists(unique int id : @py_expr_list, + int parent : @py_expr_list_parent ref, + int idx : int ref); + +py_ints(int id : int ref, + unique int parent : @py_ImportExpr ref); + +py_locations(unique int id : @location ref, + unique int parent : @py_location_parent ref); + +py_numbers(varchar(1) id : string ref, + int parent : @py_Num ref, + int idx : int ref); + +py_operators(unique int id : @py_operator, + int kind: int ref, + unique int parent : @py_BinaryExpr ref); + +py_parameter_lists(unique int id : @py_parameter_list, + unique int parent : @py_Function ref); + +py_patterns(unique int id : @py_pattern, + int kind: int ref, + int parent : @py_pattern_parent ref, + int idx : int ref); + +py_pattern_lists(unique int id : @py_pattern_list, + int parent : @py_pattern_list_parent ref, + int idx : int ref); + +py_stmts(unique int id : @py_stmt, + int kind: int ref, + int parent : @py_stmt_list ref, + int idx : int ref); + +py_stmt_lists(unique int id : @py_stmt_list, + int parent : @py_stmt_list_parent ref, + int idx : int ref); + +py_strs(varchar(1) id : string ref, + int parent : @py_str_parent ref, + int idx : int ref); + +py_str_lists(unique int id : @py_str_list, + unique int parent : @py_str_list_parent ref); + +py_type_parameters(unique int id : @py_type_parameter, + int kind: int ref, + int parent : @py_type_parameter_list ref, + int idx : int ref); + +py_type_parameter_lists(unique int id : @py_type_parameter_list, + unique int parent : @py_type_parameter_list_parent ref); + +py_unaryops(unique int id : @py_unaryop, + int kind: int ref, + unique int parent : @py_UnaryExpr ref); + +py_variables(int id : @py_variable ref, + unique int parent : @py_variable_parent ref); + +case @py_boolop.kind of + 0 = @py_And +| 1 = @py_Or; + +case @py_cmpop.kind of + 0 = @py_Eq +| 1 = @py_Gt +| 2 = @py_GtE +| 3 = @py_In +| 4 = @py_Is +| 5 = @py_IsNot +| 6 = @py_Lt +| 7 = @py_LtE +| 8 = @py_NotEq +| 9 = @py_NotIn; + +case @py_dict_item.kind of + 0 = @py_DictUnpacking +| 1 = @py_KeyValuePair +| 2 = @py_keyword; + +case @py_expr.kind of + 0 = @py_Attribute +| 1 = @py_BinaryExpr +| 2 = @py_BoolExpr +| 3 = @py_Bytes +| 4 = @py_Call +| 5 = @py_ClassExpr +| 6 = @py_Compare +| 7 = @py_Dict +| 8 = @py_DictComp +| 9 = @py_Ellipsis +| 10 = @py_FunctionExpr +| 11 = @py_GeneratorExp +| 12 = @py_IfExp +| 13 = @py_ImportExpr +| 14 = @py_ImportMember +| 15 = @py_Lambda +| 16 = @py_List +| 17 = @py_ListComp +| 18 = @py_Guard +| 19 = @py_Name +| 20 = @py_Num +| 21 = @py_Repr +| 22 = @py_Set +| 23 = @py_SetComp +| 24 = @py_Slice +| 25 = @py_Starred +| 26 = @py_Str +| 27 = @py_Subscript +| 28 = @py_Tuple +| 29 = @py_UnaryExpr +| 30 = @py_Yield +| 31 = @py_YieldFrom +| 32 = @py_TemplateDottedNotation +| 33 = @py_Filter +| 34 = @py_PlaceHolder +| 35 = @py_Await +| 36 = @py_Fstring +| 37 = @py_FormattedValue +| 38 = @py_AssignExpr +| 39 = @py_SpecialOperation; + +case @py_expr_context.kind of + 0 = @py_AugLoad +| 1 = @py_AugStore +| 2 = @py_Del +| 3 = @py_Load +| 4 = @py_Param +| 5 = @py_Store; + +case @py_operator.kind of + 0 = @py_Add +| 1 = @py_BitAnd +| 2 = @py_BitOr +| 3 = @py_BitXor +| 4 = @py_Div +| 5 = @py_FloorDiv +| 6 = @py_LShift +| 7 = @py_Mod +| 8 = @py_Mult +| 9 = @py_Pow +| 10 = @py_RShift +| 11 = @py_Sub +| 12 = @py_MatMult; + +case @py_pattern.kind of + 0 = @py_MatchAsPattern +| 1 = @py_MatchOrPattern +| 2 = @py_MatchLiteralPattern +| 3 = @py_MatchCapturePattern +| 4 = @py_MatchWildcardPattern +| 5 = @py_MatchValuePattern +| 6 = @py_MatchSequencePattern +| 7 = @py_MatchStarPattern +| 8 = @py_MatchMappingPattern +| 9 = @py_MatchDoubleStarPattern +| 10 = @py_MatchKeyValuePattern +| 11 = @py_MatchClassPattern +| 12 = @py_MatchKeywordPattern; + +case @py_stmt.kind of + 0 = @py_Assert +| 1 = @py_Assign +| 2 = @py_AugAssign +| 3 = @py_Break +| 4 = @py_Continue +| 5 = @py_Delete +| 6 = @py_ExceptStmt +| 7 = @py_ExceptGroupStmt +| 8 = @py_Exec +| 9 = @py_Expr_stmt +| 10 = @py_For +| 11 = @py_Global +| 12 = @py_If +| 13 = @py_Import +| 14 = @py_ImportStar +| 15 = @py_MatchStmt +| 16 = @py_Case +| 17 = @py_Nonlocal +| 18 = @py_Pass +| 19 = @py_Print +| 20 = @py_Raise +| 21 = @py_Return +| 22 = @py_Try +| 23 = @py_While +| 24 = @py_With +| 25 = @py_TemplateWrite +| 26 = @py_AnnAssign +| 27 = @py_TypeAlias; + +case @py_type_parameter.kind of + 0 = @py_ParamSpec +| 1 = @py_TypeVar +| 2 = @py_TypeVarTuple; + +case @py_unaryop.kind of + 0 = @py_Invert +| 1 = @py_Not +| 2 = @py_UAdd +| 3 = @py_USub; + +@py_Bytes_or_Str = @py_Bytes | @py_Str; + +@py_Function_parent = @py_DictComp | @py_FunctionExpr | @py_GeneratorExp | @py_Lambda | @py_ListComp | @py_SetComp; + +@py_arguments_parent = @py_FunctionExpr | @py_Lambda; + +@py_ast_node = @py_Class | @py_Function | @py_Module | @py_StringPart | @py_comprehension | @py_dict_item | @py_expr | @py_pattern | @py_stmt | @py_type_parameter; + +@py_bool_parent = @py_For | @py_Function | @py_Print | @py_With | @py_expr | @py_pattern; + +@py_dict_item_list_parent = @py_Call | @py_ClassExpr | @py_Dict; + +@py_expr_context_parent = @py_Attribute | @py_List | @py_Name | @py_PlaceHolder | @py_Starred | @py_Subscript | @py_TemplateDottedNotation | @py_Tuple; + +@py_expr_list_parent = @py_Assign | @py_BoolExpr | @py_Call | @py_ClassExpr | @py_Compare | @py_Delete | @py_Fstring | @py_Function | @py_List | @py_Print | @py_Set | @py_SpecialOperation | @py_Tuple | @py_arguments | @py_comprehension; + +@py_expr_or_stmt = @py_expr | @py_stmt; + +@py_expr_parent = @py_AnnAssign | @py_Assert | @py_Assign | @py_AssignExpr | @py_Attribute | @py_AugAssign | @py_Await | @py_BinaryExpr | @py_Call | @py_Case | @py_Compare | @py_DictComp | @py_DictUnpacking | @py_ExceptGroupStmt | @py_ExceptStmt | @py_Exec | @py_Expr_stmt | @py_Filter | @py_For | @py_FormattedValue | @py_Function | @py_FunctionExpr | @py_GeneratorExp | @py_Guard | @py_If | @py_IfExp | @py_ImportMember | @py_ImportStar | @py_KeyValuePair | @py_ListComp | @py_MatchAsPattern | @py_MatchCapturePattern | @py_MatchClassPattern | @py_MatchKeywordPattern | @py_MatchLiteralPattern | @py_MatchStmt | @py_MatchValuePattern | @py_ParamSpec | @py_Print | @py_Raise | @py_Repr | @py_Return | @py_SetComp | @py_Slice | @py_Starred | @py_Subscript | @py_TemplateDottedNotation | @py_TemplateWrite | @py_TypeAlias | @py_TypeVar | @py_TypeVarTuple | @py_UnaryExpr | @py_While | @py_With | @py_Yield | @py_YieldFrom | @py_alias | @py_arguments | @py_comprehension | @py_expr_list | @py_keyword | @py_parameter_list; + +@py_location_parent = @py_DictUnpacking | @py_KeyValuePair | @py_StringPart | @py_comprehension | @py_expr | @py_keyword | @py_pattern | @py_stmt | @py_type_parameter; + +@py_parameter = @py_Name | @py_Tuple; + +@py_pattern_list_parent = @py_MatchClassPattern | @py_MatchMappingPattern | @py_MatchOrPattern | @py_MatchSequencePattern; + +@py_pattern_parent = @py_Case | @py_MatchAsPattern | @py_MatchDoubleStarPattern | @py_MatchKeyValuePattern | @py_MatchKeywordPattern | @py_MatchStarPattern | @py_pattern_list; + +@py_scope = @py_Class | @py_Function | @py_Module; + +@py_stmt_list_parent = @py_Case | @py_Class | @py_ExceptGroupStmt | @py_ExceptStmt | @py_For | @py_Function | @py_If | @py_MatchStmt | @py_Module | @py_Try | @py_While | @py_With; + +@py_str_list_parent = @py_Global | @py_Nonlocal; + +@py_str_parent = @py_Attribute | @py_Class | @py_ClassExpr | @py_FormattedValue | @py_Function | @py_FunctionExpr | @py_ImportExpr | @py_ImportMember | @py_Module | @py_SpecialOperation | @py_Str | @py_StringPart | @py_TemplateDottedNotation | @py_keyword | @py_str_list; + +@py_type_parameter_list_parent = @py_ClassExpr | @py_Function | @py_TypeAlias; + +@py_variable_parent = @py_Name | @py_PlaceHolder; + + +/* + * End of auto-generated part + */ + + + +/* Map relative names to absolute names for imports */ +py_absolute_names(int module : @py_Module ref, + varchar(1) relname : string ref, + varchar(1) absname : string ref); + +py_exports(int id : @py_Module ref, + varchar(1) name : string ref); + +/* Successor information */ +py_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_true_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_exception_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_false_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_flow_bb_node(unique int flownode : @py_flow_node, + int realnode : @py_ast_node ref, + int basicblock : @py_flow_node ref, + int index : int ref); + +py_scope_flow(int flow : @py_flow_node ref, + int scope : @py_scope ref, + int kind : int ref); + +py_idoms(unique int node : @py_flow_node ref, + int immediate_dominator : @py_flow_node ref); + +py_ssa_phi(int phi : @py_ssa_var ref, + int arg: @py_ssa_var ref); + +py_ssa_var(unique int id : @py_ssa_var, + int var : @py_variable ref); + +py_ssa_use(int node: @py_flow_node ref, + int var : @py_ssa_var ref); + +py_ssa_defn(unique int id : @py_ssa_var ref, + int node: @py_flow_node ref); + +@py_base_var = @py_variable | @py_ssa_var; + +py_scopes(unique int node : @py_expr_or_stmt ref, + int scope : @py_scope ref); + +py_scope_location(unique int id : @location ref, + unique int scope : @py_scope ref); + +py_flags_versioned(varchar(1) name : string ref, + varchar(1) value : string ref, + varchar(1) version : string ref); + +py_syntax_error_versioned(unique int id : @location ref, + varchar(1) message : string ref, + varchar(1) version : string ref); + +py_comments(unique int id : @py_comment, + varchar(1) text : string ref, + unique int location : @location ref); + +/* Type information support */ + +py_cobjects(unique int obj : @py_cobject); + +py_cobjecttypes(unique int obj : @py_cobject ref, + int typeof : @py_cobject ref); + +py_cobjectnames(unique int obj : @py_cobject ref, + varchar(1) name : string ref); + +/* Kind should be 0 for introspection, > 0 from source, as follows: + 1 from C extension source + */ +py_cobject_sources(int obj : @py_cobject ref, + int kind : int ref); + +py_cmembers_versioned(int object : @py_cobject ref, + varchar(1) name : string ref, + int member : @py_cobject ref, + varchar(1) version : string ref); + +py_citems(int object : @py_cobject ref, + int index : int ref, + int member : @py_cobject ref); + +ext_argtype(int funcid : @py_object ref, + int arg : int ref, + int typeid : @py_object ref); + +ext_rettype(int funcid : @py_object ref, + int typeid : @py_object ref); + +ext_proptype(int propid : @py_object ref, + int typeid : @py_object ref); + +ext_argreturn(int funcid : @py_object ref, + int arg : int ref); + +py_special_objects(unique int obj : @py_cobject ref, + unique varchar(1) name : string ref); + +py_decorated_object(int object : @py_object ref, + int level: int ref); + +@py_object = @py_cobject | @py_flow_node; + +@py_source_element = @py_ast_node | @container; diff --git a/python/downgrades/5af903da088e3746aa283700a43a779302453523/py_exprs.ql b/python/downgrades/5af903da088e3746aa283700a43a779302453523/py_exprs.ql new file mode 100644 index 000000000000..567ceec31caa --- /dev/null +++ b/python/downgrades/5af903da088e3746aa283700a43a779302453523/py_exprs.ql @@ -0,0 +1,42 @@ +// We must wrap the DB types, as these cannot appear in argument lists +class TypeParameter_ extends @py_type_parameter { + string toString() { result = "TypeParameter" } +} + +class Expr_ extends @py_expr { + string toString() { result = "Expr" } +} + +class ExprParent_ extends @py_expr_parent { + string toString() { result = "ExprParent" } +} + +class TypeVar_ extends @py_TypeVar, TypeParameter_ { + override string toString() { result = "TypeVar" } +} + +class TypeVarTuple_ extends @py_TypeVarTuple, TypeParameter_ { + override string toString() { result = "TypeVarTuple" } +} + +class ParamSpec_ extends @py_ParamSpec, TypeParameter_ { + override string toString() { result = "ParamSpec" } +} + +// From the dbscheme: +// py_exprs(unique int id : @py_expr, +// int kind: int ref, +// int parent : @py_expr_parent ref, +// int idx : int ref); +query predicate py_exprs_without_type_parameter_defaults( + Expr_ id, int kind, ExprParent_ parent, int idx +) { + py_exprs(id, kind, parent, idx) and + // From the dbscheme + // /* ParamSpec.default = 2, expr */ + // /* TypeVar.default = 3, expr */ + // /* TypeVarTuple.default = 2, expr */ + (parent instanceof ParamSpec_ implies idx != 2) and + (parent instanceof TypeVar_ implies idx != 3) and + (parent instanceof TypeVarTuple_ implies idx != 2) +} diff --git a/python/downgrades/5af903da088e3746aa283700a43a779302453523/semmlecode.python.dbscheme b/python/downgrades/5af903da088e3746aa283700a43a779302453523/semmlecode.python.dbscheme new file mode 100644 index 000000000000..728c6d65e61d --- /dev/null +++ b/python/downgrades/5af903da088e3746aa283700a43a779302453523/semmlecode.python.dbscheme @@ -0,0 +1,1233 @@ +/* + * This dbscheme is auto-generated by 'semmle/dbscheme_gen.py'. + * WARNING: Any modifications to this file will be lost. + * Relations can be changed by modifying master.py or + * by adding rules to dbscheme.template + */ + +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2020-07-02 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/*- DEPRECATED: External defects and metrics -*/ + +externalDefects( + unique int id : @externalDefect, + varchar(900) queryPath : string ref, + int location : @location ref, + varchar(900) message : string ref, + float severity : float ref +); + +externalMetrics( + unique int id : @externalMetric, + varchar(900) queryPath : string ref, + int location : @location ref, + float value : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- DEPRECATED: Snapshot date -*/ + +snapshotDate(unique date snapshotDate : date ref); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- DEPRECATED: Duplicate code -*/ + +duplicateCode( + unique int id : @duplication, + string relativePath : string ref, + int equivClass : int ref +); + +similarCode( + unique int id : @similarity, + string relativePath : string ref, + int equivClass : int ref +); + +@duplication_or_similarity = @duplication | @similarity + +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref +); + +/*- DEPRECATED: Version control data -*/ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Python dbscheme -*/ + +/* + * Line metrics + */ +py_codelines(int id : @py_scope ref, + int count : int ref); + +py_commentlines(int id : @py_scope ref, + int count : int ref); + +py_docstringlines(int id : @py_scope ref, + int count : int ref); + +py_alllines(int id : @py_scope ref, + int count : int ref); + +/**************************** + Python dbscheme +****************************/ + +@sourceline = @file | @py_Module | @xmllocatable; + +@location = @location_ast | @location_default ; + +locations_ast(unique int id: @location_ast, + int module: @py_Module ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +file_contents(unique int file: @file ref, string contents: string ref); + +py_module_path(int module: @py_Module ref, int file: @container ref); + +variable(unique int id : @py_variable, + int scope : @py_scope ref, + varchar(1) name : string ref); + +py_line_lengths(unique int id : @py_line, + int file: @py_Module ref, + int line : int ref, + int length : int ref); + +py_extracted_version(int module : @py_Module ref, + varchar(1) version : string ref); + +/* AUTO GENERATED PART STARTS HERE */ + + +/* AnnAssign.location = 0, location */ +/* AnnAssign.value = 1, expr */ +/* AnnAssign.annotation = 2, expr */ +/* AnnAssign.target = 3, expr */ + +/* Assert.location = 0, location */ +/* Assert.test = 1, expr */ +/* Assert.msg = 2, expr */ + +/* Assign.location = 0, location */ +/* Assign.value = 1, expr */ +/* Assign.targets = 2, expr_list */ + +/* AssignExpr.location = 0, location */ +/* AssignExpr.parenthesised = 1, bool */ +/* AssignExpr.value = 2, expr */ +/* AssignExpr.target = 3, expr */ + +/* Attribute.location = 0, location */ +/* Attribute.parenthesised = 1, bool */ +/* Attribute.value = 2, expr */ +/* Attribute.attr = 3, str */ +/* Attribute.ctx = 4, expr_context */ + +/* AugAssign.location = 0, location */ +/* AugAssign.operation = 1, BinOp */ + +/* Await.location = 0, location */ +/* Await.parenthesised = 1, bool */ +/* Await.value = 2, expr */ + +/* BinaryExpr.location = 0, location */ +/* BinaryExpr.parenthesised = 1, bool */ +/* BinaryExpr.left = 2, expr */ +/* BinaryExpr.op = 3, operator */ +/* BinaryExpr.right = 4, expr */ +/* BinaryExpr = AugAssign */ + +/* BoolExpr.location = 0, location */ +/* BoolExpr.parenthesised = 1, bool */ +/* BoolExpr.op = 2, boolop */ +/* BoolExpr.values = 3, expr_list */ + +/* Break.location = 0, location */ + +/* Bytes.location = 0, location */ +/* Bytes.parenthesised = 1, bool */ +/* Bytes.s = 2, bytes */ +/* Bytes.prefix = 3, bytes */ +/* Bytes.implicitly_concatenated_parts = 4, StringPart_list */ + +/* Call.location = 0, location */ +/* Call.parenthesised = 1, bool */ +/* Call.func = 2, expr */ +/* Call.positional_args = 3, expr_list */ +/* Call.named_args = 4, dict_item_list */ + +/* Case.location = 0, location */ +/* Case.pattern = 1, pattern */ +/* Case.guard = 2, expr */ +/* Case.body = 3, stmt_list */ + +/* Class.name = 0, str */ +/* Class.body = 1, stmt_list */ +/* Class = ClassExpr */ + +/* ClassExpr.location = 0, location */ +/* ClassExpr.parenthesised = 1, bool */ +/* ClassExpr.name = 2, str */ +/* ClassExpr.bases = 3, expr_list */ +/* ClassExpr.keywords = 4, dict_item_list */ +/* ClassExpr.inner_scope = 5, Class */ +/* ClassExpr.type_parameters = 6, type_parameter_list */ + +/* Compare.location = 0, location */ +/* Compare.parenthesised = 1, bool */ +/* Compare.left = 2, expr */ +/* Compare.ops = 3, cmpop_list */ +/* Compare.comparators = 4, expr_list */ + +/* Continue.location = 0, location */ + +/* Delete.location = 0, location */ +/* Delete.targets = 1, expr_list */ + +/* Dict.location = 0, location */ +/* Dict.parenthesised = 1, bool */ +/* Dict.items = 2, dict_item_list */ + +/* DictComp.location = 0, location */ +/* DictComp.parenthesised = 1, bool */ +/* DictComp.function = 2, Function */ +/* DictComp.iterable = 3, expr */ + +/* DictUnpacking.location = 0, location */ +/* DictUnpacking.value = 1, expr */ + +/* Ellipsis.location = 0, location */ +/* Ellipsis.parenthesised = 1, bool */ + +/* ExceptGroupStmt.location = 0, location */ +/* ExceptGroupStmt.type = 1, expr */ +/* ExceptGroupStmt.name = 2, expr */ +/* ExceptGroupStmt.body = 3, stmt_list */ + +/* ExceptStmt.location = 0, location */ +/* ExceptStmt.type = 1, expr */ +/* ExceptStmt.name = 2, expr */ +/* ExceptStmt.body = 3, stmt_list */ + +/* Exec.location = 0, location */ +/* Exec.body = 1, expr */ +/* Exec.globals = 2, expr */ +/* Exec.locals = 3, expr */ + +/* ExprStmt.location = 0, location */ +/* ExprStmt.value = 1, expr */ + +/* Filter.location = 0, location */ +/* Filter.parenthesised = 1, bool */ +/* Filter.value = 2, expr */ +/* Filter.filter = 3, expr */ + +/* For.location = 0, location */ +/* For.target = 1, expr */ +/* For.iter = 2, expr */ +/* For.body = 3, stmt_list */ +/* For.orelse = 4, stmt_list */ +/* For.is_async = 5, bool */ + +/* FormattedValue.location = 0, location */ +/* FormattedValue.parenthesised = 1, bool */ +/* FormattedValue.value = 2, expr */ +/* FormattedValue.conversion = 3, str */ +/* FormattedValue.format_spec = 4, JoinedStr */ + +/* Function.name = 0, str */ +/* Function.args = 1, parameter_list */ +/* Function.vararg = 2, expr */ +/* Function.kwonlyargs = 3, expr_list */ +/* Function.kwarg = 4, expr */ +/* Function.body = 5, stmt_list */ +/* Function.is_async = 6, bool */ +/* Function.type_parameters = 7, type_parameter_list */ +/* Function = FunctionParent */ + +/* FunctionExpr.location = 0, location */ +/* FunctionExpr.parenthesised = 1, bool */ +/* FunctionExpr.name = 2, str */ +/* FunctionExpr.args = 3, arguments */ +/* FunctionExpr.returns = 4, expr */ +/* FunctionExpr.inner_scope = 5, Function */ + +/* GeneratorExp.location = 0, location */ +/* GeneratorExp.parenthesised = 1, bool */ +/* GeneratorExp.function = 2, Function */ +/* GeneratorExp.iterable = 3, expr */ + +/* Global.location = 0, location */ +/* Global.names = 1, str_list */ + +/* Guard.location = 0, location */ +/* Guard.parenthesised = 1, bool */ +/* Guard.test = 2, expr */ + +/* If.location = 0, location */ +/* If.test = 1, expr */ +/* If.body = 2, stmt_list */ +/* If.orelse = 3, stmt_list */ + +/* IfExp.location = 0, location */ +/* IfExp.parenthesised = 1, bool */ +/* IfExp.test = 2, expr */ +/* IfExp.body = 3, expr */ +/* IfExp.orelse = 4, expr */ + +/* Import.location = 0, location */ +/* Import.names = 1, alias_list */ + +/* ImportExpr.location = 0, location */ +/* ImportExpr.parenthesised = 1, bool */ +/* ImportExpr.level = 2, int */ +/* ImportExpr.name = 3, str */ +/* ImportExpr.top = 4, bool */ + +/* ImportStar.location = 0, location */ +/* ImportStar.module = 1, expr */ + +/* ImportMember.location = 0, location */ +/* ImportMember.parenthesised = 1, bool */ +/* ImportMember.module = 2, expr */ +/* ImportMember.name = 3, str */ + +/* Fstring.location = 0, location */ +/* Fstring.parenthesised = 1, bool */ +/* Fstring.values = 2, expr_list */ +/* Fstring = FormattedValue */ + +/* KeyValuePair.location = 0, location */ +/* KeyValuePair.value = 1, expr */ +/* KeyValuePair.key = 2, expr */ + +/* Lambda.location = 0, location */ +/* Lambda.parenthesised = 1, bool */ +/* Lambda.args = 2, arguments */ +/* Lambda.inner_scope = 3, Function */ + +/* List.location = 0, location */ +/* List.parenthesised = 1, bool */ +/* List.elts = 2, expr_list */ +/* List.ctx = 3, expr_context */ + +/* ListComp.location = 0, location */ +/* ListComp.parenthesised = 1, bool */ +/* ListComp.function = 2, Function */ +/* ListComp.iterable = 3, expr */ +/* ListComp.generators = 4, comprehension_list */ +/* ListComp.elt = 5, expr */ + +/* MatchStmt.location = 0, location */ +/* MatchStmt.subject = 1, expr */ +/* MatchStmt.cases = 2, stmt_list */ + +/* MatchAsPattern.location = 0, location */ +/* MatchAsPattern.parenthesised = 1, bool */ +/* MatchAsPattern.pattern = 2, pattern */ +/* MatchAsPattern.alias = 3, expr */ + +/* MatchCapturePattern.location = 0, location */ +/* MatchCapturePattern.parenthesised = 1, bool */ +/* MatchCapturePattern.variable = 2, expr */ + +/* MatchClassPattern.location = 0, location */ +/* MatchClassPattern.parenthesised = 1, bool */ +/* MatchClassPattern.class = 2, expr */ +/* MatchClassPattern.class_name = 3, expr */ +/* MatchClassPattern.positional = 4, pattern_list */ +/* MatchClassPattern.keyword = 5, pattern_list */ + +/* MatchDoubleStarPattern.location = 0, location */ +/* MatchDoubleStarPattern.parenthesised = 1, bool */ +/* MatchDoubleStarPattern.target = 2, pattern */ + +/* MatchKeyValuePattern.location = 0, location */ +/* MatchKeyValuePattern.parenthesised = 1, bool */ +/* MatchKeyValuePattern.key = 2, pattern */ +/* MatchKeyValuePattern.value = 3, pattern */ + +/* MatchKeywordPattern.location = 0, location */ +/* MatchKeywordPattern.parenthesised = 1, bool */ +/* MatchKeywordPattern.attribute = 2, expr */ +/* MatchKeywordPattern.value = 3, pattern */ + +/* MatchLiteralPattern.location = 0, location */ +/* MatchLiteralPattern.parenthesised = 1, bool */ +/* MatchLiteralPattern.literal = 2, expr */ + +/* MatchMappingPattern.location = 0, location */ +/* MatchMappingPattern.parenthesised = 1, bool */ +/* MatchMappingPattern.mappings = 2, pattern_list */ + +/* MatchOrPattern.location = 0, location */ +/* MatchOrPattern.parenthesised = 1, bool */ +/* MatchOrPattern.patterns = 2, pattern_list */ + +/* MatchSequencePattern.location = 0, location */ +/* MatchSequencePattern.parenthesised = 1, bool */ +/* MatchSequencePattern.patterns = 2, pattern_list */ + +/* MatchStarPattern.location = 0, location */ +/* MatchStarPattern.parenthesised = 1, bool */ +/* MatchStarPattern.target = 2, pattern */ + +/* MatchValuePattern.location = 0, location */ +/* MatchValuePattern.parenthesised = 1, bool */ +/* MatchValuePattern.value = 2, expr */ + +/* MatchWildcardPattern.location = 0, location */ +/* MatchWildcardPattern.parenthesised = 1, bool */ + +/* Module.name = 0, str */ +/* Module.hash = 1, str */ +/* Module.body = 2, stmt_list */ +/* Module.kind = 3, str */ + +/* Name.location = 0, location */ +/* Name.parenthesised = 1, bool */ +/* Name.variable = 2, variable */ +/* Name.ctx = 3, expr_context */ +/* Name = ParameterList */ + +/* Nonlocal.location = 0, location */ +/* Nonlocal.names = 1, str_list */ + +/* Num.location = 0, location */ +/* Num.parenthesised = 1, bool */ +/* Num.n = 2, number */ +/* Num.text = 3, number */ + +/* ParamSpec.location = 0, location */ +/* ParamSpec.name = 1, expr */ + +/* Pass.location = 0, location */ + +/* PlaceHolder.location = 0, location */ +/* PlaceHolder.parenthesised = 1, bool */ +/* PlaceHolder.variable = 2, variable */ +/* PlaceHolder.ctx = 3, expr_context */ + +/* Print.location = 0, location */ +/* Print.dest = 1, expr */ +/* Print.values = 2, expr_list */ +/* Print.nl = 3, bool */ + +/* Raise.location = 0, location */ +/* Raise.exc = 1, expr */ +/* Raise.cause = 2, expr */ +/* Raise.type = 3, expr */ +/* Raise.inst = 4, expr */ +/* Raise.tback = 5, expr */ + +/* Repr.location = 0, location */ +/* Repr.parenthesised = 1, bool */ +/* Repr.value = 2, expr */ + +/* Return.location = 0, location */ +/* Return.value = 1, expr */ + +/* Set.location = 0, location */ +/* Set.parenthesised = 1, bool */ +/* Set.elts = 2, expr_list */ + +/* SetComp.location = 0, location */ +/* SetComp.parenthesised = 1, bool */ +/* SetComp.function = 2, Function */ +/* SetComp.iterable = 3, expr */ + +/* Slice.location = 0, location */ +/* Slice.parenthesised = 1, bool */ +/* Slice.start = 2, expr */ +/* Slice.stop = 3, expr */ +/* Slice.step = 4, expr */ + +/* SpecialOperation.location = 0, location */ +/* SpecialOperation.parenthesised = 1, bool */ +/* SpecialOperation.name = 2, str */ +/* SpecialOperation.arguments = 3, expr_list */ + +/* Starred.location = 0, location */ +/* Starred.parenthesised = 1, bool */ +/* Starred.value = 2, expr */ +/* Starred.ctx = 3, expr_context */ + +/* Str.location = 0, location */ +/* Str.parenthesised = 1, bool */ +/* Str.s = 2, str */ +/* Str.prefix = 3, str */ +/* Str.implicitly_concatenated_parts = 4, StringPart_list */ + +/* StringPart.text = 0, str */ +/* StringPart.location = 1, location */ +/* StringPart = StringPartList */ +/* StringPartList = BytesOrStr */ + +/* Subscript.location = 0, location */ +/* Subscript.parenthesised = 1, bool */ +/* Subscript.value = 2, expr */ +/* Subscript.index = 3, expr */ +/* Subscript.ctx = 4, expr_context */ + +/* TemplateDottedNotation.location = 0, location */ +/* TemplateDottedNotation.parenthesised = 1, bool */ +/* TemplateDottedNotation.value = 2, expr */ +/* TemplateDottedNotation.attr = 3, str */ +/* TemplateDottedNotation.ctx = 4, expr_context */ + +/* TemplateWrite.location = 0, location */ +/* TemplateWrite.value = 1, expr */ + +/* Try.location = 0, location */ +/* Try.body = 1, stmt_list */ +/* Try.orelse = 2, stmt_list */ +/* Try.handlers = 3, stmt_list */ +/* Try.finalbody = 4, stmt_list */ + +/* Tuple.location = 0, location */ +/* Tuple.parenthesised = 1, bool */ +/* Tuple.elts = 2, expr_list */ +/* Tuple.ctx = 3, expr_context */ +/* Tuple = ParameterList */ + +/* TypeAlias.location = 0, location */ +/* TypeAlias.name = 1, expr */ +/* TypeAlias.type_parameters = 2, type_parameter_list */ +/* TypeAlias.value = 3, expr */ + +/* TypeVar.location = 0, location */ +/* TypeVar.name = 1, expr */ +/* TypeVar.bound = 2, expr */ + +/* TypeVarTuple.location = 0, location */ +/* TypeVarTuple.name = 1, expr */ + +/* UnaryExpr.location = 0, location */ +/* UnaryExpr.parenthesised = 1, bool */ +/* UnaryExpr.op = 2, unaryop */ +/* UnaryExpr.operand = 3, expr */ + +/* While.location = 0, location */ +/* While.test = 1, expr */ +/* While.body = 2, stmt_list */ +/* While.orelse = 3, stmt_list */ + +/* With.location = 0, location */ +/* With.context_expr = 1, expr */ +/* With.optional_vars = 2, expr */ +/* With.body = 3, stmt_list */ +/* With.is_async = 4, bool */ + +/* Yield.location = 0, location */ +/* Yield.parenthesised = 1, bool */ +/* Yield.value = 2, expr */ + +/* YieldFrom.location = 0, location */ +/* YieldFrom.parenthesised = 1, bool */ +/* YieldFrom.value = 2, expr */ + +/* Alias.value = 0, expr */ +/* Alias.asname = 1, expr */ +/* Alias = AliasList */ +/* AliasList = Import */ + +/* Arguments.kw_defaults = 0, expr_list */ +/* Arguments.defaults = 1, expr_list */ +/* Arguments.annotations = 2, expr_list */ +/* Arguments.varargannotation = 3, expr */ +/* Arguments.kwargannotation = 4, expr */ +/* Arguments.kw_annotations = 5, expr_list */ +/* Arguments = ArgumentsParent */ +/* boolean = BoolParent */ +/* Boolop = BoolExpr */ +/* string = Bytes */ +/* Cmpop = CmpopList */ +/* CmpopList = Compare */ + +/* Comprehension.location = 0, location */ +/* Comprehension.iter = 1, expr */ +/* Comprehension.target = 2, expr */ +/* Comprehension.ifs = 3, expr_list */ +/* Comprehension = ComprehensionList */ +/* ComprehensionList = ListComp */ +/* DictItem = DictItemList */ +/* DictItemList = DictItemListParent */ + +/* Expr.location = 0, location */ +/* Expr.parenthesised = 1, bool */ +/* Expr = ExprParent */ +/* ExprContext = ExprContextParent */ +/* ExprList = ExprListParent */ +/* int = ImportExpr */ + +/* Keyword.location = 0, location */ +/* Keyword.value = 1, expr */ +/* Keyword.arg = 2, str */ +/* Location = LocationParent */ +/* string = Num */ +/* Operator = BinaryExpr */ +/* ParameterList = Function */ + +/* Pattern.location = 0, location */ +/* Pattern.parenthesised = 1, bool */ +/* Pattern = PatternParent */ +/* PatternList = PatternListParent */ + +/* Stmt.location = 0, location */ +/* Stmt = StmtList */ +/* StmtList = StmtListParent */ +/* string = StrParent */ +/* StringList = StrListParent */ + +/* TypeParameter.location = 0, location */ +/* TypeParameter = TypeParameterList */ +/* TypeParameterList = TypeParameterListParent */ +/* Unaryop = UnaryExpr */ +/* Variable = VariableParent */ +py_Classes(unique int id : @py_Class, + unique int parent : @py_ClassExpr ref); + +py_Functions(unique int id : @py_Function, + unique int parent : @py_Function_parent ref); + +py_Modules(unique int id : @py_Module); + +py_StringParts(unique int id : @py_StringPart, + int parent : @py_StringPart_list ref, + int idx : int ref); + +py_StringPart_lists(unique int id : @py_StringPart_list, + unique int parent : @py_Bytes_or_Str ref); + +py_aliases(unique int id : @py_alias, + int parent : @py_alias_list ref, + int idx : int ref); + +py_alias_lists(unique int id : @py_alias_list, + unique int parent : @py_Import ref); + +py_arguments(unique int id : @py_arguments, + unique int parent : @py_arguments_parent ref); + +py_bools(int parent : @py_bool_parent ref, + int idx : int ref); + +py_boolops(unique int id : @py_boolop, + int kind: int ref, + unique int parent : @py_BoolExpr ref); + +py_bytes(varchar(1) id : string ref, + int parent : @py_Bytes ref, + int idx : int ref); + +py_cmpops(unique int id : @py_cmpop, + int kind: int ref, + int parent : @py_cmpop_list ref, + int idx : int ref); + +py_cmpop_lists(unique int id : @py_cmpop_list, + unique int parent : @py_Compare ref); + +py_comprehensions(unique int id : @py_comprehension, + int parent : @py_comprehension_list ref, + int idx : int ref); + +py_comprehension_lists(unique int id : @py_comprehension_list, + unique int parent : @py_ListComp ref); + +py_dict_items(unique int id : @py_dict_item, + int kind: int ref, + int parent : @py_dict_item_list ref, + int idx : int ref); + +py_dict_item_lists(unique int id : @py_dict_item_list, + unique int parent : @py_dict_item_list_parent ref); + +py_exprs(unique int id : @py_expr, + int kind: int ref, + int parent : @py_expr_parent ref, + int idx : int ref); + +py_expr_contexts(unique int id : @py_expr_context, + int kind: int ref, + unique int parent : @py_expr_context_parent ref); + +py_expr_lists(unique int id : @py_expr_list, + int parent : @py_expr_list_parent ref, + int idx : int ref); + +py_ints(int id : int ref, + unique int parent : @py_ImportExpr ref); + +py_locations(unique int id : @location ref, + unique int parent : @py_location_parent ref); + +py_numbers(varchar(1) id : string ref, + int parent : @py_Num ref, + int idx : int ref); + +py_operators(unique int id : @py_operator, + int kind: int ref, + unique int parent : @py_BinaryExpr ref); + +py_parameter_lists(unique int id : @py_parameter_list, + unique int parent : @py_Function ref); + +py_patterns(unique int id : @py_pattern, + int kind: int ref, + int parent : @py_pattern_parent ref, + int idx : int ref); + +py_pattern_lists(unique int id : @py_pattern_list, + int parent : @py_pattern_list_parent ref, + int idx : int ref); + +py_stmts(unique int id : @py_stmt, + int kind: int ref, + int parent : @py_stmt_list ref, + int idx : int ref); + +py_stmt_lists(unique int id : @py_stmt_list, + int parent : @py_stmt_list_parent ref, + int idx : int ref); + +py_strs(varchar(1) id : string ref, + int parent : @py_str_parent ref, + int idx : int ref); + +py_str_lists(unique int id : @py_str_list, + unique int parent : @py_str_list_parent ref); + +py_type_parameters(unique int id : @py_type_parameter, + int kind: int ref, + int parent : @py_type_parameter_list ref, + int idx : int ref); + +py_type_parameter_lists(unique int id : @py_type_parameter_list, + unique int parent : @py_type_parameter_list_parent ref); + +py_unaryops(unique int id : @py_unaryop, + int kind: int ref, + unique int parent : @py_UnaryExpr ref); + +py_variables(int id : @py_variable ref, + unique int parent : @py_variable_parent ref); + +case @py_boolop.kind of + 0 = @py_And +| 1 = @py_Or; + +case @py_cmpop.kind of + 0 = @py_Eq +| 1 = @py_Gt +| 2 = @py_GtE +| 3 = @py_In +| 4 = @py_Is +| 5 = @py_IsNot +| 6 = @py_Lt +| 7 = @py_LtE +| 8 = @py_NotEq +| 9 = @py_NotIn; + +case @py_dict_item.kind of + 0 = @py_DictUnpacking +| 1 = @py_KeyValuePair +| 2 = @py_keyword; + +case @py_expr.kind of + 0 = @py_Attribute +| 1 = @py_BinaryExpr +| 2 = @py_BoolExpr +| 3 = @py_Bytes +| 4 = @py_Call +| 5 = @py_ClassExpr +| 6 = @py_Compare +| 7 = @py_Dict +| 8 = @py_DictComp +| 9 = @py_Ellipsis +| 10 = @py_FunctionExpr +| 11 = @py_GeneratorExp +| 12 = @py_IfExp +| 13 = @py_ImportExpr +| 14 = @py_ImportMember +| 15 = @py_Lambda +| 16 = @py_List +| 17 = @py_ListComp +| 18 = @py_Guard +| 19 = @py_Name +| 20 = @py_Num +| 21 = @py_Repr +| 22 = @py_Set +| 23 = @py_SetComp +| 24 = @py_Slice +| 25 = @py_Starred +| 26 = @py_Str +| 27 = @py_Subscript +| 28 = @py_Tuple +| 29 = @py_UnaryExpr +| 30 = @py_Yield +| 31 = @py_YieldFrom +| 32 = @py_TemplateDottedNotation +| 33 = @py_Filter +| 34 = @py_PlaceHolder +| 35 = @py_Await +| 36 = @py_Fstring +| 37 = @py_FormattedValue +| 38 = @py_AssignExpr +| 39 = @py_SpecialOperation; + +case @py_expr_context.kind of + 0 = @py_AugLoad +| 1 = @py_AugStore +| 2 = @py_Del +| 3 = @py_Load +| 4 = @py_Param +| 5 = @py_Store; + +case @py_operator.kind of + 0 = @py_Add +| 1 = @py_BitAnd +| 2 = @py_BitOr +| 3 = @py_BitXor +| 4 = @py_Div +| 5 = @py_FloorDiv +| 6 = @py_LShift +| 7 = @py_Mod +| 8 = @py_Mult +| 9 = @py_Pow +| 10 = @py_RShift +| 11 = @py_Sub +| 12 = @py_MatMult; + +case @py_pattern.kind of + 0 = @py_MatchAsPattern +| 1 = @py_MatchOrPattern +| 2 = @py_MatchLiteralPattern +| 3 = @py_MatchCapturePattern +| 4 = @py_MatchWildcardPattern +| 5 = @py_MatchValuePattern +| 6 = @py_MatchSequencePattern +| 7 = @py_MatchStarPattern +| 8 = @py_MatchMappingPattern +| 9 = @py_MatchDoubleStarPattern +| 10 = @py_MatchKeyValuePattern +| 11 = @py_MatchClassPattern +| 12 = @py_MatchKeywordPattern; + +case @py_stmt.kind of + 0 = @py_Assert +| 1 = @py_Assign +| 2 = @py_AugAssign +| 3 = @py_Break +| 4 = @py_Continue +| 5 = @py_Delete +| 6 = @py_ExceptStmt +| 7 = @py_ExceptGroupStmt +| 8 = @py_Exec +| 9 = @py_Expr_stmt +| 10 = @py_For +| 11 = @py_Global +| 12 = @py_If +| 13 = @py_Import +| 14 = @py_ImportStar +| 15 = @py_MatchStmt +| 16 = @py_Case +| 17 = @py_Nonlocal +| 18 = @py_Pass +| 19 = @py_Print +| 20 = @py_Raise +| 21 = @py_Return +| 22 = @py_Try +| 23 = @py_While +| 24 = @py_With +| 25 = @py_TemplateWrite +| 26 = @py_AnnAssign +| 27 = @py_TypeAlias; + +case @py_type_parameter.kind of + 0 = @py_ParamSpec +| 1 = @py_TypeVar +| 2 = @py_TypeVarTuple; + +case @py_unaryop.kind of + 0 = @py_Invert +| 1 = @py_Not +| 2 = @py_UAdd +| 3 = @py_USub; + +@py_Bytes_or_Str = @py_Bytes | @py_Str; + +@py_Function_parent = @py_DictComp | @py_FunctionExpr | @py_GeneratorExp | @py_Lambda | @py_ListComp | @py_SetComp; + +@py_arguments_parent = @py_FunctionExpr | @py_Lambda; + +@py_ast_node = @py_Class | @py_Function | @py_Module | @py_StringPart | @py_comprehension | @py_dict_item | @py_expr | @py_pattern | @py_stmt | @py_type_parameter; + +@py_bool_parent = @py_For | @py_Function | @py_Print | @py_With | @py_expr | @py_pattern; + +@py_dict_item_list_parent = @py_Call | @py_ClassExpr | @py_Dict; + +@py_expr_context_parent = @py_Attribute | @py_List | @py_Name | @py_PlaceHolder | @py_Starred | @py_Subscript | @py_TemplateDottedNotation | @py_Tuple; + +@py_expr_list_parent = @py_Assign | @py_BoolExpr | @py_Call | @py_ClassExpr | @py_Compare | @py_Delete | @py_Fstring | @py_Function | @py_List | @py_Print | @py_Set | @py_SpecialOperation | @py_Tuple | @py_arguments | @py_comprehension; + +@py_expr_or_stmt = @py_expr | @py_stmt; + +@py_expr_parent = @py_AnnAssign | @py_Assert | @py_Assign | @py_AssignExpr | @py_Attribute | @py_AugAssign | @py_Await | @py_BinaryExpr | @py_Call | @py_Case | @py_Compare | @py_DictComp | @py_DictUnpacking | @py_ExceptGroupStmt | @py_ExceptStmt | @py_Exec | @py_Expr_stmt | @py_Filter | @py_For | @py_FormattedValue | @py_Function | @py_FunctionExpr | @py_GeneratorExp | @py_Guard | @py_If | @py_IfExp | @py_ImportMember | @py_ImportStar | @py_KeyValuePair | @py_ListComp | @py_MatchAsPattern | @py_MatchCapturePattern | @py_MatchClassPattern | @py_MatchKeywordPattern | @py_MatchLiteralPattern | @py_MatchStmt | @py_MatchValuePattern | @py_ParamSpec | @py_Print | @py_Raise | @py_Repr | @py_Return | @py_SetComp | @py_Slice | @py_Starred | @py_Subscript | @py_TemplateDottedNotation | @py_TemplateWrite | @py_TypeAlias | @py_TypeVar | @py_TypeVarTuple | @py_UnaryExpr | @py_While | @py_With | @py_Yield | @py_YieldFrom | @py_alias | @py_arguments | @py_comprehension | @py_expr_list | @py_keyword | @py_parameter_list; + +@py_location_parent = @py_DictUnpacking | @py_KeyValuePair | @py_StringPart | @py_comprehension | @py_expr | @py_keyword | @py_pattern | @py_stmt | @py_type_parameter; + +@py_parameter = @py_Name | @py_Tuple; + +@py_pattern_list_parent = @py_MatchClassPattern | @py_MatchMappingPattern | @py_MatchOrPattern | @py_MatchSequencePattern; + +@py_pattern_parent = @py_Case | @py_MatchAsPattern | @py_MatchDoubleStarPattern | @py_MatchKeyValuePattern | @py_MatchKeywordPattern | @py_MatchStarPattern | @py_pattern_list; + +@py_scope = @py_Class | @py_Function | @py_Module; + +@py_stmt_list_parent = @py_Case | @py_Class | @py_ExceptGroupStmt | @py_ExceptStmt | @py_For | @py_Function | @py_If | @py_MatchStmt | @py_Module | @py_Try | @py_While | @py_With; + +@py_str_list_parent = @py_Global | @py_Nonlocal; + +@py_str_parent = @py_Attribute | @py_Class | @py_ClassExpr | @py_FormattedValue | @py_Function | @py_FunctionExpr | @py_ImportExpr | @py_ImportMember | @py_Module | @py_SpecialOperation | @py_Str | @py_StringPart | @py_TemplateDottedNotation | @py_keyword | @py_str_list; + +@py_type_parameter_list_parent = @py_ClassExpr | @py_Function | @py_TypeAlias; + +@py_variable_parent = @py_Name | @py_PlaceHolder; + + +/* + * End of auto-generated part + */ + + + +/* Map relative names to absolute names for imports */ +py_absolute_names(int module : @py_Module ref, + varchar(1) relname : string ref, + varchar(1) absname : string ref); + +py_exports(int id : @py_Module ref, + varchar(1) name : string ref); + +/* Successor information */ +py_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_true_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_exception_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_false_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_flow_bb_node(unique int flownode : @py_flow_node, + int realnode : @py_ast_node ref, + int basicblock : @py_flow_node ref, + int index : int ref); + +py_scope_flow(int flow : @py_flow_node ref, + int scope : @py_scope ref, + int kind : int ref); + +py_idoms(unique int node : @py_flow_node ref, + int immediate_dominator : @py_flow_node ref); + +py_ssa_phi(int phi : @py_ssa_var ref, + int arg: @py_ssa_var ref); + +py_ssa_var(unique int id : @py_ssa_var, + int var : @py_variable ref); + +py_ssa_use(int node: @py_flow_node ref, + int var : @py_ssa_var ref); + +py_ssa_defn(unique int id : @py_ssa_var ref, + int node: @py_flow_node ref); + +@py_base_var = @py_variable | @py_ssa_var; + +py_scopes(unique int node : @py_expr_or_stmt ref, + int scope : @py_scope ref); + +py_scope_location(unique int id : @location ref, + unique int scope : @py_scope ref); + +py_flags_versioned(varchar(1) name : string ref, + varchar(1) value : string ref, + varchar(1) version : string ref); + +py_syntax_error_versioned(unique int id : @location ref, + varchar(1) message : string ref, + varchar(1) version : string ref); + +py_comments(unique int id : @py_comment, + varchar(1) text : string ref, + unique int location : @location ref); + +/* Type information support */ + +py_cobjects(unique int obj : @py_cobject); + +py_cobjecttypes(unique int obj : @py_cobject ref, + int typeof : @py_cobject ref); + +py_cobjectnames(unique int obj : @py_cobject ref, + varchar(1) name : string ref); + +/* Kind should be 0 for introspection, > 0 from source, as follows: + 1 from C extension source + */ +py_cobject_sources(int obj : @py_cobject ref, + int kind : int ref); + +py_cmembers_versioned(int object : @py_cobject ref, + varchar(1) name : string ref, + int member : @py_cobject ref, + varchar(1) version : string ref); + +py_citems(int object : @py_cobject ref, + int index : int ref, + int member : @py_cobject ref); + +ext_argtype(int funcid : @py_object ref, + int arg : int ref, + int typeid : @py_object ref); + +ext_rettype(int funcid : @py_object ref, + int typeid : @py_object ref); + +ext_proptype(int propid : @py_object ref, + int typeid : @py_object ref); + +ext_argreturn(int funcid : @py_object ref, + int arg : int ref); + +py_special_objects(unique int obj : @py_cobject ref, + unique varchar(1) name : string ref); + +py_decorated_object(int object : @py_object ref, + int level: int ref); + +@py_object = @py_cobject | @py_flow_node; + +@py_source_element = @py_ast_node | @container; diff --git a/python/downgrades/5af903da088e3746aa283700a43a779302453523/upgrade.properties b/python/downgrades/5af903da088e3746aa283700a43a779302453523/upgrade.properties new file mode 100644 index 000000000000..f9c39c31ea0a --- /dev/null +++ b/python/downgrades/5af903da088e3746aa283700a43a779302453523/upgrade.properties @@ -0,0 +1,3 @@ +description: Remove support for type parameter defaults. +compatibility: backwards +py_exprs.rel: run py_exprs.qlo py_exprs_without_type_parameter_defaults diff --git a/python/ql/lib/upgrades/728c6d65e61d808ae276013ebc15abc3a97aaef1/old.dbscheme b/python/ql/lib/upgrades/728c6d65e61d808ae276013ebc15abc3a97aaef1/old.dbscheme new file mode 100644 index 000000000000..728c6d65e61d --- /dev/null +++ b/python/ql/lib/upgrades/728c6d65e61d808ae276013ebc15abc3a97aaef1/old.dbscheme @@ -0,0 +1,1233 @@ +/* + * This dbscheme is auto-generated by 'semmle/dbscheme_gen.py'. + * WARNING: Any modifications to this file will be lost. + * Relations can be changed by modifying master.py or + * by adding rules to dbscheme.template + */ + +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2020-07-02 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/*- DEPRECATED: External defects and metrics -*/ + +externalDefects( + unique int id : @externalDefect, + varchar(900) queryPath : string ref, + int location : @location ref, + varchar(900) message : string ref, + float severity : float ref +); + +externalMetrics( + unique int id : @externalMetric, + varchar(900) queryPath : string ref, + int location : @location ref, + float value : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- DEPRECATED: Snapshot date -*/ + +snapshotDate(unique date snapshotDate : date ref); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- DEPRECATED: Duplicate code -*/ + +duplicateCode( + unique int id : @duplication, + string relativePath : string ref, + int equivClass : int ref +); + +similarCode( + unique int id : @similarity, + string relativePath : string ref, + int equivClass : int ref +); + +@duplication_or_similarity = @duplication | @similarity + +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref +); + +/*- DEPRECATED: Version control data -*/ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Python dbscheme -*/ + +/* + * Line metrics + */ +py_codelines(int id : @py_scope ref, + int count : int ref); + +py_commentlines(int id : @py_scope ref, + int count : int ref); + +py_docstringlines(int id : @py_scope ref, + int count : int ref); + +py_alllines(int id : @py_scope ref, + int count : int ref); + +/**************************** + Python dbscheme +****************************/ + +@sourceline = @file | @py_Module | @xmllocatable; + +@location = @location_ast | @location_default ; + +locations_ast(unique int id: @location_ast, + int module: @py_Module ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +file_contents(unique int file: @file ref, string contents: string ref); + +py_module_path(int module: @py_Module ref, int file: @container ref); + +variable(unique int id : @py_variable, + int scope : @py_scope ref, + varchar(1) name : string ref); + +py_line_lengths(unique int id : @py_line, + int file: @py_Module ref, + int line : int ref, + int length : int ref); + +py_extracted_version(int module : @py_Module ref, + varchar(1) version : string ref); + +/* AUTO GENERATED PART STARTS HERE */ + + +/* AnnAssign.location = 0, location */ +/* AnnAssign.value = 1, expr */ +/* AnnAssign.annotation = 2, expr */ +/* AnnAssign.target = 3, expr */ + +/* Assert.location = 0, location */ +/* Assert.test = 1, expr */ +/* Assert.msg = 2, expr */ + +/* Assign.location = 0, location */ +/* Assign.value = 1, expr */ +/* Assign.targets = 2, expr_list */ + +/* AssignExpr.location = 0, location */ +/* AssignExpr.parenthesised = 1, bool */ +/* AssignExpr.value = 2, expr */ +/* AssignExpr.target = 3, expr */ + +/* Attribute.location = 0, location */ +/* Attribute.parenthesised = 1, bool */ +/* Attribute.value = 2, expr */ +/* Attribute.attr = 3, str */ +/* Attribute.ctx = 4, expr_context */ + +/* AugAssign.location = 0, location */ +/* AugAssign.operation = 1, BinOp */ + +/* Await.location = 0, location */ +/* Await.parenthesised = 1, bool */ +/* Await.value = 2, expr */ + +/* BinaryExpr.location = 0, location */ +/* BinaryExpr.parenthesised = 1, bool */ +/* BinaryExpr.left = 2, expr */ +/* BinaryExpr.op = 3, operator */ +/* BinaryExpr.right = 4, expr */ +/* BinaryExpr = AugAssign */ + +/* BoolExpr.location = 0, location */ +/* BoolExpr.parenthesised = 1, bool */ +/* BoolExpr.op = 2, boolop */ +/* BoolExpr.values = 3, expr_list */ + +/* Break.location = 0, location */ + +/* Bytes.location = 0, location */ +/* Bytes.parenthesised = 1, bool */ +/* Bytes.s = 2, bytes */ +/* Bytes.prefix = 3, bytes */ +/* Bytes.implicitly_concatenated_parts = 4, StringPart_list */ + +/* Call.location = 0, location */ +/* Call.parenthesised = 1, bool */ +/* Call.func = 2, expr */ +/* Call.positional_args = 3, expr_list */ +/* Call.named_args = 4, dict_item_list */ + +/* Case.location = 0, location */ +/* Case.pattern = 1, pattern */ +/* Case.guard = 2, expr */ +/* Case.body = 3, stmt_list */ + +/* Class.name = 0, str */ +/* Class.body = 1, stmt_list */ +/* Class = ClassExpr */ + +/* ClassExpr.location = 0, location */ +/* ClassExpr.parenthesised = 1, bool */ +/* ClassExpr.name = 2, str */ +/* ClassExpr.bases = 3, expr_list */ +/* ClassExpr.keywords = 4, dict_item_list */ +/* ClassExpr.inner_scope = 5, Class */ +/* ClassExpr.type_parameters = 6, type_parameter_list */ + +/* Compare.location = 0, location */ +/* Compare.parenthesised = 1, bool */ +/* Compare.left = 2, expr */ +/* Compare.ops = 3, cmpop_list */ +/* Compare.comparators = 4, expr_list */ + +/* Continue.location = 0, location */ + +/* Delete.location = 0, location */ +/* Delete.targets = 1, expr_list */ + +/* Dict.location = 0, location */ +/* Dict.parenthesised = 1, bool */ +/* Dict.items = 2, dict_item_list */ + +/* DictComp.location = 0, location */ +/* DictComp.parenthesised = 1, bool */ +/* DictComp.function = 2, Function */ +/* DictComp.iterable = 3, expr */ + +/* DictUnpacking.location = 0, location */ +/* DictUnpacking.value = 1, expr */ + +/* Ellipsis.location = 0, location */ +/* Ellipsis.parenthesised = 1, bool */ + +/* ExceptGroupStmt.location = 0, location */ +/* ExceptGroupStmt.type = 1, expr */ +/* ExceptGroupStmt.name = 2, expr */ +/* ExceptGroupStmt.body = 3, stmt_list */ + +/* ExceptStmt.location = 0, location */ +/* ExceptStmt.type = 1, expr */ +/* ExceptStmt.name = 2, expr */ +/* ExceptStmt.body = 3, stmt_list */ + +/* Exec.location = 0, location */ +/* Exec.body = 1, expr */ +/* Exec.globals = 2, expr */ +/* Exec.locals = 3, expr */ + +/* ExprStmt.location = 0, location */ +/* ExprStmt.value = 1, expr */ + +/* Filter.location = 0, location */ +/* Filter.parenthesised = 1, bool */ +/* Filter.value = 2, expr */ +/* Filter.filter = 3, expr */ + +/* For.location = 0, location */ +/* For.target = 1, expr */ +/* For.iter = 2, expr */ +/* For.body = 3, stmt_list */ +/* For.orelse = 4, stmt_list */ +/* For.is_async = 5, bool */ + +/* FormattedValue.location = 0, location */ +/* FormattedValue.parenthesised = 1, bool */ +/* FormattedValue.value = 2, expr */ +/* FormattedValue.conversion = 3, str */ +/* FormattedValue.format_spec = 4, JoinedStr */ + +/* Function.name = 0, str */ +/* Function.args = 1, parameter_list */ +/* Function.vararg = 2, expr */ +/* Function.kwonlyargs = 3, expr_list */ +/* Function.kwarg = 4, expr */ +/* Function.body = 5, stmt_list */ +/* Function.is_async = 6, bool */ +/* Function.type_parameters = 7, type_parameter_list */ +/* Function = FunctionParent */ + +/* FunctionExpr.location = 0, location */ +/* FunctionExpr.parenthesised = 1, bool */ +/* FunctionExpr.name = 2, str */ +/* FunctionExpr.args = 3, arguments */ +/* FunctionExpr.returns = 4, expr */ +/* FunctionExpr.inner_scope = 5, Function */ + +/* GeneratorExp.location = 0, location */ +/* GeneratorExp.parenthesised = 1, bool */ +/* GeneratorExp.function = 2, Function */ +/* GeneratorExp.iterable = 3, expr */ + +/* Global.location = 0, location */ +/* Global.names = 1, str_list */ + +/* Guard.location = 0, location */ +/* Guard.parenthesised = 1, bool */ +/* Guard.test = 2, expr */ + +/* If.location = 0, location */ +/* If.test = 1, expr */ +/* If.body = 2, stmt_list */ +/* If.orelse = 3, stmt_list */ + +/* IfExp.location = 0, location */ +/* IfExp.parenthesised = 1, bool */ +/* IfExp.test = 2, expr */ +/* IfExp.body = 3, expr */ +/* IfExp.orelse = 4, expr */ + +/* Import.location = 0, location */ +/* Import.names = 1, alias_list */ + +/* ImportExpr.location = 0, location */ +/* ImportExpr.parenthesised = 1, bool */ +/* ImportExpr.level = 2, int */ +/* ImportExpr.name = 3, str */ +/* ImportExpr.top = 4, bool */ + +/* ImportStar.location = 0, location */ +/* ImportStar.module = 1, expr */ + +/* ImportMember.location = 0, location */ +/* ImportMember.parenthesised = 1, bool */ +/* ImportMember.module = 2, expr */ +/* ImportMember.name = 3, str */ + +/* Fstring.location = 0, location */ +/* Fstring.parenthesised = 1, bool */ +/* Fstring.values = 2, expr_list */ +/* Fstring = FormattedValue */ + +/* KeyValuePair.location = 0, location */ +/* KeyValuePair.value = 1, expr */ +/* KeyValuePair.key = 2, expr */ + +/* Lambda.location = 0, location */ +/* Lambda.parenthesised = 1, bool */ +/* Lambda.args = 2, arguments */ +/* Lambda.inner_scope = 3, Function */ + +/* List.location = 0, location */ +/* List.parenthesised = 1, bool */ +/* List.elts = 2, expr_list */ +/* List.ctx = 3, expr_context */ + +/* ListComp.location = 0, location */ +/* ListComp.parenthesised = 1, bool */ +/* ListComp.function = 2, Function */ +/* ListComp.iterable = 3, expr */ +/* ListComp.generators = 4, comprehension_list */ +/* ListComp.elt = 5, expr */ + +/* MatchStmt.location = 0, location */ +/* MatchStmt.subject = 1, expr */ +/* MatchStmt.cases = 2, stmt_list */ + +/* MatchAsPattern.location = 0, location */ +/* MatchAsPattern.parenthesised = 1, bool */ +/* MatchAsPattern.pattern = 2, pattern */ +/* MatchAsPattern.alias = 3, expr */ + +/* MatchCapturePattern.location = 0, location */ +/* MatchCapturePattern.parenthesised = 1, bool */ +/* MatchCapturePattern.variable = 2, expr */ + +/* MatchClassPattern.location = 0, location */ +/* MatchClassPattern.parenthesised = 1, bool */ +/* MatchClassPattern.class = 2, expr */ +/* MatchClassPattern.class_name = 3, expr */ +/* MatchClassPattern.positional = 4, pattern_list */ +/* MatchClassPattern.keyword = 5, pattern_list */ + +/* MatchDoubleStarPattern.location = 0, location */ +/* MatchDoubleStarPattern.parenthesised = 1, bool */ +/* MatchDoubleStarPattern.target = 2, pattern */ + +/* MatchKeyValuePattern.location = 0, location */ +/* MatchKeyValuePattern.parenthesised = 1, bool */ +/* MatchKeyValuePattern.key = 2, pattern */ +/* MatchKeyValuePattern.value = 3, pattern */ + +/* MatchKeywordPattern.location = 0, location */ +/* MatchKeywordPattern.parenthesised = 1, bool */ +/* MatchKeywordPattern.attribute = 2, expr */ +/* MatchKeywordPattern.value = 3, pattern */ + +/* MatchLiteralPattern.location = 0, location */ +/* MatchLiteralPattern.parenthesised = 1, bool */ +/* MatchLiteralPattern.literal = 2, expr */ + +/* MatchMappingPattern.location = 0, location */ +/* MatchMappingPattern.parenthesised = 1, bool */ +/* MatchMappingPattern.mappings = 2, pattern_list */ + +/* MatchOrPattern.location = 0, location */ +/* MatchOrPattern.parenthesised = 1, bool */ +/* MatchOrPattern.patterns = 2, pattern_list */ + +/* MatchSequencePattern.location = 0, location */ +/* MatchSequencePattern.parenthesised = 1, bool */ +/* MatchSequencePattern.patterns = 2, pattern_list */ + +/* MatchStarPattern.location = 0, location */ +/* MatchStarPattern.parenthesised = 1, bool */ +/* MatchStarPattern.target = 2, pattern */ + +/* MatchValuePattern.location = 0, location */ +/* MatchValuePattern.parenthesised = 1, bool */ +/* MatchValuePattern.value = 2, expr */ + +/* MatchWildcardPattern.location = 0, location */ +/* MatchWildcardPattern.parenthesised = 1, bool */ + +/* Module.name = 0, str */ +/* Module.hash = 1, str */ +/* Module.body = 2, stmt_list */ +/* Module.kind = 3, str */ + +/* Name.location = 0, location */ +/* Name.parenthesised = 1, bool */ +/* Name.variable = 2, variable */ +/* Name.ctx = 3, expr_context */ +/* Name = ParameterList */ + +/* Nonlocal.location = 0, location */ +/* Nonlocal.names = 1, str_list */ + +/* Num.location = 0, location */ +/* Num.parenthesised = 1, bool */ +/* Num.n = 2, number */ +/* Num.text = 3, number */ + +/* ParamSpec.location = 0, location */ +/* ParamSpec.name = 1, expr */ + +/* Pass.location = 0, location */ + +/* PlaceHolder.location = 0, location */ +/* PlaceHolder.parenthesised = 1, bool */ +/* PlaceHolder.variable = 2, variable */ +/* PlaceHolder.ctx = 3, expr_context */ + +/* Print.location = 0, location */ +/* Print.dest = 1, expr */ +/* Print.values = 2, expr_list */ +/* Print.nl = 3, bool */ + +/* Raise.location = 0, location */ +/* Raise.exc = 1, expr */ +/* Raise.cause = 2, expr */ +/* Raise.type = 3, expr */ +/* Raise.inst = 4, expr */ +/* Raise.tback = 5, expr */ + +/* Repr.location = 0, location */ +/* Repr.parenthesised = 1, bool */ +/* Repr.value = 2, expr */ + +/* Return.location = 0, location */ +/* Return.value = 1, expr */ + +/* Set.location = 0, location */ +/* Set.parenthesised = 1, bool */ +/* Set.elts = 2, expr_list */ + +/* SetComp.location = 0, location */ +/* SetComp.parenthesised = 1, bool */ +/* SetComp.function = 2, Function */ +/* SetComp.iterable = 3, expr */ + +/* Slice.location = 0, location */ +/* Slice.parenthesised = 1, bool */ +/* Slice.start = 2, expr */ +/* Slice.stop = 3, expr */ +/* Slice.step = 4, expr */ + +/* SpecialOperation.location = 0, location */ +/* SpecialOperation.parenthesised = 1, bool */ +/* SpecialOperation.name = 2, str */ +/* SpecialOperation.arguments = 3, expr_list */ + +/* Starred.location = 0, location */ +/* Starred.parenthesised = 1, bool */ +/* Starred.value = 2, expr */ +/* Starred.ctx = 3, expr_context */ + +/* Str.location = 0, location */ +/* Str.parenthesised = 1, bool */ +/* Str.s = 2, str */ +/* Str.prefix = 3, str */ +/* Str.implicitly_concatenated_parts = 4, StringPart_list */ + +/* StringPart.text = 0, str */ +/* StringPart.location = 1, location */ +/* StringPart = StringPartList */ +/* StringPartList = BytesOrStr */ + +/* Subscript.location = 0, location */ +/* Subscript.parenthesised = 1, bool */ +/* Subscript.value = 2, expr */ +/* Subscript.index = 3, expr */ +/* Subscript.ctx = 4, expr_context */ + +/* TemplateDottedNotation.location = 0, location */ +/* TemplateDottedNotation.parenthesised = 1, bool */ +/* TemplateDottedNotation.value = 2, expr */ +/* TemplateDottedNotation.attr = 3, str */ +/* TemplateDottedNotation.ctx = 4, expr_context */ + +/* TemplateWrite.location = 0, location */ +/* TemplateWrite.value = 1, expr */ + +/* Try.location = 0, location */ +/* Try.body = 1, stmt_list */ +/* Try.orelse = 2, stmt_list */ +/* Try.handlers = 3, stmt_list */ +/* Try.finalbody = 4, stmt_list */ + +/* Tuple.location = 0, location */ +/* Tuple.parenthesised = 1, bool */ +/* Tuple.elts = 2, expr_list */ +/* Tuple.ctx = 3, expr_context */ +/* Tuple = ParameterList */ + +/* TypeAlias.location = 0, location */ +/* TypeAlias.name = 1, expr */ +/* TypeAlias.type_parameters = 2, type_parameter_list */ +/* TypeAlias.value = 3, expr */ + +/* TypeVar.location = 0, location */ +/* TypeVar.name = 1, expr */ +/* TypeVar.bound = 2, expr */ + +/* TypeVarTuple.location = 0, location */ +/* TypeVarTuple.name = 1, expr */ + +/* UnaryExpr.location = 0, location */ +/* UnaryExpr.parenthesised = 1, bool */ +/* UnaryExpr.op = 2, unaryop */ +/* UnaryExpr.operand = 3, expr */ + +/* While.location = 0, location */ +/* While.test = 1, expr */ +/* While.body = 2, stmt_list */ +/* While.orelse = 3, stmt_list */ + +/* With.location = 0, location */ +/* With.context_expr = 1, expr */ +/* With.optional_vars = 2, expr */ +/* With.body = 3, stmt_list */ +/* With.is_async = 4, bool */ + +/* Yield.location = 0, location */ +/* Yield.parenthesised = 1, bool */ +/* Yield.value = 2, expr */ + +/* YieldFrom.location = 0, location */ +/* YieldFrom.parenthesised = 1, bool */ +/* YieldFrom.value = 2, expr */ + +/* Alias.value = 0, expr */ +/* Alias.asname = 1, expr */ +/* Alias = AliasList */ +/* AliasList = Import */ + +/* Arguments.kw_defaults = 0, expr_list */ +/* Arguments.defaults = 1, expr_list */ +/* Arguments.annotations = 2, expr_list */ +/* Arguments.varargannotation = 3, expr */ +/* Arguments.kwargannotation = 4, expr */ +/* Arguments.kw_annotations = 5, expr_list */ +/* Arguments = ArgumentsParent */ +/* boolean = BoolParent */ +/* Boolop = BoolExpr */ +/* string = Bytes */ +/* Cmpop = CmpopList */ +/* CmpopList = Compare */ + +/* Comprehension.location = 0, location */ +/* Comprehension.iter = 1, expr */ +/* Comprehension.target = 2, expr */ +/* Comprehension.ifs = 3, expr_list */ +/* Comprehension = ComprehensionList */ +/* ComprehensionList = ListComp */ +/* DictItem = DictItemList */ +/* DictItemList = DictItemListParent */ + +/* Expr.location = 0, location */ +/* Expr.parenthesised = 1, bool */ +/* Expr = ExprParent */ +/* ExprContext = ExprContextParent */ +/* ExprList = ExprListParent */ +/* int = ImportExpr */ + +/* Keyword.location = 0, location */ +/* Keyword.value = 1, expr */ +/* Keyword.arg = 2, str */ +/* Location = LocationParent */ +/* string = Num */ +/* Operator = BinaryExpr */ +/* ParameterList = Function */ + +/* Pattern.location = 0, location */ +/* Pattern.parenthesised = 1, bool */ +/* Pattern = PatternParent */ +/* PatternList = PatternListParent */ + +/* Stmt.location = 0, location */ +/* Stmt = StmtList */ +/* StmtList = StmtListParent */ +/* string = StrParent */ +/* StringList = StrListParent */ + +/* TypeParameter.location = 0, location */ +/* TypeParameter = TypeParameterList */ +/* TypeParameterList = TypeParameterListParent */ +/* Unaryop = UnaryExpr */ +/* Variable = VariableParent */ +py_Classes(unique int id : @py_Class, + unique int parent : @py_ClassExpr ref); + +py_Functions(unique int id : @py_Function, + unique int parent : @py_Function_parent ref); + +py_Modules(unique int id : @py_Module); + +py_StringParts(unique int id : @py_StringPart, + int parent : @py_StringPart_list ref, + int idx : int ref); + +py_StringPart_lists(unique int id : @py_StringPart_list, + unique int parent : @py_Bytes_or_Str ref); + +py_aliases(unique int id : @py_alias, + int parent : @py_alias_list ref, + int idx : int ref); + +py_alias_lists(unique int id : @py_alias_list, + unique int parent : @py_Import ref); + +py_arguments(unique int id : @py_arguments, + unique int parent : @py_arguments_parent ref); + +py_bools(int parent : @py_bool_parent ref, + int idx : int ref); + +py_boolops(unique int id : @py_boolop, + int kind: int ref, + unique int parent : @py_BoolExpr ref); + +py_bytes(varchar(1) id : string ref, + int parent : @py_Bytes ref, + int idx : int ref); + +py_cmpops(unique int id : @py_cmpop, + int kind: int ref, + int parent : @py_cmpop_list ref, + int idx : int ref); + +py_cmpop_lists(unique int id : @py_cmpop_list, + unique int parent : @py_Compare ref); + +py_comprehensions(unique int id : @py_comprehension, + int parent : @py_comprehension_list ref, + int idx : int ref); + +py_comprehension_lists(unique int id : @py_comprehension_list, + unique int parent : @py_ListComp ref); + +py_dict_items(unique int id : @py_dict_item, + int kind: int ref, + int parent : @py_dict_item_list ref, + int idx : int ref); + +py_dict_item_lists(unique int id : @py_dict_item_list, + unique int parent : @py_dict_item_list_parent ref); + +py_exprs(unique int id : @py_expr, + int kind: int ref, + int parent : @py_expr_parent ref, + int idx : int ref); + +py_expr_contexts(unique int id : @py_expr_context, + int kind: int ref, + unique int parent : @py_expr_context_parent ref); + +py_expr_lists(unique int id : @py_expr_list, + int parent : @py_expr_list_parent ref, + int idx : int ref); + +py_ints(int id : int ref, + unique int parent : @py_ImportExpr ref); + +py_locations(unique int id : @location ref, + unique int parent : @py_location_parent ref); + +py_numbers(varchar(1) id : string ref, + int parent : @py_Num ref, + int idx : int ref); + +py_operators(unique int id : @py_operator, + int kind: int ref, + unique int parent : @py_BinaryExpr ref); + +py_parameter_lists(unique int id : @py_parameter_list, + unique int parent : @py_Function ref); + +py_patterns(unique int id : @py_pattern, + int kind: int ref, + int parent : @py_pattern_parent ref, + int idx : int ref); + +py_pattern_lists(unique int id : @py_pattern_list, + int parent : @py_pattern_list_parent ref, + int idx : int ref); + +py_stmts(unique int id : @py_stmt, + int kind: int ref, + int parent : @py_stmt_list ref, + int idx : int ref); + +py_stmt_lists(unique int id : @py_stmt_list, + int parent : @py_stmt_list_parent ref, + int idx : int ref); + +py_strs(varchar(1) id : string ref, + int parent : @py_str_parent ref, + int idx : int ref); + +py_str_lists(unique int id : @py_str_list, + unique int parent : @py_str_list_parent ref); + +py_type_parameters(unique int id : @py_type_parameter, + int kind: int ref, + int parent : @py_type_parameter_list ref, + int idx : int ref); + +py_type_parameter_lists(unique int id : @py_type_parameter_list, + unique int parent : @py_type_parameter_list_parent ref); + +py_unaryops(unique int id : @py_unaryop, + int kind: int ref, + unique int parent : @py_UnaryExpr ref); + +py_variables(int id : @py_variable ref, + unique int parent : @py_variable_parent ref); + +case @py_boolop.kind of + 0 = @py_And +| 1 = @py_Or; + +case @py_cmpop.kind of + 0 = @py_Eq +| 1 = @py_Gt +| 2 = @py_GtE +| 3 = @py_In +| 4 = @py_Is +| 5 = @py_IsNot +| 6 = @py_Lt +| 7 = @py_LtE +| 8 = @py_NotEq +| 9 = @py_NotIn; + +case @py_dict_item.kind of + 0 = @py_DictUnpacking +| 1 = @py_KeyValuePair +| 2 = @py_keyword; + +case @py_expr.kind of + 0 = @py_Attribute +| 1 = @py_BinaryExpr +| 2 = @py_BoolExpr +| 3 = @py_Bytes +| 4 = @py_Call +| 5 = @py_ClassExpr +| 6 = @py_Compare +| 7 = @py_Dict +| 8 = @py_DictComp +| 9 = @py_Ellipsis +| 10 = @py_FunctionExpr +| 11 = @py_GeneratorExp +| 12 = @py_IfExp +| 13 = @py_ImportExpr +| 14 = @py_ImportMember +| 15 = @py_Lambda +| 16 = @py_List +| 17 = @py_ListComp +| 18 = @py_Guard +| 19 = @py_Name +| 20 = @py_Num +| 21 = @py_Repr +| 22 = @py_Set +| 23 = @py_SetComp +| 24 = @py_Slice +| 25 = @py_Starred +| 26 = @py_Str +| 27 = @py_Subscript +| 28 = @py_Tuple +| 29 = @py_UnaryExpr +| 30 = @py_Yield +| 31 = @py_YieldFrom +| 32 = @py_TemplateDottedNotation +| 33 = @py_Filter +| 34 = @py_PlaceHolder +| 35 = @py_Await +| 36 = @py_Fstring +| 37 = @py_FormattedValue +| 38 = @py_AssignExpr +| 39 = @py_SpecialOperation; + +case @py_expr_context.kind of + 0 = @py_AugLoad +| 1 = @py_AugStore +| 2 = @py_Del +| 3 = @py_Load +| 4 = @py_Param +| 5 = @py_Store; + +case @py_operator.kind of + 0 = @py_Add +| 1 = @py_BitAnd +| 2 = @py_BitOr +| 3 = @py_BitXor +| 4 = @py_Div +| 5 = @py_FloorDiv +| 6 = @py_LShift +| 7 = @py_Mod +| 8 = @py_Mult +| 9 = @py_Pow +| 10 = @py_RShift +| 11 = @py_Sub +| 12 = @py_MatMult; + +case @py_pattern.kind of + 0 = @py_MatchAsPattern +| 1 = @py_MatchOrPattern +| 2 = @py_MatchLiteralPattern +| 3 = @py_MatchCapturePattern +| 4 = @py_MatchWildcardPattern +| 5 = @py_MatchValuePattern +| 6 = @py_MatchSequencePattern +| 7 = @py_MatchStarPattern +| 8 = @py_MatchMappingPattern +| 9 = @py_MatchDoubleStarPattern +| 10 = @py_MatchKeyValuePattern +| 11 = @py_MatchClassPattern +| 12 = @py_MatchKeywordPattern; + +case @py_stmt.kind of + 0 = @py_Assert +| 1 = @py_Assign +| 2 = @py_AugAssign +| 3 = @py_Break +| 4 = @py_Continue +| 5 = @py_Delete +| 6 = @py_ExceptStmt +| 7 = @py_ExceptGroupStmt +| 8 = @py_Exec +| 9 = @py_Expr_stmt +| 10 = @py_For +| 11 = @py_Global +| 12 = @py_If +| 13 = @py_Import +| 14 = @py_ImportStar +| 15 = @py_MatchStmt +| 16 = @py_Case +| 17 = @py_Nonlocal +| 18 = @py_Pass +| 19 = @py_Print +| 20 = @py_Raise +| 21 = @py_Return +| 22 = @py_Try +| 23 = @py_While +| 24 = @py_With +| 25 = @py_TemplateWrite +| 26 = @py_AnnAssign +| 27 = @py_TypeAlias; + +case @py_type_parameter.kind of + 0 = @py_ParamSpec +| 1 = @py_TypeVar +| 2 = @py_TypeVarTuple; + +case @py_unaryop.kind of + 0 = @py_Invert +| 1 = @py_Not +| 2 = @py_UAdd +| 3 = @py_USub; + +@py_Bytes_or_Str = @py_Bytes | @py_Str; + +@py_Function_parent = @py_DictComp | @py_FunctionExpr | @py_GeneratorExp | @py_Lambda | @py_ListComp | @py_SetComp; + +@py_arguments_parent = @py_FunctionExpr | @py_Lambda; + +@py_ast_node = @py_Class | @py_Function | @py_Module | @py_StringPart | @py_comprehension | @py_dict_item | @py_expr | @py_pattern | @py_stmt | @py_type_parameter; + +@py_bool_parent = @py_For | @py_Function | @py_Print | @py_With | @py_expr | @py_pattern; + +@py_dict_item_list_parent = @py_Call | @py_ClassExpr | @py_Dict; + +@py_expr_context_parent = @py_Attribute | @py_List | @py_Name | @py_PlaceHolder | @py_Starred | @py_Subscript | @py_TemplateDottedNotation | @py_Tuple; + +@py_expr_list_parent = @py_Assign | @py_BoolExpr | @py_Call | @py_ClassExpr | @py_Compare | @py_Delete | @py_Fstring | @py_Function | @py_List | @py_Print | @py_Set | @py_SpecialOperation | @py_Tuple | @py_arguments | @py_comprehension; + +@py_expr_or_stmt = @py_expr | @py_stmt; + +@py_expr_parent = @py_AnnAssign | @py_Assert | @py_Assign | @py_AssignExpr | @py_Attribute | @py_AugAssign | @py_Await | @py_BinaryExpr | @py_Call | @py_Case | @py_Compare | @py_DictComp | @py_DictUnpacking | @py_ExceptGroupStmt | @py_ExceptStmt | @py_Exec | @py_Expr_stmt | @py_Filter | @py_For | @py_FormattedValue | @py_Function | @py_FunctionExpr | @py_GeneratorExp | @py_Guard | @py_If | @py_IfExp | @py_ImportMember | @py_ImportStar | @py_KeyValuePair | @py_ListComp | @py_MatchAsPattern | @py_MatchCapturePattern | @py_MatchClassPattern | @py_MatchKeywordPattern | @py_MatchLiteralPattern | @py_MatchStmt | @py_MatchValuePattern | @py_ParamSpec | @py_Print | @py_Raise | @py_Repr | @py_Return | @py_SetComp | @py_Slice | @py_Starred | @py_Subscript | @py_TemplateDottedNotation | @py_TemplateWrite | @py_TypeAlias | @py_TypeVar | @py_TypeVarTuple | @py_UnaryExpr | @py_While | @py_With | @py_Yield | @py_YieldFrom | @py_alias | @py_arguments | @py_comprehension | @py_expr_list | @py_keyword | @py_parameter_list; + +@py_location_parent = @py_DictUnpacking | @py_KeyValuePair | @py_StringPart | @py_comprehension | @py_expr | @py_keyword | @py_pattern | @py_stmt | @py_type_parameter; + +@py_parameter = @py_Name | @py_Tuple; + +@py_pattern_list_parent = @py_MatchClassPattern | @py_MatchMappingPattern | @py_MatchOrPattern | @py_MatchSequencePattern; + +@py_pattern_parent = @py_Case | @py_MatchAsPattern | @py_MatchDoubleStarPattern | @py_MatchKeyValuePattern | @py_MatchKeywordPattern | @py_MatchStarPattern | @py_pattern_list; + +@py_scope = @py_Class | @py_Function | @py_Module; + +@py_stmt_list_parent = @py_Case | @py_Class | @py_ExceptGroupStmt | @py_ExceptStmt | @py_For | @py_Function | @py_If | @py_MatchStmt | @py_Module | @py_Try | @py_While | @py_With; + +@py_str_list_parent = @py_Global | @py_Nonlocal; + +@py_str_parent = @py_Attribute | @py_Class | @py_ClassExpr | @py_FormattedValue | @py_Function | @py_FunctionExpr | @py_ImportExpr | @py_ImportMember | @py_Module | @py_SpecialOperation | @py_Str | @py_StringPart | @py_TemplateDottedNotation | @py_keyword | @py_str_list; + +@py_type_parameter_list_parent = @py_ClassExpr | @py_Function | @py_TypeAlias; + +@py_variable_parent = @py_Name | @py_PlaceHolder; + + +/* + * End of auto-generated part + */ + + + +/* Map relative names to absolute names for imports */ +py_absolute_names(int module : @py_Module ref, + varchar(1) relname : string ref, + varchar(1) absname : string ref); + +py_exports(int id : @py_Module ref, + varchar(1) name : string ref); + +/* Successor information */ +py_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_true_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_exception_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_false_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_flow_bb_node(unique int flownode : @py_flow_node, + int realnode : @py_ast_node ref, + int basicblock : @py_flow_node ref, + int index : int ref); + +py_scope_flow(int flow : @py_flow_node ref, + int scope : @py_scope ref, + int kind : int ref); + +py_idoms(unique int node : @py_flow_node ref, + int immediate_dominator : @py_flow_node ref); + +py_ssa_phi(int phi : @py_ssa_var ref, + int arg: @py_ssa_var ref); + +py_ssa_var(unique int id : @py_ssa_var, + int var : @py_variable ref); + +py_ssa_use(int node: @py_flow_node ref, + int var : @py_ssa_var ref); + +py_ssa_defn(unique int id : @py_ssa_var ref, + int node: @py_flow_node ref); + +@py_base_var = @py_variable | @py_ssa_var; + +py_scopes(unique int node : @py_expr_or_stmt ref, + int scope : @py_scope ref); + +py_scope_location(unique int id : @location ref, + unique int scope : @py_scope ref); + +py_flags_versioned(varchar(1) name : string ref, + varchar(1) value : string ref, + varchar(1) version : string ref); + +py_syntax_error_versioned(unique int id : @location ref, + varchar(1) message : string ref, + varchar(1) version : string ref); + +py_comments(unique int id : @py_comment, + varchar(1) text : string ref, + unique int location : @location ref); + +/* Type information support */ + +py_cobjects(unique int obj : @py_cobject); + +py_cobjecttypes(unique int obj : @py_cobject ref, + int typeof : @py_cobject ref); + +py_cobjectnames(unique int obj : @py_cobject ref, + varchar(1) name : string ref); + +/* Kind should be 0 for introspection, > 0 from source, as follows: + 1 from C extension source + */ +py_cobject_sources(int obj : @py_cobject ref, + int kind : int ref); + +py_cmembers_versioned(int object : @py_cobject ref, + varchar(1) name : string ref, + int member : @py_cobject ref, + varchar(1) version : string ref); + +py_citems(int object : @py_cobject ref, + int index : int ref, + int member : @py_cobject ref); + +ext_argtype(int funcid : @py_object ref, + int arg : int ref, + int typeid : @py_object ref); + +ext_rettype(int funcid : @py_object ref, + int typeid : @py_object ref); + +ext_proptype(int propid : @py_object ref, + int typeid : @py_object ref); + +ext_argreturn(int funcid : @py_object ref, + int arg : int ref); + +py_special_objects(unique int obj : @py_cobject ref, + unique varchar(1) name : string ref); + +py_decorated_object(int object : @py_object ref, + int level: int ref); + +@py_object = @py_cobject | @py_flow_node; + +@py_source_element = @py_ast_node | @container; diff --git a/python/ql/lib/upgrades/728c6d65e61d808ae276013ebc15abc3a97aaef1/semmlecode.python.dbscheme b/python/ql/lib/upgrades/728c6d65e61d808ae276013ebc15abc3a97aaef1/semmlecode.python.dbscheme new file mode 100644 index 000000000000..5af903da088e --- /dev/null +++ b/python/ql/lib/upgrades/728c6d65e61d808ae276013ebc15abc3a97aaef1/semmlecode.python.dbscheme @@ -0,0 +1,1236 @@ +/* + * This dbscheme is auto-generated by 'semmle/dbscheme_gen.py'. + * WARNING: Any modifications to this file will be lost. + * Relations can be changed by modifying master.py or + * by adding rules to dbscheme.template + */ + +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2020-07-02 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/*- DEPRECATED: External defects and metrics -*/ + +externalDefects( + unique int id : @externalDefect, + varchar(900) queryPath : string ref, + int location : @location ref, + varchar(900) message : string ref, + float severity : float ref +); + +externalMetrics( + unique int id : @externalMetric, + varchar(900) queryPath : string ref, + int location : @location ref, + float value : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- DEPRECATED: Snapshot date -*/ + +snapshotDate(unique date snapshotDate : date ref); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- DEPRECATED: Duplicate code -*/ + +duplicateCode( + unique int id : @duplication, + string relativePath : string ref, + int equivClass : int ref +); + +similarCode( + unique int id : @similarity, + string relativePath : string ref, + int equivClass : int ref +); + +@duplication_or_similarity = @duplication | @similarity + +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref +); + +/*- DEPRECATED: Version control data -*/ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Python dbscheme -*/ + +/* + * Line metrics + */ +py_codelines(int id : @py_scope ref, + int count : int ref); + +py_commentlines(int id : @py_scope ref, + int count : int ref); + +py_docstringlines(int id : @py_scope ref, + int count : int ref); + +py_alllines(int id : @py_scope ref, + int count : int ref); + +/**************************** + Python dbscheme +****************************/ + +@sourceline = @file | @py_Module | @xmllocatable; + +@location = @location_ast | @location_default ; + +locations_ast(unique int id: @location_ast, + int module: @py_Module ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +file_contents(unique int file: @file ref, string contents: string ref); + +py_module_path(int module: @py_Module ref, int file: @container ref); + +variable(unique int id : @py_variable, + int scope : @py_scope ref, + varchar(1) name : string ref); + +py_line_lengths(unique int id : @py_line, + int file: @py_Module ref, + int line : int ref, + int length : int ref); + +py_extracted_version(int module : @py_Module ref, + varchar(1) version : string ref); + +/* AUTO GENERATED PART STARTS HERE */ + + +/* AnnAssign.location = 0, location */ +/* AnnAssign.value = 1, expr */ +/* AnnAssign.annotation = 2, expr */ +/* AnnAssign.target = 3, expr */ + +/* Assert.location = 0, location */ +/* Assert.test = 1, expr */ +/* Assert.msg = 2, expr */ + +/* Assign.location = 0, location */ +/* Assign.value = 1, expr */ +/* Assign.targets = 2, expr_list */ + +/* AssignExpr.location = 0, location */ +/* AssignExpr.parenthesised = 1, bool */ +/* AssignExpr.value = 2, expr */ +/* AssignExpr.target = 3, expr */ + +/* Attribute.location = 0, location */ +/* Attribute.parenthesised = 1, bool */ +/* Attribute.value = 2, expr */ +/* Attribute.attr = 3, str */ +/* Attribute.ctx = 4, expr_context */ + +/* AugAssign.location = 0, location */ +/* AugAssign.operation = 1, BinOp */ + +/* Await.location = 0, location */ +/* Await.parenthesised = 1, bool */ +/* Await.value = 2, expr */ + +/* BinaryExpr.location = 0, location */ +/* BinaryExpr.parenthesised = 1, bool */ +/* BinaryExpr.left = 2, expr */ +/* BinaryExpr.op = 3, operator */ +/* BinaryExpr.right = 4, expr */ +/* BinaryExpr = AugAssign */ + +/* BoolExpr.location = 0, location */ +/* BoolExpr.parenthesised = 1, bool */ +/* BoolExpr.op = 2, boolop */ +/* BoolExpr.values = 3, expr_list */ + +/* Break.location = 0, location */ + +/* Bytes.location = 0, location */ +/* Bytes.parenthesised = 1, bool */ +/* Bytes.s = 2, bytes */ +/* Bytes.prefix = 3, bytes */ +/* Bytes.implicitly_concatenated_parts = 4, StringPart_list */ + +/* Call.location = 0, location */ +/* Call.parenthesised = 1, bool */ +/* Call.func = 2, expr */ +/* Call.positional_args = 3, expr_list */ +/* Call.named_args = 4, dict_item_list */ + +/* Case.location = 0, location */ +/* Case.pattern = 1, pattern */ +/* Case.guard = 2, expr */ +/* Case.body = 3, stmt_list */ + +/* Class.name = 0, str */ +/* Class.body = 1, stmt_list */ +/* Class = ClassExpr */ + +/* ClassExpr.location = 0, location */ +/* ClassExpr.parenthesised = 1, bool */ +/* ClassExpr.name = 2, str */ +/* ClassExpr.bases = 3, expr_list */ +/* ClassExpr.keywords = 4, dict_item_list */ +/* ClassExpr.inner_scope = 5, Class */ +/* ClassExpr.type_parameters = 6, type_parameter_list */ + +/* Compare.location = 0, location */ +/* Compare.parenthesised = 1, bool */ +/* Compare.left = 2, expr */ +/* Compare.ops = 3, cmpop_list */ +/* Compare.comparators = 4, expr_list */ + +/* Continue.location = 0, location */ + +/* Delete.location = 0, location */ +/* Delete.targets = 1, expr_list */ + +/* Dict.location = 0, location */ +/* Dict.parenthesised = 1, bool */ +/* Dict.items = 2, dict_item_list */ + +/* DictComp.location = 0, location */ +/* DictComp.parenthesised = 1, bool */ +/* DictComp.function = 2, Function */ +/* DictComp.iterable = 3, expr */ + +/* DictUnpacking.location = 0, location */ +/* DictUnpacking.value = 1, expr */ + +/* Ellipsis.location = 0, location */ +/* Ellipsis.parenthesised = 1, bool */ + +/* ExceptGroupStmt.location = 0, location */ +/* ExceptGroupStmt.type = 1, expr */ +/* ExceptGroupStmt.name = 2, expr */ +/* ExceptGroupStmt.body = 3, stmt_list */ + +/* ExceptStmt.location = 0, location */ +/* ExceptStmt.type = 1, expr */ +/* ExceptStmt.name = 2, expr */ +/* ExceptStmt.body = 3, stmt_list */ + +/* Exec.location = 0, location */ +/* Exec.body = 1, expr */ +/* Exec.globals = 2, expr */ +/* Exec.locals = 3, expr */ + +/* ExprStmt.location = 0, location */ +/* ExprStmt.value = 1, expr */ + +/* Filter.location = 0, location */ +/* Filter.parenthesised = 1, bool */ +/* Filter.value = 2, expr */ +/* Filter.filter = 3, expr */ + +/* For.location = 0, location */ +/* For.target = 1, expr */ +/* For.iter = 2, expr */ +/* For.body = 3, stmt_list */ +/* For.orelse = 4, stmt_list */ +/* For.is_async = 5, bool */ + +/* FormattedValue.location = 0, location */ +/* FormattedValue.parenthesised = 1, bool */ +/* FormattedValue.value = 2, expr */ +/* FormattedValue.conversion = 3, str */ +/* FormattedValue.format_spec = 4, JoinedStr */ + +/* Function.name = 0, str */ +/* Function.args = 1, parameter_list */ +/* Function.vararg = 2, expr */ +/* Function.kwonlyargs = 3, expr_list */ +/* Function.kwarg = 4, expr */ +/* Function.body = 5, stmt_list */ +/* Function.is_async = 6, bool */ +/* Function.type_parameters = 7, type_parameter_list */ +/* Function = FunctionParent */ + +/* FunctionExpr.location = 0, location */ +/* FunctionExpr.parenthesised = 1, bool */ +/* FunctionExpr.name = 2, str */ +/* FunctionExpr.args = 3, arguments */ +/* FunctionExpr.returns = 4, expr */ +/* FunctionExpr.inner_scope = 5, Function */ + +/* GeneratorExp.location = 0, location */ +/* GeneratorExp.parenthesised = 1, bool */ +/* GeneratorExp.function = 2, Function */ +/* GeneratorExp.iterable = 3, expr */ + +/* Global.location = 0, location */ +/* Global.names = 1, str_list */ + +/* Guard.location = 0, location */ +/* Guard.parenthesised = 1, bool */ +/* Guard.test = 2, expr */ + +/* If.location = 0, location */ +/* If.test = 1, expr */ +/* If.body = 2, stmt_list */ +/* If.orelse = 3, stmt_list */ + +/* IfExp.location = 0, location */ +/* IfExp.parenthesised = 1, bool */ +/* IfExp.test = 2, expr */ +/* IfExp.body = 3, expr */ +/* IfExp.orelse = 4, expr */ + +/* Import.location = 0, location */ +/* Import.names = 1, alias_list */ + +/* ImportExpr.location = 0, location */ +/* ImportExpr.parenthesised = 1, bool */ +/* ImportExpr.level = 2, int */ +/* ImportExpr.name = 3, str */ +/* ImportExpr.top = 4, bool */ + +/* ImportStar.location = 0, location */ +/* ImportStar.module = 1, expr */ + +/* ImportMember.location = 0, location */ +/* ImportMember.parenthesised = 1, bool */ +/* ImportMember.module = 2, expr */ +/* ImportMember.name = 3, str */ + +/* Fstring.location = 0, location */ +/* Fstring.parenthesised = 1, bool */ +/* Fstring.values = 2, expr_list */ +/* Fstring = FormattedValue */ + +/* KeyValuePair.location = 0, location */ +/* KeyValuePair.value = 1, expr */ +/* KeyValuePair.key = 2, expr */ + +/* Lambda.location = 0, location */ +/* Lambda.parenthesised = 1, bool */ +/* Lambda.args = 2, arguments */ +/* Lambda.inner_scope = 3, Function */ + +/* List.location = 0, location */ +/* List.parenthesised = 1, bool */ +/* List.elts = 2, expr_list */ +/* List.ctx = 3, expr_context */ + +/* ListComp.location = 0, location */ +/* ListComp.parenthesised = 1, bool */ +/* ListComp.function = 2, Function */ +/* ListComp.iterable = 3, expr */ +/* ListComp.generators = 4, comprehension_list */ +/* ListComp.elt = 5, expr */ + +/* MatchStmt.location = 0, location */ +/* MatchStmt.subject = 1, expr */ +/* MatchStmt.cases = 2, stmt_list */ + +/* MatchAsPattern.location = 0, location */ +/* MatchAsPattern.parenthesised = 1, bool */ +/* MatchAsPattern.pattern = 2, pattern */ +/* MatchAsPattern.alias = 3, expr */ + +/* MatchCapturePattern.location = 0, location */ +/* MatchCapturePattern.parenthesised = 1, bool */ +/* MatchCapturePattern.variable = 2, expr */ + +/* MatchClassPattern.location = 0, location */ +/* MatchClassPattern.parenthesised = 1, bool */ +/* MatchClassPattern.class = 2, expr */ +/* MatchClassPattern.class_name = 3, expr */ +/* MatchClassPattern.positional = 4, pattern_list */ +/* MatchClassPattern.keyword = 5, pattern_list */ + +/* MatchDoubleStarPattern.location = 0, location */ +/* MatchDoubleStarPattern.parenthesised = 1, bool */ +/* MatchDoubleStarPattern.target = 2, pattern */ + +/* MatchKeyValuePattern.location = 0, location */ +/* MatchKeyValuePattern.parenthesised = 1, bool */ +/* MatchKeyValuePattern.key = 2, pattern */ +/* MatchKeyValuePattern.value = 3, pattern */ + +/* MatchKeywordPattern.location = 0, location */ +/* MatchKeywordPattern.parenthesised = 1, bool */ +/* MatchKeywordPattern.attribute = 2, expr */ +/* MatchKeywordPattern.value = 3, pattern */ + +/* MatchLiteralPattern.location = 0, location */ +/* MatchLiteralPattern.parenthesised = 1, bool */ +/* MatchLiteralPattern.literal = 2, expr */ + +/* MatchMappingPattern.location = 0, location */ +/* MatchMappingPattern.parenthesised = 1, bool */ +/* MatchMappingPattern.mappings = 2, pattern_list */ + +/* MatchOrPattern.location = 0, location */ +/* MatchOrPattern.parenthesised = 1, bool */ +/* MatchOrPattern.patterns = 2, pattern_list */ + +/* MatchSequencePattern.location = 0, location */ +/* MatchSequencePattern.parenthesised = 1, bool */ +/* MatchSequencePattern.patterns = 2, pattern_list */ + +/* MatchStarPattern.location = 0, location */ +/* MatchStarPattern.parenthesised = 1, bool */ +/* MatchStarPattern.target = 2, pattern */ + +/* MatchValuePattern.location = 0, location */ +/* MatchValuePattern.parenthesised = 1, bool */ +/* MatchValuePattern.value = 2, expr */ + +/* MatchWildcardPattern.location = 0, location */ +/* MatchWildcardPattern.parenthesised = 1, bool */ + +/* Module.name = 0, str */ +/* Module.hash = 1, str */ +/* Module.body = 2, stmt_list */ +/* Module.kind = 3, str */ + +/* Name.location = 0, location */ +/* Name.parenthesised = 1, bool */ +/* Name.variable = 2, variable */ +/* Name.ctx = 3, expr_context */ +/* Name = ParameterList */ + +/* Nonlocal.location = 0, location */ +/* Nonlocal.names = 1, str_list */ + +/* Num.location = 0, location */ +/* Num.parenthesised = 1, bool */ +/* Num.n = 2, number */ +/* Num.text = 3, number */ + +/* ParamSpec.location = 0, location */ +/* ParamSpec.name = 1, expr */ +/* ParamSpec.default = 2, expr */ + +/* Pass.location = 0, location */ + +/* PlaceHolder.location = 0, location */ +/* PlaceHolder.parenthesised = 1, bool */ +/* PlaceHolder.variable = 2, variable */ +/* PlaceHolder.ctx = 3, expr_context */ + +/* Print.location = 0, location */ +/* Print.dest = 1, expr */ +/* Print.values = 2, expr_list */ +/* Print.nl = 3, bool */ + +/* Raise.location = 0, location */ +/* Raise.exc = 1, expr */ +/* Raise.cause = 2, expr */ +/* Raise.type = 3, expr */ +/* Raise.inst = 4, expr */ +/* Raise.tback = 5, expr */ + +/* Repr.location = 0, location */ +/* Repr.parenthesised = 1, bool */ +/* Repr.value = 2, expr */ + +/* Return.location = 0, location */ +/* Return.value = 1, expr */ + +/* Set.location = 0, location */ +/* Set.parenthesised = 1, bool */ +/* Set.elts = 2, expr_list */ + +/* SetComp.location = 0, location */ +/* SetComp.parenthesised = 1, bool */ +/* SetComp.function = 2, Function */ +/* SetComp.iterable = 3, expr */ + +/* Slice.location = 0, location */ +/* Slice.parenthesised = 1, bool */ +/* Slice.start = 2, expr */ +/* Slice.stop = 3, expr */ +/* Slice.step = 4, expr */ + +/* SpecialOperation.location = 0, location */ +/* SpecialOperation.parenthesised = 1, bool */ +/* SpecialOperation.name = 2, str */ +/* SpecialOperation.arguments = 3, expr_list */ + +/* Starred.location = 0, location */ +/* Starred.parenthesised = 1, bool */ +/* Starred.value = 2, expr */ +/* Starred.ctx = 3, expr_context */ + +/* Str.location = 0, location */ +/* Str.parenthesised = 1, bool */ +/* Str.s = 2, str */ +/* Str.prefix = 3, str */ +/* Str.implicitly_concatenated_parts = 4, StringPart_list */ + +/* StringPart.text = 0, str */ +/* StringPart.location = 1, location */ +/* StringPart = StringPartList */ +/* StringPartList = BytesOrStr */ + +/* Subscript.location = 0, location */ +/* Subscript.parenthesised = 1, bool */ +/* Subscript.value = 2, expr */ +/* Subscript.index = 3, expr */ +/* Subscript.ctx = 4, expr_context */ + +/* TemplateDottedNotation.location = 0, location */ +/* TemplateDottedNotation.parenthesised = 1, bool */ +/* TemplateDottedNotation.value = 2, expr */ +/* TemplateDottedNotation.attr = 3, str */ +/* TemplateDottedNotation.ctx = 4, expr_context */ + +/* TemplateWrite.location = 0, location */ +/* TemplateWrite.value = 1, expr */ + +/* Try.location = 0, location */ +/* Try.body = 1, stmt_list */ +/* Try.orelse = 2, stmt_list */ +/* Try.handlers = 3, stmt_list */ +/* Try.finalbody = 4, stmt_list */ + +/* Tuple.location = 0, location */ +/* Tuple.parenthesised = 1, bool */ +/* Tuple.elts = 2, expr_list */ +/* Tuple.ctx = 3, expr_context */ +/* Tuple = ParameterList */ + +/* TypeAlias.location = 0, location */ +/* TypeAlias.name = 1, expr */ +/* TypeAlias.type_parameters = 2, type_parameter_list */ +/* TypeAlias.value = 3, expr */ + +/* TypeVar.location = 0, location */ +/* TypeVar.name = 1, expr */ +/* TypeVar.bound = 2, expr */ +/* TypeVar.default = 3, expr */ + +/* TypeVarTuple.location = 0, location */ +/* TypeVarTuple.name = 1, expr */ +/* TypeVarTuple.default = 2, expr */ + +/* UnaryExpr.location = 0, location */ +/* UnaryExpr.parenthesised = 1, bool */ +/* UnaryExpr.op = 2, unaryop */ +/* UnaryExpr.operand = 3, expr */ + +/* While.location = 0, location */ +/* While.test = 1, expr */ +/* While.body = 2, stmt_list */ +/* While.orelse = 3, stmt_list */ + +/* With.location = 0, location */ +/* With.context_expr = 1, expr */ +/* With.optional_vars = 2, expr */ +/* With.body = 3, stmt_list */ +/* With.is_async = 4, bool */ + +/* Yield.location = 0, location */ +/* Yield.parenthesised = 1, bool */ +/* Yield.value = 2, expr */ + +/* YieldFrom.location = 0, location */ +/* YieldFrom.parenthesised = 1, bool */ +/* YieldFrom.value = 2, expr */ + +/* Alias.value = 0, expr */ +/* Alias.asname = 1, expr */ +/* Alias = AliasList */ +/* AliasList = Import */ + +/* Arguments.kw_defaults = 0, expr_list */ +/* Arguments.defaults = 1, expr_list */ +/* Arguments.annotations = 2, expr_list */ +/* Arguments.varargannotation = 3, expr */ +/* Arguments.kwargannotation = 4, expr */ +/* Arguments.kw_annotations = 5, expr_list */ +/* Arguments = ArgumentsParent */ +/* boolean = BoolParent */ +/* Boolop = BoolExpr */ +/* string = Bytes */ +/* Cmpop = CmpopList */ +/* CmpopList = Compare */ + +/* Comprehension.location = 0, location */ +/* Comprehension.iter = 1, expr */ +/* Comprehension.target = 2, expr */ +/* Comprehension.ifs = 3, expr_list */ +/* Comprehension = ComprehensionList */ +/* ComprehensionList = ListComp */ +/* DictItem = DictItemList */ +/* DictItemList = DictItemListParent */ + +/* Expr.location = 0, location */ +/* Expr.parenthesised = 1, bool */ +/* Expr = ExprParent */ +/* ExprContext = ExprContextParent */ +/* ExprList = ExprListParent */ +/* int = ImportExpr */ + +/* Keyword.location = 0, location */ +/* Keyword.value = 1, expr */ +/* Keyword.arg = 2, str */ +/* Location = LocationParent */ +/* string = Num */ +/* Operator = BinaryExpr */ +/* ParameterList = Function */ + +/* Pattern.location = 0, location */ +/* Pattern.parenthesised = 1, bool */ +/* Pattern = PatternParent */ +/* PatternList = PatternListParent */ + +/* Stmt.location = 0, location */ +/* Stmt = StmtList */ +/* StmtList = StmtListParent */ +/* string = StrParent */ +/* StringList = StrListParent */ + +/* TypeParameter.location = 0, location */ +/* TypeParameter = TypeParameterList */ +/* TypeParameterList = TypeParameterListParent */ +/* Unaryop = UnaryExpr */ +/* Variable = VariableParent */ +py_Classes(unique int id : @py_Class, + unique int parent : @py_ClassExpr ref); + +py_Functions(unique int id : @py_Function, + unique int parent : @py_Function_parent ref); + +py_Modules(unique int id : @py_Module); + +py_StringParts(unique int id : @py_StringPart, + int parent : @py_StringPart_list ref, + int idx : int ref); + +py_StringPart_lists(unique int id : @py_StringPart_list, + unique int parent : @py_Bytes_or_Str ref); + +py_aliases(unique int id : @py_alias, + int parent : @py_alias_list ref, + int idx : int ref); + +py_alias_lists(unique int id : @py_alias_list, + unique int parent : @py_Import ref); + +py_arguments(unique int id : @py_arguments, + unique int parent : @py_arguments_parent ref); + +py_bools(int parent : @py_bool_parent ref, + int idx : int ref); + +py_boolops(unique int id : @py_boolop, + int kind: int ref, + unique int parent : @py_BoolExpr ref); + +py_bytes(varchar(1) id : string ref, + int parent : @py_Bytes ref, + int idx : int ref); + +py_cmpops(unique int id : @py_cmpop, + int kind: int ref, + int parent : @py_cmpop_list ref, + int idx : int ref); + +py_cmpop_lists(unique int id : @py_cmpop_list, + unique int parent : @py_Compare ref); + +py_comprehensions(unique int id : @py_comprehension, + int parent : @py_comprehension_list ref, + int idx : int ref); + +py_comprehension_lists(unique int id : @py_comprehension_list, + unique int parent : @py_ListComp ref); + +py_dict_items(unique int id : @py_dict_item, + int kind: int ref, + int parent : @py_dict_item_list ref, + int idx : int ref); + +py_dict_item_lists(unique int id : @py_dict_item_list, + unique int parent : @py_dict_item_list_parent ref); + +py_exprs(unique int id : @py_expr, + int kind: int ref, + int parent : @py_expr_parent ref, + int idx : int ref); + +py_expr_contexts(unique int id : @py_expr_context, + int kind: int ref, + unique int parent : @py_expr_context_parent ref); + +py_expr_lists(unique int id : @py_expr_list, + int parent : @py_expr_list_parent ref, + int idx : int ref); + +py_ints(int id : int ref, + unique int parent : @py_ImportExpr ref); + +py_locations(unique int id : @location ref, + unique int parent : @py_location_parent ref); + +py_numbers(varchar(1) id : string ref, + int parent : @py_Num ref, + int idx : int ref); + +py_operators(unique int id : @py_operator, + int kind: int ref, + unique int parent : @py_BinaryExpr ref); + +py_parameter_lists(unique int id : @py_parameter_list, + unique int parent : @py_Function ref); + +py_patterns(unique int id : @py_pattern, + int kind: int ref, + int parent : @py_pattern_parent ref, + int idx : int ref); + +py_pattern_lists(unique int id : @py_pattern_list, + int parent : @py_pattern_list_parent ref, + int idx : int ref); + +py_stmts(unique int id : @py_stmt, + int kind: int ref, + int parent : @py_stmt_list ref, + int idx : int ref); + +py_stmt_lists(unique int id : @py_stmt_list, + int parent : @py_stmt_list_parent ref, + int idx : int ref); + +py_strs(varchar(1) id : string ref, + int parent : @py_str_parent ref, + int idx : int ref); + +py_str_lists(unique int id : @py_str_list, + unique int parent : @py_str_list_parent ref); + +py_type_parameters(unique int id : @py_type_parameter, + int kind: int ref, + int parent : @py_type_parameter_list ref, + int idx : int ref); + +py_type_parameter_lists(unique int id : @py_type_parameter_list, + unique int parent : @py_type_parameter_list_parent ref); + +py_unaryops(unique int id : @py_unaryop, + int kind: int ref, + unique int parent : @py_UnaryExpr ref); + +py_variables(int id : @py_variable ref, + unique int parent : @py_variable_parent ref); + +case @py_boolop.kind of + 0 = @py_And +| 1 = @py_Or; + +case @py_cmpop.kind of + 0 = @py_Eq +| 1 = @py_Gt +| 2 = @py_GtE +| 3 = @py_In +| 4 = @py_Is +| 5 = @py_IsNot +| 6 = @py_Lt +| 7 = @py_LtE +| 8 = @py_NotEq +| 9 = @py_NotIn; + +case @py_dict_item.kind of + 0 = @py_DictUnpacking +| 1 = @py_KeyValuePair +| 2 = @py_keyword; + +case @py_expr.kind of + 0 = @py_Attribute +| 1 = @py_BinaryExpr +| 2 = @py_BoolExpr +| 3 = @py_Bytes +| 4 = @py_Call +| 5 = @py_ClassExpr +| 6 = @py_Compare +| 7 = @py_Dict +| 8 = @py_DictComp +| 9 = @py_Ellipsis +| 10 = @py_FunctionExpr +| 11 = @py_GeneratorExp +| 12 = @py_IfExp +| 13 = @py_ImportExpr +| 14 = @py_ImportMember +| 15 = @py_Lambda +| 16 = @py_List +| 17 = @py_ListComp +| 18 = @py_Guard +| 19 = @py_Name +| 20 = @py_Num +| 21 = @py_Repr +| 22 = @py_Set +| 23 = @py_SetComp +| 24 = @py_Slice +| 25 = @py_Starred +| 26 = @py_Str +| 27 = @py_Subscript +| 28 = @py_Tuple +| 29 = @py_UnaryExpr +| 30 = @py_Yield +| 31 = @py_YieldFrom +| 32 = @py_TemplateDottedNotation +| 33 = @py_Filter +| 34 = @py_PlaceHolder +| 35 = @py_Await +| 36 = @py_Fstring +| 37 = @py_FormattedValue +| 38 = @py_AssignExpr +| 39 = @py_SpecialOperation; + +case @py_expr_context.kind of + 0 = @py_AugLoad +| 1 = @py_AugStore +| 2 = @py_Del +| 3 = @py_Load +| 4 = @py_Param +| 5 = @py_Store; + +case @py_operator.kind of + 0 = @py_Add +| 1 = @py_BitAnd +| 2 = @py_BitOr +| 3 = @py_BitXor +| 4 = @py_Div +| 5 = @py_FloorDiv +| 6 = @py_LShift +| 7 = @py_Mod +| 8 = @py_Mult +| 9 = @py_Pow +| 10 = @py_RShift +| 11 = @py_Sub +| 12 = @py_MatMult; + +case @py_pattern.kind of + 0 = @py_MatchAsPattern +| 1 = @py_MatchOrPattern +| 2 = @py_MatchLiteralPattern +| 3 = @py_MatchCapturePattern +| 4 = @py_MatchWildcardPattern +| 5 = @py_MatchValuePattern +| 6 = @py_MatchSequencePattern +| 7 = @py_MatchStarPattern +| 8 = @py_MatchMappingPattern +| 9 = @py_MatchDoubleStarPattern +| 10 = @py_MatchKeyValuePattern +| 11 = @py_MatchClassPattern +| 12 = @py_MatchKeywordPattern; + +case @py_stmt.kind of + 0 = @py_Assert +| 1 = @py_Assign +| 2 = @py_AugAssign +| 3 = @py_Break +| 4 = @py_Continue +| 5 = @py_Delete +| 6 = @py_ExceptStmt +| 7 = @py_ExceptGroupStmt +| 8 = @py_Exec +| 9 = @py_Expr_stmt +| 10 = @py_For +| 11 = @py_Global +| 12 = @py_If +| 13 = @py_Import +| 14 = @py_ImportStar +| 15 = @py_MatchStmt +| 16 = @py_Case +| 17 = @py_Nonlocal +| 18 = @py_Pass +| 19 = @py_Print +| 20 = @py_Raise +| 21 = @py_Return +| 22 = @py_Try +| 23 = @py_While +| 24 = @py_With +| 25 = @py_TemplateWrite +| 26 = @py_AnnAssign +| 27 = @py_TypeAlias; + +case @py_type_parameter.kind of + 0 = @py_ParamSpec +| 1 = @py_TypeVar +| 2 = @py_TypeVarTuple; + +case @py_unaryop.kind of + 0 = @py_Invert +| 1 = @py_Not +| 2 = @py_UAdd +| 3 = @py_USub; + +@py_Bytes_or_Str = @py_Bytes | @py_Str; + +@py_Function_parent = @py_DictComp | @py_FunctionExpr | @py_GeneratorExp | @py_Lambda | @py_ListComp | @py_SetComp; + +@py_arguments_parent = @py_FunctionExpr | @py_Lambda; + +@py_ast_node = @py_Class | @py_Function | @py_Module | @py_StringPart | @py_comprehension | @py_dict_item | @py_expr | @py_pattern | @py_stmt | @py_type_parameter; + +@py_bool_parent = @py_For | @py_Function | @py_Print | @py_With | @py_expr | @py_pattern; + +@py_dict_item_list_parent = @py_Call | @py_ClassExpr | @py_Dict; + +@py_expr_context_parent = @py_Attribute | @py_List | @py_Name | @py_PlaceHolder | @py_Starred | @py_Subscript | @py_TemplateDottedNotation | @py_Tuple; + +@py_expr_list_parent = @py_Assign | @py_BoolExpr | @py_Call | @py_ClassExpr | @py_Compare | @py_Delete | @py_Fstring | @py_Function | @py_List | @py_Print | @py_Set | @py_SpecialOperation | @py_Tuple | @py_arguments | @py_comprehension; + +@py_expr_or_stmt = @py_expr | @py_stmt; + +@py_expr_parent = @py_AnnAssign | @py_Assert | @py_Assign | @py_AssignExpr | @py_Attribute | @py_AugAssign | @py_Await | @py_BinaryExpr | @py_Call | @py_Case | @py_Compare | @py_DictComp | @py_DictUnpacking | @py_ExceptGroupStmt | @py_ExceptStmt | @py_Exec | @py_Expr_stmt | @py_Filter | @py_For | @py_FormattedValue | @py_Function | @py_FunctionExpr | @py_GeneratorExp | @py_Guard | @py_If | @py_IfExp | @py_ImportMember | @py_ImportStar | @py_KeyValuePair | @py_ListComp | @py_MatchAsPattern | @py_MatchCapturePattern | @py_MatchClassPattern | @py_MatchKeywordPattern | @py_MatchLiteralPattern | @py_MatchStmt | @py_MatchValuePattern | @py_ParamSpec | @py_Print | @py_Raise | @py_Repr | @py_Return | @py_SetComp | @py_Slice | @py_Starred | @py_Subscript | @py_TemplateDottedNotation | @py_TemplateWrite | @py_TypeAlias | @py_TypeVar | @py_TypeVarTuple | @py_UnaryExpr | @py_While | @py_With | @py_Yield | @py_YieldFrom | @py_alias | @py_arguments | @py_comprehension | @py_expr_list | @py_keyword | @py_parameter_list; + +@py_location_parent = @py_DictUnpacking | @py_KeyValuePair | @py_StringPart | @py_comprehension | @py_expr | @py_keyword | @py_pattern | @py_stmt | @py_type_parameter; + +@py_parameter = @py_Name | @py_Tuple; + +@py_pattern_list_parent = @py_MatchClassPattern | @py_MatchMappingPattern | @py_MatchOrPattern | @py_MatchSequencePattern; + +@py_pattern_parent = @py_Case | @py_MatchAsPattern | @py_MatchDoubleStarPattern | @py_MatchKeyValuePattern | @py_MatchKeywordPattern | @py_MatchStarPattern | @py_pattern_list; + +@py_scope = @py_Class | @py_Function | @py_Module; + +@py_stmt_list_parent = @py_Case | @py_Class | @py_ExceptGroupStmt | @py_ExceptStmt | @py_For | @py_Function | @py_If | @py_MatchStmt | @py_Module | @py_Try | @py_While | @py_With; + +@py_str_list_parent = @py_Global | @py_Nonlocal; + +@py_str_parent = @py_Attribute | @py_Class | @py_ClassExpr | @py_FormattedValue | @py_Function | @py_FunctionExpr | @py_ImportExpr | @py_ImportMember | @py_Module | @py_SpecialOperation | @py_Str | @py_StringPart | @py_TemplateDottedNotation | @py_keyword | @py_str_list; + +@py_type_parameter_list_parent = @py_ClassExpr | @py_Function | @py_TypeAlias; + +@py_variable_parent = @py_Name | @py_PlaceHolder; + + +/* + * End of auto-generated part + */ + + + +/* Map relative names to absolute names for imports */ +py_absolute_names(int module : @py_Module ref, + varchar(1) relname : string ref, + varchar(1) absname : string ref); + +py_exports(int id : @py_Module ref, + varchar(1) name : string ref); + +/* Successor information */ +py_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_true_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_exception_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_false_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_flow_bb_node(unique int flownode : @py_flow_node, + int realnode : @py_ast_node ref, + int basicblock : @py_flow_node ref, + int index : int ref); + +py_scope_flow(int flow : @py_flow_node ref, + int scope : @py_scope ref, + int kind : int ref); + +py_idoms(unique int node : @py_flow_node ref, + int immediate_dominator : @py_flow_node ref); + +py_ssa_phi(int phi : @py_ssa_var ref, + int arg: @py_ssa_var ref); + +py_ssa_var(unique int id : @py_ssa_var, + int var : @py_variable ref); + +py_ssa_use(int node: @py_flow_node ref, + int var : @py_ssa_var ref); + +py_ssa_defn(unique int id : @py_ssa_var ref, + int node: @py_flow_node ref); + +@py_base_var = @py_variable | @py_ssa_var; + +py_scopes(unique int node : @py_expr_or_stmt ref, + int scope : @py_scope ref); + +py_scope_location(unique int id : @location ref, + unique int scope : @py_scope ref); + +py_flags_versioned(varchar(1) name : string ref, + varchar(1) value : string ref, + varchar(1) version : string ref); + +py_syntax_error_versioned(unique int id : @location ref, + varchar(1) message : string ref, + varchar(1) version : string ref); + +py_comments(unique int id : @py_comment, + varchar(1) text : string ref, + unique int location : @location ref); + +/* Type information support */ + +py_cobjects(unique int obj : @py_cobject); + +py_cobjecttypes(unique int obj : @py_cobject ref, + int typeof : @py_cobject ref); + +py_cobjectnames(unique int obj : @py_cobject ref, + varchar(1) name : string ref); + +/* Kind should be 0 for introspection, > 0 from source, as follows: + 1 from C extension source + */ +py_cobject_sources(int obj : @py_cobject ref, + int kind : int ref); + +py_cmembers_versioned(int object : @py_cobject ref, + varchar(1) name : string ref, + int member : @py_cobject ref, + varchar(1) version : string ref); + +py_citems(int object : @py_cobject ref, + int index : int ref, + int member : @py_cobject ref); + +ext_argtype(int funcid : @py_object ref, + int arg : int ref, + int typeid : @py_object ref); + +ext_rettype(int funcid : @py_object ref, + int typeid : @py_object ref); + +ext_proptype(int propid : @py_object ref, + int typeid : @py_object ref); + +ext_argreturn(int funcid : @py_object ref, + int arg : int ref); + +py_special_objects(unique int obj : @py_cobject ref, + unique varchar(1) name : string ref); + +py_decorated_object(int object : @py_object ref, + int level: int ref); + +@py_object = @py_cobject | @py_flow_node; + +@py_source_element = @py_ast_node | @container; diff --git a/python/ql/lib/upgrades/728c6d65e61d808ae276013ebc15abc3a97aaef1/upgrade.properties b/python/ql/lib/upgrades/728c6d65e61d808ae276013ebc15abc3a97aaef1/upgrade.properties new file mode 100644 index 000000000000..7c5cd59e1c43 --- /dev/null +++ b/python/ql/lib/upgrades/728c6d65e61d808ae276013ebc15abc3a97aaef1/upgrade.properties @@ -0,0 +1,2 @@ +description: Add support for type parameter defaults. +compatibility: backwards From d905010aa8939a83a28bddd342a1bcb33e56d5f1 Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 9 Oct 2024 20:20:22 +0000 Subject: [PATCH 129/217] Python: Add change note --- .../lib/change-notes/2024-10-09-type-parameter-defaults.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 python/ql/lib/change-notes/2024-10-09-type-parameter-defaults.md diff --git a/python/ql/lib/change-notes/2024-10-09-type-parameter-defaults.md b/python/ql/lib/change-notes/2024-10-09-type-parameter-defaults.md new file mode 100644 index 000000000000..9c9ba7ee0371 --- /dev/null +++ b/python/ql/lib/change-notes/2024-10-09-type-parameter-defaults.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- + +- Added support for type parameter defaults, as specified in [PEP-696](https://peps.python.org/pep-0696/). From 417e60a46652dc95b57d6dd608fd44fbd0c934a1 Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 15 Oct 2024 11:22:54 +0000 Subject: [PATCH 130/217] Python: Update extractor version --- python/extractor/semmle/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/extractor/semmle/util.py b/python/extractor/semmle/util.py index 41af1d497b32..323ce6442110 100644 --- a/python/extractor/semmle/util.py +++ b/python/extractor/semmle/util.py @@ -10,7 +10,7 @@ #Semantic version of extractor. #Update this if any changes are made -VERSION = "7.0.0" +VERSION = "7.1.0" PY_EXTENSIONS = ".py", ".pyw" From af6fc676ce821830608b65b0308a26804ed40d8c Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Tue, 15 Oct 2024 13:34:38 +0200 Subject: [PATCH 131/217] Fix CWE coverage link in main index --- docs/codeql/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/index.html b/docs/codeql/index.html index 2f9dcd451ef7..981599627bd6 100644 --- a/docs/codeql/index.html +++ b/docs/codeql/index.html @@ -101,7 +101,7 @@

latest version of CodeQL...

- +
CodeQL coverage of CWEs
Detailed information on the coverage of Common Weakness Enumerations (CWEs) in the latest release...
From 168f7f5d34469fd37bc3067899d29ee5de710684 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Fri, 11 Oct 2024 14:21:17 +0200 Subject: [PATCH 132/217] C++: Add support for C++ requires expressions --- .../exprs.ql | 17 + .../old.dbscheme | 2323 +++++++++++++++ .../params.ql | 17 + .../semmlecode.cpp.dbscheme | 2316 +++++++++++++++ .../upgrade.properties | 5 + .../2014-10-11-requires-expressions.md | 4 + cpp/ql/lib/semmle/code/cpp/Concept.qll | 149 +- cpp/ql/lib/semmle/code/cpp/Parameter.qll | 14 +- cpp/ql/lib/semmle/code/cpp/PrintAST.qll | 83 +- .../code/cpp/internal/QualifiedName.qll | 7 +- cpp/ql/lib/semmlecode.cpp.dbscheme | 13 +- cpp/ql/lib/semmlecode.cpp.dbscheme.stats | 2641 +++++++++-------- .../old.dbscheme | 2316 +++++++++++++++ .../semmlecode.cpp.dbscheme | 2323 +++++++++++++++ .../upgrade.properties | 2 + .../library-tests/ir/ir/PrintAST.expected | 18 +- 16 files changed, 10925 insertions(+), 1323 deletions(-) create mode 100644 cpp/downgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/exprs.ql create mode 100644 cpp/downgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/old.dbscheme create mode 100644 cpp/downgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/params.ql create mode 100644 cpp/downgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/semmlecode.cpp.dbscheme create mode 100644 cpp/downgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/upgrade.properties create mode 100644 cpp/ql/lib/change-notes/2014-10-11-requires-expressions.md create mode 100644 cpp/ql/lib/upgrades/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/old.dbscheme create mode 100644 cpp/ql/lib/upgrades/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/semmlecode.cpp.dbscheme create mode 100644 cpp/ql/lib/upgrades/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/upgrade.properties diff --git a/cpp/downgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/exprs.ql b/cpp/downgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/exprs.ql new file mode 100644 index 000000000000..1a52d6d48f74 --- /dev/null +++ b/cpp/downgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/exprs.ql @@ -0,0 +1,17 @@ +class Expr extends @expr { + string toString() { none() } +} + +class Location extends @location_expr { + string toString() { none() } +} + +predicate isExprRequirement(Expr expr) { + exists(int kind | exprs(expr, kind, _) | kind = [391, 392, 393]) +} + +from Expr expr, int kind, int kind_new, Location location +where + exprs(expr, kind, location) and + if isExprRequirement(expr) then kind_new = 1 else kind_new = kind +select expr, kind_new, location diff --git a/cpp/downgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/old.dbscheme b/cpp/downgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/old.dbscheme new file mode 100644 index 000000000000..e51fad7a2436 --- /dev/null +++ b/cpp/downgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/old.dbscheme @@ -0,0 +1,2323 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/downgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/params.ql b/cpp/downgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/params.ql new file mode 100644 index 000000000000..db4e11c75d51 --- /dev/null +++ b/cpp/downgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/params.ql @@ -0,0 +1,17 @@ +class Parameter extends @parameter { + string toString() { none() } +} + +class ParameterizedElement extends @parameterized_element { + string toString() { none() } +} + +class Type extends @type { + string toString() { none() } +} + +from Parameter param, ParameterizedElement pe, int index, Type type +where + params(param, pe, index, type) and + not pe instanceof @requires_expr +select param, pe, index, type diff --git a/cpp/downgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/semmlecode.cpp.dbscheme b/cpp/downgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/semmlecode.cpp.dbscheme new file mode 100644 index 000000000000..6f5d51e89e76 --- /dev/null +++ b/cpp/downgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/semmlecode.cpp.dbscheme @@ -0,0 +1,2316 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/downgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/upgrade.properties b/cpp/downgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/upgrade.properties new file mode 100644 index 000000000000..68c8b688e5b4 --- /dev/null +++ b/cpp/downgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/upgrade.properties @@ -0,0 +1,5 @@ +description: Support C++20 requires expressions +compatibility: partial +compound_requirement_is_noexcept.rel: delete +exprs.rel: run exprs.qlo +params.rel: run params.qlo diff --git a/cpp/ql/lib/change-notes/2014-10-11-requires-expressions.md b/cpp/ql/lib/change-notes/2014-10-11-requires-expressions.md new file mode 100644 index 000000000000..3fabf02c500e --- /dev/null +++ b/cpp/ql/lib/change-notes/2014-10-11-requires-expressions.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* Added classes `RequiresExpr`, `SimpleRequirementExpr`, `TypeRequirementExpr`, `CompoundRequirementExpr`, and `NestedRequirementExpr` to represent C++20 requires expressions and the simple, type, compound, and nested requirements that can occur in `requires` expressions. diff --git a/cpp/ql/lib/semmle/code/cpp/Concept.qll b/cpp/ql/lib/semmle/code/cpp/Concept.qll index d6245ecea825..d9b00e59fd5f 100644 --- a/cpp/ql/lib/semmle/code/cpp/Concept.qll +++ b/cpp/ql/lib/semmle/code/cpp/Concept.qll @@ -6,9 +6,156 @@ import semmle.code.cpp.exprs.Expr /** * A C++ requires expression. + * + * For example, with `T` and `U` template parameters: + * ```cpp + * requires (T x, U y) { x + y; }; + * ``` */ class RequiresExpr extends Expr, @requires_expr { - override string toString() { result = "requires ..." } + override string toString() { + if exists(this.getAParameter()) + then result = "requires(...) { ... }" + else result = "requires { ... }" + } override string getAPrimaryQlClass() { result = "RequiresExpr" } + + /** + * Gets a requirement in this requires expression. + */ + RequirementExpr getARequirement() { result = this.getAChild() } + + /** + * Gets the nth requirement in this requires expression. + */ + RequirementExpr getRequirement(int n) { result = this.getChild(n) } + + /** + * Gets the number of requirements in this requires expression. + */ + int getNumberOfRequirements() { result = count(this.getARequirement()) } + + /** + * Gets a parameter of this requires expression, if any. + */ + Parameter getAParameter() { result.getRequiresExpr() = underlyingElement(this) } + + /** + * Gets the the nth parameter of this requires expression. + */ + Parameter getParameter(int n) { + result.getRequiresExpr() = underlyingElement(this) and result.getIndex() = n + } + + /** + * Gets the number of parameters of this requires expression. + */ + int getNumberOfParameters() { result = count(this.getAParameter()) } +} + +/** + * A C++ requirement in a requires expression. + */ +class RequirementExpr extends Expr { } + +/** + * A C++ simple requirement in a requires expression. + * + * For example, if: + * ```cpp + * requires(T x, U y) { x + y; }; + * ``` + * with `T` and `U` template parameters, then `x + y;` is a simple requirement. + */ +class SimpleRequirementExpr extends RequirementExpr { + SimpleRequirementExpr() { + this.getParent() instanceof RequiresExpr and + not this instanceof TypeRequirementExpr and + not this instanceof CompoundRequirementExpr and + not this instanceof NestedRequirementExpr + } + + override string getAPrimaryQlClass() { result = "SimpleRequirementExpr" } +} + +/** + * A C++ type requirement in a requires expression. + * + * For example, if: + * ```cpp + * requires { typename T::a_field; }; + * ``` + * with `T` a template parameter, then `typename T::a_field;` is a type requirement. + */ +class TypeRequirementExpr extends RequirementExpr, TypeName { + TypeRequirementExpr() { this.getParent() instanceof RequiresExpr } + + override string getAPrimaryQlClass() { result = "TypeRequirementExpr" } +} + +/** + * A C++ compound requirement in a requires expression. + * + * For example, if: + * ```cpp + * requires(T x) { { x } noexcept -> std::same_as; }; + * ``` + * with `T` a template parameter, then `{ x } noexcept -> std::same_as;` is + * a compound requirement. + */ +class CompoundRequirementExpr extends RequirementExpr, @compound_requirement { + override string toString() { + if exists(this.getReturnTypeRequirement()) + then result = "{ ... } -> ..." + else result = "{ ... }" + } + + override string getAPrimaryQlClass() { result = "CompoundRequirementExpr" } + + /** + * Gets the expression from the compound requirement. + */ + Expr getExpr() { result = this.getChild(0) } + + /** + * Gets the return type requirement from the compound requirement, if any. + */ + Expr getReturnTypeRequirement() { result = this.getChild(1) } + + /** + * Holds if the expression from the compound requirement must not be + * potentially throwing. + */ + predicate isNoExcept() { compound_requirement_is_noexcept(underlyingElement(this)) } +} + +/** + * A C++ nested requirement in a requires expression. + * + * For example, if: + * ```cpp + * requires { requires std::is_same::value; }; + * ``` + * with `T` a template parameter, then `requires std::is_same::value;` is + * a nested requirement. + */ +class NestedRequirementExpr extends Expr, @nested_requirement { + override string toString() { result = "requires ..." } + + override string getAPrimaryQlClass() { result = "NestedRequirementExpr" } + + /** + * Gets the constraint from the nested requirement. + */ + Expr getConstraint() { result = this.getChild(0) } +} + +/** + * A C++ concept id expression. + */ +class ConceptIdExpr extends RequirementExpr, @concept_id { + override string toString() { result = "concept<...>" } + + override string getAPrimaryQlClass() { result = "ConceptIdExpr" } } diff --git a/cpp/ql/lib/semmle/code/cpp/Parameter.qll b/cpp/ql/lib/semmle/code/cpp/Parameter.qll index 814fa7344085..49e47d40ef0a 100644 --- a/cpp/ql/lib/semmle/code/cpp/Parameter.qll +++ b/cpp/ql/lib/semmle/code/cpp/Parameter.qll @@ -7,8 +7,8 @@ import semmle.code.cpp.Declaration private import semmle.code.cpp.internal.ResolveClass /** - * A C/C++ function parameter or catch block parameter. For example the - * function parameter `p` and the catch block parameter `e` in the following + * A C/C++ function parameter, catch block parameter, or requires expression parameter. + * For example the function parameter `p` and the catch block parameter `e` in the following * code: * ``` * void myFunction(int p) { @@ -20,8 +20,8 @@ private import semmle.code.cpp.internal.ResolveClass * } * ``` * - * For catch block parameters, there is a one-to-one correspondence between - * the `Parameter` and its `ParameterDeclarationEntry`. + * For catch block parameters and expression , there is a one-to-one + * correspondence between the `Parameter` and its `VariableDeclarationEntry`. * * For function parameters, there is a one-to-many relationship between * `Parameter` and `ParameterDeclarationEntry`, because one function can @@ -118,6 +118,12 @@ class Parameter extends LocalScopeVariable, @parameter { */ BlockStmt getCatchBlock() { params(underlyingElement(this), unresolveElement(result), _, _) } + /** + * Gets the requires expression to which the parameter belongs, if it is a + * requires expression parameter. + */ + RequiresExpr getRequiresExpr() { params(underlyingElement(this), unresolveElement(result), _, _) } + /** * Gets the zero-based index of this parameter. * diff --git a/cpp/ql/lib/semmle/code/cpp/PrintAST.qll b/cpp/ql/lib/semmle/code/cpp/PrintAST.qll index 3bdbd637cca6..cc5a8d6c3355 100644 --- a/cpp/ql/lib/semmle/code/cpp/PrintAST.qll +++ b/cpp/ql/lib/semmle/code/cpp/PrintAST.qll @@ -82,6 +82,8 @@ private Declaration getAnEnclosingDeclaration(Locatable ast) { or result = ast.(Parameter).getCatchBlock().getEnclosingFunction() or + result = ast.(Parameter).getRequiresExpr().getEnclosingFunction() + or result = ast.(Expr).getEnclosingDeclaration() or result = ast.(Initializer).getDeclaration() @@ -101,7 +103,10 @@ private newtype TPrintAstNode = stmt.getADeclarationEntry() = entry and shouldPrintDeclaration(stmt.getEnclosingFunction()) } or - TParametersNode(Function func) { shouldPrintDeclaration(func) } or + TFunctionParametersNode(Function func) { shouldPrintDeclaration(func) } or + TRequiresExprParametersNode(RequiresExpr req) { + shouldPrintDeclaration(getAnEnclosingDeclaration(req)) + } or TConstructorInitializersNode(Constructor ctor) { ctor.hasEntryPoint() and shouldPrintDeclaration(ctor) @@ -305,14 +310,14 @@ class ExprNode extends AstNode { ExprNode() { expr = ast } - override AstNode getChildInternal(int childIndex) { - result.getAst() = expr.getChild(childIndex) + override PrintAstNode getChildInternal(int childIndex) { + result.(AstNode).getAst() = expr.getChild(childIndex) or childIndex = max(int index | exists(expr.getChild(index)) or index = 0) + 1 and - result.getAst() = expr.(ConditionDeclExpr).getInitializingExpr() + result.(AstNode).getAst() = expr.(ConditionDeclExpr).getInitializingExpr() or exists(int destructorIndex | - result.getAst() = expr.getImplicitDestructorCall(destructorIndex) and + result.(AstNode).getAst() = expr.getImplicitDestructorCall(destructorIndex) and childIndex = destructorIndex + max(int index | exists(expr.getChild(index)) or index = 0) + 2 ) } @@ -331,7 +336,8 @@ class ExprNode extends AstNode { } override string getChildAccessorPredicateInternal(int childIndex) { - result = getChildAccessorWithoutConversions(ast, this.getChildInternal(childIndex).getAst()) + result = + getChildAccessorWithoutConversions(ast, this.getChildInternal(childIndex).(AstNode).getAst()) } /** @@ -411,6 +417,26 @@ class StmtExprNode extends ExprNode { } } +/** + * A node representing a `RequiresExpr` + */ +class RequiresExprNode extends ExprNode { + override RequiresExpr expr; + + override PrintAstNode getChildInternal(int childIndex) { + result = super.getChildInternal(childIndex) + or + childIndex = -1 and + result.(RequiresExprParametersNode).getRequiresExpr() = expr + } + + override string getChildAccessorPredicateInternal(int childIndex) { + result = super.getChildAccessorPredicateInternal(childIndex) + or + childIndex = -1 and result = "" + } +} + /** * A node representing a `DeclarationEntry`. */ @@ -570,10 +596,10 @@ class InitializerNode extends AstNode { /** * A node representing the parameters of a `Function`. */ -class ParametersNode extends PrintAstNode, TParametersNode { +class FunctionParametersNode extends PrintAstNode, TFunctionParametersNode { Function func; - ParametersNode() { this = TParametersNode(func) } + FunctionParametersNode() { this = TFunctionParametersNode(func) } final override string toString() { result = "" } @@ -594,6 +620,33 @@ class ParametersNode extends PrintAstNode, TParametersNode { final Function getFunction() { result = func } } +/** + * A node representing the parameters of a `RequiresExpr`. + */ +class RequiresExprParametersNode extends PrintAstNode, TRequiresExprParametersNode { + RequiresExpr req; + + RequiresExprParametersNode() { this = TRequiresExprParametersNode(req) } + + final override string toString() { result = "" } + + final override Location getLocation() { result = getRepresentativeLocation(req) } + + override AstNode getChildInternal(int childIndex) { + result.getAst() = req.getParameter(childIndex) + } + + override string getChildAccessorPredicateInternal(int childIndex) { + exists(this.getChildInternal(childIndex)) and + result = "getParameter(" + childIndex.toString() + ")" + } + + /** + * Gets the `RequiresExpr` for which this node represents the parameters. + */ + final RequiresExpr getRequiresExpr() { result = req } +} + /** * A node representing the initializer list of a `Constructor`. */ @@ -697,7 +750,7 @@ class FunctionNode extends FunctionOrGlobalOrNamespaceVariableNode { override PrintAstNode getChildInternal(int childIndex) { childIndex = 0 and - result.(ParametersNode).getFunction() = func + result.(FunctionParametersNode).getFunction() = func or childIndex = 1 and result.(ConstructorInitializersNode).getConstructor() = func @@ -921,6 +974,11 @@ private predicate namedExprChildPredicates(Expr expr, Element ele, string pred) or expr.(CommaExpr).getRightOperand() = ele and pred = "getRightOperand()" or + expr.(CompoundRequirementExpr).getExpr() = ele and pred = "getExpr()" + or + expr.(CompoundRequirementExpr).getReturnTypeRequirement() = ele and + pred = "getReturnTypeRequirement()" + or expr.(ConditionDeclExpr).getVariableAccess() = ele and pred = "getVariableAccess()" or expr.(ConstructorFieldInit).getExpr() = ele and pred = "getExpr()" @@ -941,6 +999,8 @@ private predicate namedExprChildPredicates(Expr expr, Element ele, string pred) or expr.(LambdaExpression).getInitializer() = ele and pred = "getInitializer()" or + expr.(NestedRequirementExpr).getConstraint() = ele and pred = "getConstraint()" + or expr.(NewOrNewArrayExpr).getAllocatorCall() = ele and pred = "getAllocatorCall()" or expr.(NewOrNewArrayExpr).getAlignmentArgument() = ele and pred = "getAlignmentArgument()" @@ -980,6 +1040,11 @@ private predicate namedExprChildPredicates(Expr expr, Element ele, string pred) or expr.(UnaryOperation).getOperand() = ele and pred = "getOperand()" or + exists(int n | + expr.(RequiresExpr).getRequirement(n) = ele and + pred = "getRequirement(" + n + ")" + ) + or expr.(SizeofExprOperator).getExprOperand() = ele and pred = "getExprOperand()" or expr.(StmtExpr).getStmt() = ele and pred = "getStmt()" diff --git a/cpp/ql/lib/semmle/code/cpp/internal/QualifiedName.qll b/cpp/ql/lib/semmle/code/cpp/internal/QualifiedName.qll index 6d7950487343..54de2c953634 100644 --- a/cpp/ql/lib/semmle/code/cpp/internal/QualifiedName.qll +++ b/cpp/ql/lib/semmle/code/cpp/internal/QualifiedName.qll @@ -181,12 +181,7 @@ class VariableDeclarationEntry extends @var_decl { string getName() { var_decls(this, _, _, result, _) and result != "" } } -class Parameter extends LocalScopeVariable, @parameter { - @functionorblock function; - int index; - - Parameter() { params(this, function, index, _) } -} +class Parameter extends LocalScopeVariable, @parameter { } class GlobalOrNamespaceVariable extends Variable, @globalvariable { } diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index 6f5d51e89e76..e51fad7a2436 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -534,7 +534,7 @@ static_asserts( #keyset[function, index, type_id] params( int id: @parameter, - int function: @functionorblock ref, + int function: @parameterized_element ref, int index: int ref, int type_id: @type ref ); @@ -1791,6 +1791,9 @@ case @expr.kind of | 388 = @datasizeof | 389 = @c11_generic | 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id ; @var_args_expr = @vastartexpr @@ -1909,6 +1912,10 @@ case @expr.kind of | @istriviallyrelocatable ; +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + new_allocated_type( unique int expr: @new_expr ref, int type_id: @type ref @@ -2168,11 +2175,11 @@ stmt_decl_entry_bind( int decl_entry: @element ref ); -@functionorblock = @function | @stmt_block; +@parameterized_element = @function | @stmt_block | @requires_expr; blockscope( unique int block: @stmt_block ref, - int enclosing: @functionorblock ref + int enclosing: @parameterized_element ref ); @jump = @stmt_goto | @stmt_break | @stmt_continue; diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index 20534e223c94..7f0d99272e7e 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -18,7 +18,7 @@ @location_default - 29768202 + 29764890 @location_stmt @@ -34,35 +34,35 @@ @file - 123267 + 123251 @folder - 16342 + 16340 @macro_expansion - 33257556 + 33257760 @other_macro_reference - 859138 + 859029 @function - 4179893 + 4179363 @fun_decl - 4544093 + 4543516 @var_decl - 8040412 + 8039391 @type_decl - 3283868 + 3283451 @namespace_decl @@ -70,7 +70,7 @@ @using_declaration - 363266 + 363219 @using_directive @@ -86,7 +86,7 @@ @parameter - 6191397 + 6190611 @membervariable @@ -98,7 +98,7 @@ @localvariable - 576946 + 576945 @enumconstant @@ -330,23 +330,23 @@ @pointer - 568245 + 568173 @type_with_specifiers - 852134 + 852026 @array - 110193 + 110179 @routineptr - 625426 + 625424 @reference - 1276567 + 1276405 @gnu_vector @@ -358,7 +358,7 @@ @rvalue_reference - 333382 + 333340 @block @@ -366,15 +366,15 @@ @decltype - 27081 + 27078 @usertype - 5235606 + 5234008 @mangledname - 6062526 + 6061757 @type_mention @@ -382,19 +382,19 @@ @routinetype - 538891 + 538889 @ptrtomember - 37820 + 37815 @specifier - 24746 + 24743 @gnuattribute - 553770 + 553700 @stdattribute @@ -410,15 +410,15 @@ @alignas - 4669 + 4668 @attribute_arg_token - 25213 + 25210 @attribute_arg_constant_expr - 318441 + 318400 @attribute_arg_empty @@ -438,11 +438,11 @@ @derivation - 391566 + 391564 @frienddecl - 707049 + 707046 @comment @@ -450,7 +450,7 @@ @namespace - 12139 + 12138 @specialnamequalifyingelement @@ -482,7 +482,7 @@ @parexpr - 3587464 + 3587463 @arithnegexpr @@ -582,11 +582,11 @@ @gtexpr - 104123 + 104110 @ltexpr - 101789 + 101776 @geexpr @@ -662,7 +662,7 @@ @subscriptexpr - 364478 + 364477 @callexpr @@ -738,11 +738,11 @@ @reference_to - 1572188 + 1572182 @ref_indirect - 1901640 + 1901633 @vacuous_destructor_call @@ -830,7 +830,7 @@ @sizeof_pack - 5603 + 5602 @hasassignexpr @@ -934,7 +934,7 @@ @ctordirectinit - 110607 + 110606 @ctorvirtualinit @@ -962,7 +962,7 @@ @static_cast - 215647 + 215648 @reinterpret_cast @@ -978,7 +978,7 @@ @lambdaexpr - 21478 + 21475 @param_ref @@ -1022,7 +1022,7 @@ @istriviallycopyableexpr - 3735 + 3734 @isliteraltypeexpr @@ -1358,11 +1358,23 @@ @requires_expr + 8 + + + @nested_requirement 1 + + @compound_requirement + 2 + + + @concept_id + 2 + @lambdacapture - 28015 + 28011 @stmt_expr @@ -1414,11 +1426,11 @@ @stmt_decl - 593118 + 593121 @stmt_empty - 192683 + 192682 @stmt_continue @@ -1450,7 +1462,7 @@ @stmt_range_based_for - 8404 + 8403 @stmt_handler @@ -1466,31 +1478,31 @@ @ppd_if - 667232 + 667148 @ppd_ifdef - 263344 + 263311 @ppd_ifndef - 266612 + 266579 @ppd_elif - 25213 + 25210 @ppd_else - 209181 + 209154 @ppd_endif - 1197190 + 1197038 @ppd_plain_include - 311437 + 311398 @ppd_define @@ -1498,7 +1510,7 @@ @ppd_undef - 258675 + 258642 @ppd_include_next @@ -2152,7 +2164,7 @@ seconds - 9348 + 8429 @@ -2233,12 +2245,12 @@ 3 4 - 759 + 639 4 5 - 239 + 359 6 @@ -2247,33 +2259,33 @@ 8 - 9 - 79 + 10 + 159 - 9 + 10 11 - 159 + 119 11 - 13 + 15 159 - 14 - 17 + 16 + 19 159 - 18 - 22 + 19 + 24 159 - 25 - 91 - 159 + 40 + 89 + 119 @@ -2341,22 +2353,22 @@ 3 4 - 1358 + 1438 4 5 - 399 + 319 5 6 - 279 + 199 6 7 - 319 + 439 7 @@ -2365,18 +2377,18 @@ 8 - 9 - 239 + 10 + 279 - 9 - 23 + 10 + 26 279 - 25 - 88 - 279 + 28 + 81 + 199 @@ -2427,13 +2439,13 @@ 79 - 138 - 139 + 125 + 126 39 - 144 - 145 + 128 + 129 39 @@ -2450,27 +2462,27 @@ 1 2 - 4434 + 3635 2 3 - 2437 + 1917 3 4 - 1158 + 1558 4 - 5 - 679 + 6 + 719 - 5 - 46 - 639 + 6 + 48 + 599 @@ -2486,32 +2498,37 @@ 1 2 - 4115 + 3595 2 3 - 2037 + 1438 3 4 - 998 + 1358 4 5 - 918 + 639 5 - 7 - 759 + 6 + 479 - 7 - 74 - 519 + 6 + 8 + 679 + + + 8 + 73 + 239 @@ -2527,12 +2544,12 @@ 1 2 - 7191 + 6512 2 3 - 2157 + 1917 @@ -2876,7 +2893,7 @@ cpu_seconds - 7145 + 7507 elapsed_seconds @@ -2926,17 +2943,17 @@ 1 2 - 5757 + 6242 2 3 - 903 + 835 3 - 20 - 485 + 15 + 428 @@ -2952,12 +2969,12 @@ 1 2 - 6524 + 6976 2 3 - 620 + 530 @@ -2970,10 +2987,20 @@ 12 + + 1 + 2 + 11 + 2 3 - 33 + 11 + + + 3 + 4 + 11 6 @@ -2981,43 +3008,43 @@ 11 - 8 - 9 + 9 + 10 11 - 10 - 11 + 11 + 12 11 - 13 - 14 + 16 + 17 11 - 51 - 52 + 49 + 50 11 - 164 - 165 + 154 + 155 11 - 171 - 172 + 160 + 161 11 - 191 - 192 + 204 + 205 11 - 243 - 244 + 248 + 249 11 @@ -3031,10 +3058,20 @@ 12 + + 1 + 2 + 11 + 2 3 - 33 + 11 + + + 3 + 4 + 11 6 @@ -3042,43 +3079,43 @@ 11 - 8 - 9 + 9 + 10 11 - 10 - 11 + 11 + 12 11 - 13 - 14 + 16 + 17 11 - 49 - 50 + 47 + 48 11 - 121 - 122 + 118 + 119 11 - 123 - 124 + 128 + 129 11 - 138 - 139 + 149 + 150 11 - 214 - 215 + 222 + 223 11 @@ -4851,31 +4888,31 @@ locations_default - 29768202 + 29764890 id - 29768202 + 29764890 container - 123267 + 123251 startLine - 2095549 + 2095283 startColumn - 36886 + 36882 endLine - 2099752 + 2099485 endColumn - 48093 + 48086 @@ -4889,7 +4926,7 @@ 1 2 - 29768202 + 29764890 @@ -4905,7 +4942,7 @@ 1 2 - 29768202 + 29764890 @@ -4921,7 +4958,7 @@ 1 2 - 29768202 + 29764890 @@ -4937,7 +4974,7 @@ 1 2 - 29768202 + 29764890 @@ -4953,7 +4990,7 @@ 1 2 - 29768202 + 29764890 @@ -4969,67 +5006,67 @@ 1 11 - 9805 + 9804 11 18 - 10272 + 10270 18 30 - 9338 + 9337 30 42 - 9805 + 9804 43 61 - 9805 + 9804 61 79 - 9338 + 9337 80 106 - 9805 + 9804 108 149 - 9338 + 9337 149 199 - 9338 + 9337 206 291 - 9338 + 9337 304 469 - 9338 + 9337 482 850 - 9338 + 9337 936 2380 - 8404 + 8403 @@ -5045,67 +5082,67 @@ 1 8 - 9338 + 9337 8 13 - 9338 + 9337 13 20 - 9805 + 9804 20 32 - 9338 + 9337 32 43 - 9805 + 9804 44 61 - 9338 + 9337 62 72 - 9338 + 9337 73 93 - 9338 + 9337 97 128 - 9338 + 9337 128 180 - 9338 + 9337 180 267 - 9338 + 9337 277 414 - 9338 + 9337 439 1465 - 9338 + 9337 1557 @@ -5126,67 +5163,67 @@ 1 4 - 8871 + 8870 4 5 - 7937 + 7936 5 6 - 7470 + 7469 6 8 - 11206 + 11204 8 10 - 9338 + 9337 10 15 - 10739 + 10737 15 23 - 9805 + 9804 23 28 - 11206 + 11204 28 34 - 9805 + 9804 34 44 - 9338 + 9337 44 55 - 9338 + 9337 55 66 - 9805 + 9804 66 77 - 8404 + 8403 @@ -5202,67 +5239,67 @@ 1 8 - 9338 + 9337 8 13 - 9338 + 9337 13 20 - 9805 + 9804 20 32 - 9338 + 9337 32 43 - 9805 + 9804 43 60 - 9338 + 9337 61 71 - 9338 + 9337 72 93 - 9338 + 9337 94 127 - 9338 + 9337 128 179 - 9338 + 9337 180 268 - 9338 + 9337 278 413 - 9338 + 9337 437 1465 - 9338 + 9337 1554 @@ -5283,67 +5320,67 @@ 1 9 - 9805 + 9804 9 13 - 9338 + 9337 13 18 - 9338 + 9337 18 26 - 10272 + 10270 27 33 - 9338 + 9337 33 39 - 9338 + 9337 39 47 - 10272 + 10270 47 53 - 9338 + 9337 53 60 - 10272 + 10270 60 66 - 9338 + 9337 66 74 - 9805 + 9804 74 78 - 9805 + 9804 78 90 - 7003 + 7002 @@ -5359,52 +5396,52 @@ 1 2 - 583186 + 583112 2 3 - 314239 + 314199 3 4 - 195640 + 195615 4 6 - 162022 + 162001 6 10 - 183033 + 183010 10 16 - 162956 + 162935 16 25 - 169026 + 169004 25 46 - 161088 + 161067 46 169 - 157353 + 157333 169 265 - 7003 + 7002 @@ -5420,42 +5457,42 @@ 1 2 - 871278 + 871167 2 3 - 273616 + 273582 3 5 - 193773 + 193748 5 8 - 173695 + 173673 8 13 - 188169 + 188146 13 20 - 161088 + 161067 20 51 - 159687 + 159667 51 265 - 74240 + 74231 @@ -5471,47 +5508,47 @@ 1 2 - 612135 + 612058 2 3 - 313305 + 313265 3 4 - 198442 + 198417 4 6 - 183033 + 183010 6 9 - 173228 + 173206 9 13 - 163423 + 163402 13 19 - 174629 + 174606 19 29 - 164823 + 164802 29 52 - 112528 + 112514 @@ -5527,22 +5564,22 @@ 1 2 - 1531974 + 1531779 2 3 - 348791 + 348747 3 5 - 162022 + 162001 5 16 - 52762 + 52755 @@ -5558,47 +5595,47 @@ 1 2 - 587855 + 587781 2 3 - 316106 + 316066 3 4 - 197508 + 197483 4 6 - 168559 + 168537 6 9 - 158286 + 158266 9 14 - 170893 + 170872 14 21 - 175096 + 175073 21 32 - 162489 + 162468 32 63 - 157819 + 157799 64 @@ -6014,52 +6051,52 @@ 1 2 - 593459 + 593383 2 3 - 306301 + 306262 3 4 - 198442 + 198417 4 6 - 159687 + 159667 6 10 - 182566 + 182543 10 16 - 162022 + 162001 16 25 - 171360 + 171338 25 46 - 158753 + 158733 46 161 - 158286 + 158266 162 265 - 8871 + 8870 @@ -6075,47 +6112,47 @@ 1 2 - 886686 + 886574 2 3 - 260076 + 260043 3 4 - 125135 + 125119 4 6 - 141010 + 140992 6 10 - 184901 + 184877 10 15 - 168559 + 168537 15 26 - 163423 + 163402 26 120 - 158286 + 158266 121 265 - 11673 + 11671 @@ -6131,22 +6168,22 @@ 1 2 - 1529639 + 1529445 2 3 - 341787 + 341744 3 5 - 170893 + 170872 5 10 - 57431 + 57424 @@ -6162,47 +6199,47 @@ 1 2 - 623342 + 623262 2 3 - 303499 + 303461 3 4 - 201710 + 201685 4 6 - 183967 + 183944 6 9 - 169959 + 169938 9 13 - 166691 + 166670 13 19 - 175096 + 175073 19 29 - 161088 + 161067 29 52 - 114396 + 114381 @@ -6218,52 +6255,52 @@ 1 2 - 599995 + 599919 2 3 - 306301 + 306262 3 4 - 197041 + 197016 4 6 - 169026 + 169004 6 9 - 156419 + 156399 9 14 - 169026 + 169004 14 21 - 177897 + 177875 21 32 - 162022 + 162001 32 60 - 158286 + 158266 60 65 - 3735 + 3734 @@ -6279,62 +6316,62 @@ 1 2 - 5136 + 5135 2 8 - 3735 + 3734 9 186 - 3735 + 3734 193 288 - 3735 + 3734 294 495 - 3735 + 3734 503 - 554 - 3735 + 555 + 3734 561 633 - 3735 + 3734 640 758 - 3735 + 3734 758 869 - 3735 + 3734 875 1074 - 3735 + 3734 1074 1281 - 3735 + 3734 1289 1590 - 3735 + 3734 1685 @@ -6355,62 +6392,62 @@ 1 2 - 5603 + 5602 2 5 - 3735 + 3734 5 65 - 3735 + 3734 70 100 - 3735 + 3734 100 111 - 3735 + 3734 112 122 - 4202 + 4201 122 140 - 3735 + 3734 143 153 - 3735 + 3734 153 161 - 4202 + 4201 161 173 - 4202 + 4201 173 178 - 3735 + 3734 188 265 - 3735 + 3734 @@ -6426,62 +6463,62 @@ 1 2 - 5603 + 5602 2 8 - 3735 + 3734 9 105 - 3735 + 3734 155 241 - 3735 + 3734 253 336 - 3735 + 3734 340 426 - 3735 + 3734 434 488 - 3735 + 3734 489 572 - 3735 + 3734 573 623 - 3735 + 3734 626 696 - 4202 + 4201 701 813 - 3735 + 3734 818 1095 - 3735 + 3734 1172 @@ -6507,32 +6544,32 @@ 2 4 - 3735 + 3734 4 8 - 4202 + 4201 8 15 - 3735 + 3734 15 23 - 3735 + 3734 23 29 - 3735 + 3734 29 35 - 4202 + 4201 35 @@ -6552,12 +6589,12 @@ 44 46 - 3735 + 3734 46 49 - 3735 + 3734 49 @@ -6578,62 +6615,62 @@ 1 2 - 5603 + 5602 2 8 - 3735 + 3734 9 156 - 3735 + 3734 159 240 - 3735 + 3734 251 335 - 3735 + 3734 342 430 - 3735 + 3734 432 490 - 3735 + 3734 490 573 - 3735 + 3734 574 622 - 3735 + 3734 626 698 - 3735 + 3734 700 798 - 3735 + 3734 811 987 - 3735 + 3734 1096 @@ -10562,23 +10599,23 @@ numlines - 1383959 + 1383783 element_id - 1376955 + 1376780 num_lines - 101789 + 101776 num_code - 84979 + 84969 num_comment - 59766 + 59758 @@ -10592,12 +10629,12 @@ 1 2 - 1369951 + 1369777 2 3 - 7003 + 7002 @@ -10613,7 +10650,7 @@ 1 2 - 1370885 + 1370711 2 @@ -10634,7 +10671,7 @@ 1 2 - 1376955 + 1376780 @@ -10650,22 +10687,22 @@ 1 2 - 68170 + 68162 2 3 - 12139 + 12138 3 4 - 7470 + 7469 4 21 - 7937 + 7936 29 @@ -10686,22 +10723,22 @@ 1 2 - 70505 + 70496 2 3 - 12139 + 12138 3 4 - 8404 + 8403 4 6 - 9338 + 9337 6 @@ -10722,17 +10759,17 @@ 1 2 - 69571 + 69562 2 3 - 14941 + 14939 3 4 - 10739 + 10737 4 @@ -10753,12 +10790,12 @@ 1 2 - 52762 + 52755 2 3 - 14474 + 14472 3 @@ -10773,7 +10810,7 @@ 44 922 - 4669 + 4668 @@ -10789,12 +10826,12 @@ 1 2 - 52762 + 52755 2 3 - 16809 + 16807 3 @@ -10825,22 +10862,22 @@ 1 2 - 53229 + 53222 2 3 - 15875 + 15873 3 5 - 7470 + 7469 5 7 - 5136 + 5135 7 @@ -10861,27 +10898,27 @@ 1 2 - 34552 + 34547 2 3 - 9338 + 9337 3 4 - 4202 + 4201 4 6 - 4669 + 4668 6 11 - 5136 + 5135 17 @@ -10902,27 +10939,27 @@ 1 2 - 34552 + 34547 2 3 - 9338 + 9337 3 4 - 4202 + 4201 4 6 - 4669 + 4668 6 8 - 4669 + 4668 10 @@ -10943,27 +10980,27 @@ 1 2 - 34552 + 34547 2 3 - 9338 + 9337 3 4 - 4202 + 4201 4 6 - 4669 + 4668 6 10 - 4669 + 4668 10 @@ -11610,15 +11647,15 @@ files - 123267 + 123251 id - 123267 + 123251 name - 123267 + 123251 @@ -11632,7 +11669,7 @@ 1 2 - 123267 + 123251 @@ -11648,7 +11685,7 @@ 1 2 - 123267 + 123251 @@ -11658,15 +11695,15 @@ folders - 16342 + 16340 id - 16342 + 16340 name - 16342 + 16340 @@ -11680,7 +11717,7 @@ 1 2 - 16342 + 16340 @@ -11696,7 +11733,7 @@ 1 2 - 16342 + 16340 @@ -11706,15 +11743,15 @@ containerparent - 138676 + 138658 parent - 16342 + 16340 child - 138676 + 138658 @@ -11728,7 +11765,7 @@ 1 2 - 7470 + 7469 2 @@ -11769,7 +11806,7 @@ 1 2 - 138676 + 138658 @@ -11779,7 +11816,7 @@ fileannotations - 5129404 + 5129436 id @@ -12355,11 +12392,11 @@ inmacroexpansion - 109779097 + 109779080 id - 18027697 + 18027694 inv @@ -12382,7 +12419,7 @@ 3 5 - 1077794 + 1077793 5 @@ -12392,12 +12429,12 @@ 6 7 - 4819904 + 4819903 7 8 - 6385933 + 6385932 8 @@ -12428,7 +12465,7 @@ 2 3 - 544105 + 544104 3 @@ -12463,7 +12500,7 @@ 11 337 - 224845 + 224847 339 @@ -12483,7 +12520,7 @@ affectedbymacroexpansion - 35689256 + 35689251 id @@ -12566,12 +12603,12 @@ 9 12 - 251120 + 251119 12 13 - 333985 + 333984 13 @@ -12621,19 +12658,19 @@ macroinvocations - 33490802 + 33491008 id - 33490802 + 33491008 macro_id - 79483 + 79484 location - 760382 + 760387 kind @@ -12651,7 +12688,7 @@ 1 2 - 33490802 + 33491008 @@ -12667,7 +12704,7 @@ 1 2 - 33490802 + 33491008 @@ -12683,7 +12720,7 @@ 1 2 - 33490802 + 33491008 @@ -12765,7 +12802,7 @@ 1 2 - 42467 + 42468 2 @@ -12811,7 +12848,7 @@ 1 2 - 73748 + 73749 2 @@ -12832,22 +12869,22 @@ 1 2 - 281223 + 281225 2 3 - 169657 + 169658 3 4 - 70734 + 70735 4 5 - 60326 + 60327 5 @@ -12883,7 +12920,7 @@ 1 2 - 714211 + 714216 2 @@ -12904,7 +12941,7 @@ 1 2 - 760382 + 760387 @@ -12977,15 +13014,15 @@ macroparent - 29950538 + 29950722 id - 29950538 + 29950722 parent_id - 23286856 + 23286998 @@ -12999,7 +13036,7 @@ 1 2 - 29950538 + 29950722 @@ -13015,17 +13052,17 @@ 1 2 - 17992681 + 17992792 2 3 - 4459523 + 4459550 3 88 - 834650 + 834655 @@ -13113,11 +13150,11 @@ macro_argument_unexpanded - 84548918 + 84549437 invocation - 26214596 + 26214757 argument_index @@ -13125,7 +13162,7 @@ text - 318306 + 318308 @@ -13139,22 +13176,22 @@ 1 2 - 7432418 + 7432464 2 3 - 10673962 + 10674027 3 4 - 6139289 + 6139327 4 67 - 1968925 + 1968937 @@ -13170,22 +13207,22 @@ 1 2 - 7502578 + 7502624 2 3 - 10820511 + 10820578 3 4 - 5972962 + 5972999 4 67 - 1918544 + 1918556 @@ -13253,12 +13290,12 @@ 1 2 - 35073 + 35074 2 3 - 61263 + 61264 3 @@ -13268,12 +13305,12 @@ 4 5 - 45086 + 45087 5 7 - 23931 + 23932 7 @@ -13319,7 +13356,7 @@ 1 2 - 230198 + 230200 2 @@ -13329,7 +13366,7 @@ 3 9 - 10283 + 10284 @@ -13339,11 +13376,11 @@ macro_argument_expanded - 84548918 + 84549437 invocation - 26214596 + 26214757 argument_index @@ -13351,7 +13388,7 @@ text - 192900 + 192902 @@ -13365,22 +13402,22 @@ 1 2 - 7432418 + 7432464 2 3 - 10673962 + 10674027 3 4 - 6139289 + 6139327 4 67 - 1968925 + 1968937 @@ -13396,22 +13433,22 @@ 1 2 - 10688727 + 10688793 2 3 - 9201805 + 9201862 3 4 - 5208245 + 5208277 4 9 - 1115817 + 1115824 @@ -13550,7 +13587,7 @@ 1 2 - 97624 + 97625 2 @@ -13570,15 +13607,15 @@ functions - 4179893 + 4179363 id - 4179893 + 4179363 name - 1895706 + 1895466 kind @@ -13596,7 +13633,7 @@ 1 2 - 4179893 + 4179363 @@ -13612,7 +13649,7 @@ 1 2 - 4179893 + 4179363 @@ -13628,22 +13665,22 @@ 1 2 - 1498355 + 1498165 2 3 - 153150 + 153131 3 5 - 142878 + 142860 5 952 - 101322 + 101309 @@ -13659,7 +13696,7 @@ 1 2 - 1895240 + 1894999 2 @@ -13814,15 +13851,15 @@ function_return_type - 4185029 + 4184498 id - 4179893 + 4179363 return_type - 818048 + 817945 @@ -13836,12 +13873,12 @@ 1 2 - 4174757 + 4174227 2 3 - 5136 + 5135 @@ -13857,22 +13894,22 @@ 1 2 - 506144 + 506080 2 3 - 211516 + 211489 3 7 - 66303 + 66294 7 2231 - 34085 + 34081 @@ -14163,33 +14200,33 @@ function_deleted - 96186 + 96173 id - 96186 + 96173 function_defaulted - 73773 + 73764 id - 73773 + 73764 function_prototyped - 4087910 + 4087391 id - 4087910 + 4087391 @@ -14269,15 +14306,15 @@ member_function_this_type - 536522 + 536520 id - 536522 + 536520 this_type - 185332 + 185331 @@ -14291,7 +14328,7 @@ 1 2 - 536522 + 536520 @@ -14307,7 +14344,7 @@ 1 2 - 67897 + 67896 2 @@ -14342,27 +14379,27 @@ fun_decls - 4549229 + 4548652 id - 4544093 + 4543516 function - 4036081 + 4035569 type_id - 816648 + 816544 name - 1798120 + 1797891 location - 3371183 + 3370755 @@ -14376,7 +14413,7 @@ 1 2 - 4544093 + 4543516 @@ -14392,12 +14429,12 @@ 1 2 - 4538957 + 4538381 2 3 - 5136 + 5135 @@ -14413,7 +14450,7 @@ 1 2 - 4544093 + 4543516 @@ -14429,7 +14466,7 @@ 1 2 - 4544093 + 4543516 @@ -14445,17 +14482,17 @@ 1 2 - 3606979 + 3606521 2 3 - 356262 + 356216 3 7 - 72839 + 72830 @@ -14471,12 +14508,12 @@ 1 2 - 3996393 + 3995885 2 3 - 39688 + 39683 @@ -14492,7 +14529,7 @@ 1 2 - 4036081 + 4035569 @@ -14508,17 +14545,17 @@ 1 2 - 3663477 + 3663012 2 3 - 311904 + 311864 3 6 - 60699 + 60692 @@ -14534,22 +14571,22 @@ 1 2 - 431436 + 431381 2 3 - 274083 + 274048 3 6 - 63501 + 63493 6 2476 - 47626 + 47620 @@ -14565,22 +14602,22 @@ 1 2 - 515482 + 515417 2 3 - 203111 + 203085 3 7 - 63034 + 63026 7 2192 - 35019 + 35014 @@ -14596,17 +14633,17 @@ 1 2 - 690112 + 690024 2 4 - 67236 + 67228 4 773 - 59299 + 59291 @@ -14622,22 +14659,22 @@ 1 2 - 595326 + 595251 2 3 - 121399 + 121384 3 7 - 63501 + 63493 7 1959 - 36419 + 36415 @@ -14653,27 +14690,27 @@ 1 2 - 1228474 + 1228318 2 3 - 267079 + 267045 3 4 - 77976 + 77966 4 7 - 146146 + 146128 7 986 - 78443 + 78433 @@ -14689,22 +14726,22 @@ 1 2 - 1407772 + 1407593 2 3 - 152216 + 152197 3 5 - 136808 + 136791 5 936 - 101322 + 101309 @@ -14720,17 +14757,17 @@ 1 2 - 1579600 + 1579399 2 4 - 134940 + 134923 4 562 - 83579 + 83568 @@ -14746,27 +14783,27 @@ 1 2 - 1236411 + 1236254 2 3 - 293227 + 293190 3 4 - 78909 + 78899 4 8 - 137275 + 137257 8 542 - 52295 + 52288 @@ -14782,17 +14819,17 @@ 1 2 - 2966828 + 2966451 2 4 - 277819 + 277783 4 55 - 126536 + 126520 @@ -14808,17 +14845,17 @@ 1 2 - 3034065 + 3033679 2 7 - 244200 + 244169 7 55 - 92917 + 92905 @@ -14834,12 +14871,12 @@ 1 2 - 3207760 + 3207353 2 18 - 163423 + 163402 @@ -14855,12 +14892,12 @@ 1 2 - 3232974 + 3232563 2 13 - 138209 + 138191 @@ -14870,22 +14907,22 @@ fun_def - 1889170 + 1888930 id - 1889170 + 1888930 fun_specialized - 26147 + 26144 id - 26147 + 26144 @@ -14903,11 +14940,11 @@ fun_decl_specifiers - 2907062 + 2906692 id - 1689793 + 1689579 name @@ -14925,17 +14962,17 @@ 1 2 - 491202 + 491140 2 3 - 1179914 + 1179764 3 4 - 18676 + 18674 @@ -15107,11 +15144,11 @@ fun_decl_empty_throws - 1472207 + 1472021 fun_decl - 1472207 + 1472021 @@ -15171,11 +15208,11 @@ fun_decl_empty_noexcept - 863340 + 863230 fun_decl - 863340 + 863230 @@ -15280,19 +15317,19 @@ param_decl_bind - 6995905 + 6995017 id - 6995905 + 6995017 index - 7937 + 7936 fun_decl - 3835771 + 3835284 @@ -15306,7 +15343,7 @@ 1 2 - 6995905 + 6995017 @@ -15322,7 +15359,7 @@ 1 2 - 6995905 + 6995017 @@ -15500,22 +15537,22 @@ 1 2 - 1974150 + 1973899 2 3 - 1061782 + 1061647 3 4 - 502875 + 502812 4 8 - 290892 + 290856 8 @@ -15536,22 +15573,22 @@ 1 2 - 1974150 + 1973899 2 3 - 1061782 + 1061647 3 4 - 502875 + 502812 4 8 - 290892 + 290856 8 @@ -15566,27 +15603,27 @@ var_decls - 8111384 + 8110354 id - 8040412 + 8039391 variable - 7028123 + 7027231 type_id - 2043721 + 2043462 name - 667699 + 667614 location - 5312648 + 5311974 @@ -15600,7 +15637,7 @@ 1 2 - 8040412 + 8039391 @@ -15616,12 +15653,12 @@ 1 2 - 7972241 + 7971229 2 3 - 68170 + 68162 @@ -15637,7 +15674,7 @@ 1 2 - 8040412 + 8039391 @@ -15653,7 +15690,7 @@ 1 2 - 8037610 + 8036590 2 @@ -15674,17 +15711,17 @@ 1 2 - 6175989 + 6175205 2 3 - 698516 + 698427 3 7 - 153617 + 153598 @@ -15700,12 +15737,12 @@ 1 2 - 6856762 + 6855892 2 4 - 171360 + 171338 @@ -15721,12 +15758,12 @@ 1 2 - 6912793 + 6911916 2 3 - 115329 + 115315 @@ -15742,12 +15779,12 @@ 1 2 - 6482757 + 6481934 2 3 - 543031 + 542962 3 @@ -15768,27 +15805,27 @@ 1 2 - 1165906 + 1165758 2 3 - 477195 + 477134 3 4 - 94785 + 94773 4 7 - 184901 + 184877 7 762 - 120933 + 120917 @@ -15804,22 +15841,22 @@ 1 2 - 1299446 + 1299281 2 3 - 452448 + 452390 3 6 - 155952 + 155932 6 724 - 135874 + 135857 @@ -15835,17 +15872,17 @@ 1 2 - 1539444 + 1539249 2 3 - 383343 + 383295 3 128 - 120933 + 120917 @@ -15861,22 +15898,22 @@ 1 2 - 1365749 + 1365576 2 3 - 404355 + 404303 3 7 - 173228 + 173206 7 592 - 100388 + 100375 @@ -15892,37 +15929,37 @@ 1 2 - 341320 + 341277 2 3 - 86847 + 86836 3 4 - 48559 + 48553 4 6 - 51828 + 51821 6 12 - 52295 + 52288 12 33 - 50427 + 50421 34 2384 - 36419 + 36415 @@ -15938,37 +15975,37 @@ 1 2 - 368869 + 368822 2 3 - 77976 + 77966 3 4 - 45291 + 45285 4 6 - 49493 + 49487 6 14 - 53229 + 53222 14 56 - 50894 + 50888 56 2301 - 21945 + 21942 @@ -15984,27 +16021,27 @@ 1 2 - 457117 + 457059 2 3 - 93851 + 93839 3 5 - 46692 + 46686 5 19 - 50894 + 50888 19 1182 - 19143 + 19141 @@ -16020,32 +16057,32 @@ 1 2 - 379141 + 379093 2 3 - 90583 + 90571 3 5 - 59766 + 59758 5 9 - 51361 + 51354 9 21 - 50427 + 50421 21 1010 - 36419 + 36415 @@ -16061,17 +16098,17 @@ 1 2 - 4496934 + 4496363 2 3 - 531825 + 531757 3 896 - 283889 + 283853 @@ -16087,17 +16124,17 @@ 1 2 - 4886348 + 4885727 2 17 - 415561 + 415508 17 892 - 10739 + 10737 @@ -16113,12 +16150,12 @@ 1 2 - 4962456 + 4961826 2 759 - 350192 + 350147 @@ -16134,12 +16171,12 @@ 1 2 - 5303310 + 5302637 2 6 - 9338 + 9337 @@ -16149,22 +16186,22 @@ var_def - 3995459 + 3994952 id - 3995459 + 3994952 var_decl_specifiers - 378674 + 378626 id - 378674 + 378626 name @@ -16182,7 +16219,7 @@ 1 2 - 378674 + 378626 @@ -16234,19 +16271,19 @@ type_decls - 3283868 + 3283451 id - 3283868 + 3283451 type_id - 3233441 + 3233030 location - 3166671 + 3166269 @@ -16260,7 +16297,7 @@ 1 2 - 3283868 + 3283451 @@ -16276,7 +16313,7 @@ 1 2 - 3283868 + 3283451 @@ -16292,12 +16329,12 @@ 1 2 - 3191884 + 3191479 2 5 - 41556 + 41550 @@ -16313,12 +16350,12 @@ 1 2 - 3191884 + 3191479 2 5 - 41556 + 41550 @@ -16334,12 +16371,12 @@ 1 2 - 3114375 + 3113980 2 20 - 52295 + 52288 @@ -16355,12 +16392,12 @@ 1 2 - 3114375 + 3113980 2 20 - 52295 + 52288 @@ -16370,22 +16407,22 @@ type_def - 2642316 + 2641981 id - 2642316 + 2641981 type_decl_top - 743808 + 743713 type_decl - 743808 + 743713 @@ -16758,19 +16795,19 @@ usings - 369802 + 369755 id - 369802 + 369755 element_id - 315639 + 315599 location - 247936 + 247904 kind @@ -16788,7 +16825,7 @@ 1 2 - 369802 + 369755 @@ -16804,7 +16841,7 @@ 1 2 - 369802 + 369755 @@ -16820,7 +16857,7 @@ 1 2 - 369802 + 369755 @@ -16836,12 +16873,12 @@ 1 2 - 263344 + 263311 2 3 - 50894 + 50888 3 @@ -16862,12 +16899,12 @@ 1 2 - 263344 + 263311 2 3 - 50894 + 50888 3 @@ -16888,7 +16925,7 @@ 1 2 - 315639 + 315599 @@ -16904,17 +16941,17 @@ 1 2 - 202644 + 202618 2 4 - 10739 + 10737 4 5 - 31283 + 31279 5 @@ -16935,17 +16972,17 @@ 1 2 - 202644 + 202618 2 4 - 10739 + 10737 4 5 - 31283 + 31279 5 @@ -16966,7 +17003,7 @@ 1 2 - 247936 + 247904 @@ -17039,7 +17076,7 @@ using_container - 466798 + 466800 parent @@ -17047,7 +17084,7 @@ child - 295989 + 295990 @@ -17117,12 +17154,12 @@ 1 2 - 218311 + 218313 2 3 - 51724 + 51725 3 @@ -17750,23 +17787,23 @@ params - 6355287 + 6354480 id - 6191397 + 6190611 function - 3492116 + 3491673 index - 7937 + 7936 type_id - 1846680 + 1846445 @@ -17780,7 +17817,7 @@ 1 2 - 6191397 + 6190611 @@ -17796,7 +17833,7 @@ 1 2 - 6191397 + 6190611 @@ -17812,12 +17849,12 @@ 1 2 - 6067663 + 6066892 2 4 - 123734 + 123718 @@ -17833,22 +17870,22 @@ 1 2 - 1867691 + 1867454 2 3 - 952989 + 952868 3 4 - 430035 + 429981 4 18 - 241399 + 241368 @@ -17864,22 +17901,22 @@ 1 2 - 1867691 + 1867454 2 3 - 952989 + 952868 3 4 - 430035 + 429981 4 18 - 241399 + 241368 @@ -17895,22 +17932,22 @@ 1 2 - 2166055 + 2165780 2 3 - 826920 + 826815 3 4 - 346456 + 346412 4 12 - 152683 + 152664 @@ -18164,22 +18201,22 @@ 1 2 - 1184116 + 1183966 2 3 - 406222 + 406171 3 7 - 154084 + 154064 7 518 - 102256 + 102243 @@ -18195,22 +18232,22 @@ 1 2 - 1404971 + 1404792 2 3 - 212449 + 212422 3 7 - 147547 + 147528 7 502 - 81711 + 81701 @@ -18226,17 +18263,17 @@ 1 2 - 1420379 + 1420199 2 3 - 347390 + 347346 3 13 - 78909 + 78899 @@ -18676,11 +18713,11 @@ localvariables - 576946 + 576945 id - 576946 + 576945 type_id @@ -18688,7 +18725,7 @@ name - 90548 + 90547 @@ -18702,7 +18739,7 @@ 1 2 - 576946 + 576945 @@ -18718,7 +18755,7 @@ 1 2 - 576946 + 576945 @@ -18739,7 +18776,7 @@ 2 3 - 5362 + 5366 3 @@ -18749,7 +18786,7 @@ 4 7 - 3380 + 3376 7 @@ -18775,7 +18812,7 @@ 1 2 - 26908 + 26912 2 @@ -18785,7 +18822,7 @@ 3 5 - 2918 + 2914 5 @@ -18816,7 +18853,7 @@ 2 3 - 14285 + 14284 3 @@ -18847,7 +18884,7 @@ 1 2 - 76492 + 76491 2 @@ -18943,7 +18980,7 @@ function - 32886 + 32885 @@ -19885,19 +19922,19 @@ builtintypes - 26147 + 26144 id - 26147 + 26144 name - 26147 + 26144 kind - 26147 + 26144 size @@ -19923,7 +19960,7 @@ 1 2 - 26147 + 26144 @@ -19939,7 +19976,7 @@ 1 2 - 26147 + 26144 @@ -19955,7 +19992,7 @@ 1 2 - 26147 + 26144 @@ -19971,7 +20008,7 @@ 1 2 - 26147 + 26144 @@ -19987,7 +20024,7 @@ 1 2 - 26147 + 26144 @@ -20003,7 +20040,7 @@ 1 2 - 26147 + 26144 @@ -20019,7 +20056,7 @@ 1 2 - 26147 + 26144 @@ -20035,7 +20072,7 @@ 1 2 - 26147 + 26144 @@ -20051,7 +20088,7 @@ 1 2 - 26147 + 26144 @@ -20067,7 +20104,7 @@ 1 2 - 26147 + 26144 @@ -20083,7 +20120,7 @@ 1 2 - 26147 + 26144 @@ -20099,7 +20136,7 @@ 1 2 - 26147 + 26144 @@ -20115,7 +20152,7 @@ 1 2 - 26147 + 26144 @@ -20131,7 +20168,7 @@ 1 2 - 26147 + 26144 @@ -20147,7 +20184,7 @@ 1 2 - 26147 + 26144 @@ -20592,15 +20629,15 @@ derivedtypes - 3670014 + 3669548 id - 3670014 + 3669548 name - 1552985 + 1552788 kind @@ -20608,7 +20645,7 @@ type_id - 2363096 + 2362796 @@ -20622,7 +20659,7 @@ 1 2 - 3670014 + 3669548 @@ -20638,7 +20675,7 @@ 1 2 - 3670014 + 3669548 @@ -20654,7 +20691,7 @@ 1 2 - 3670014 + 3669548 @@ -20670,17 +20707,17 @@ 1 2 - 1324193 + 1324025 2 4 - 120466 + 120450 4 1153 - 108326 + 108312 @@ -20696,7 +20733,7 @@ 1 2 - 1552051 + 1551854 2 @@ -20717,17 +20754,17 @@ 1 2 - 1324193 + 1324025 2 4 - 120466 + 120450 4 1135 - 108326 + 108312 @@ -20866,22 +20903,22 @@ 1 2 - 1515631 + 1515439 2 3 - 546299 + 546230 3 4 - 218519 + 218492 4 72 - 82645 + 82634 @@ -20897,22 +20934,22 @@ 1 2 - 1526837 + 1526644 2 3 - 538829 + 538760 3 4 - 215718 + 215690 4 72 - 81711 + 81701 @@ -20928,22 +20965,22 @@ 1 2 - 1519834 + 1519641 2 3 - 550035 + 549965 3 4 - 217586 + 217558 4 6 - 75641 + 75631 @@ -20953,11 +20990,11 @@ pointerishsize - 2707685 + 2707342 id - 2707685 + 2707342 size @@ -20979,7 +21016,7 @@ 1 2 - 2707685 + 2707342 @@ -20995,7 +21032,7 @@ 1 2 - 2707685 + 2707342 @@ -21069,19 +21106,19 @@ arraysizes - 88248 + 88237 id - 88248 + 88237 num_elements - 31750 + 31746 bytesize - 33151 + 33147 alignment @@ -21099,7 +21136,7 @@ 1 2 - 88248 + 88237 @@ -21115,7 +21152,7 @@ 1 2 - 88248 + 88237 @@ -21131,7 +21168,7 @@ 1 2 - 88248 + 88237 @@ -21152,7 +21189,7 @@ 2 3 - 23813 + 23810 3 @@ -21183,7 +21220,7 @@ 1 2 - 26614 + 26611 2 @@ -21209,7 +21246,7 @@ 1 2 - 26614 + 26611 2 @@ -21240,7 +21277,7 @@ 2 3 - 23813 + 23810 3 @@ -21271,12 +21308,12 @@ 1 2 - 27548 + 27544 2 3 - 3735 + 3734 3 @@ -21297,12 +21334,12 @@ 1 2 - 27548 + 27544 2 3 - 4669 + 4668 4 @@ -21405,15 +21442,15 @@ typedefbase - 1686099 + 1686109 id - 1686099 + 1686109 type_id - 793481 + 793485 @@ -21427,7 +21464,7 @@ 1 2 - 1686099 + 1686109 @@ -21443,12 +21480,12 @@ 1 2 - 617400 + 617404 2 3 - 83253 + 83254 3 @@ -21754,19 +21791,19 @@ usertypes - 5235606 + 5234008 id - 5235606 + 5234008 name - 1352675 + 1352503 kind - 5136 + 5135 @@ -21780,7 +21817,7 @@ 1 2 - 5235606 + 5234008 @@ -21796,7 +21833,7 @@ 1 2 - 5235606 + 5234008 @@ -21812,27 +21849,27 @@ 1 2 - 983806 + 983681 2 3 - 153617 + 153598 3 7 - 104590 + 104577 7 61 - 101789 + 101776 65 874 - 8871 + 8870 @@ -21848,17 +21885,17 @@ 1 2 - 1212131 + 1211977 2 3 - 125135 + 125586 3 7 - 15408 + 14939 @@ -21892,8 +21929,8 @@ 466 - 135 - 136 + 133 + 134 466 @@ -21958,8 +21995,8 @@ 466 - 43 - 44 + 41 + 42 466 @@ -22000,15 +22037,15 @@ usertypesize - 1707537 + 1706386 id - 1707537 + 1706386 size - 13540 + 13539 alignment @@ -22026,7 +22063,7 @@ 1 2 - 1707537 + 1706386 @@ -22042,7 +22079,7 @@ 1 2 - 1707537 + 1706386 @@ -22063,7 +22100,7 @@ 2 3 - 4202 + 4201 3 @@ -22097,7 +22134,7 @@ 740 - 2472 + 2470 933 @@ -22114,7 +22151,7 @@ 1 2 - 10272 + 10270 2 @@ -22158,8 +22195,8 @@ 466 - 3211 - 3212 + 3209 + 3210 466 @@ -22270,15 +22307,15 @@ mangled_name - 9021417 + 9019338 id - 9021417 + 9019338 mangled_name - 6062526 + 6061757 is_complete @@ -22296,7 +22333,7 @@ 1 2 - 9021417 + 9019338 @@ -22312,7 +22349,7 @@ 1 2 - 9021417 + 9019338 @@ -22328,12 +22365,12 @@ 1 2 - 5789844 + 5789108 2 874 - 272682 + 272648 @@ -22349,7 +22386,7 @@ 1 2 - 6062526 + 6061757 @@ -22363,8 +22400,8 @@ 12 - 19321 - 19322 + 19319 + 19320 466 @@ -22391,59 +22428,59 @@ is_pod_class - 534710 + 534713 id - 534710 + 534713 is_standard_layout_class - 1255088 + 1253995 id - 1255088 + 1253995 is_complete - 1646837 + 1645694 id - 1646837 + 1645694 is_class_template - 398285 + 398234 id - 398285 + 398234 class_instantiation - 1089798 + 1089659 to - 1089798 + 1089659 from - 168559 + 168537 @@ -22457,7 +22494,7 @@ 1 2 - 1089798 + 1089659 @@ -22473,42 +22510,42 @@ 1 2 - 59766 + 59758 2 3 - 29416 + 29412 3 4 - 15875 + 15873 4 5 - 13073 + 13072 5 6 - 9805 + 9804 6 10 - 12606 + 12605 10 16 - 13073 + 13072 16 70 - 13540 + 13539 70 @@ -22523,11 +22560,11 @@ class_template_argument - 2882732 + 2882750 type_id - 1315503 + 1315511 index @@ -22535,7 +22572,7 @@ arg_type - 840385 + 840390 @@ -22549,22 +22586,22 @@ 1 2 - 540953 + 540956 2 3 - 399235 + 399237 3 4 - 231395 + 231396 4 7 - 120314 + 120315 7 @@ -22585,17 +22622,17 @@ 1 2 - 567605 + 567609 2 3 - 410478 + 410481 3 4 - 244840 + 244841 4 @@ -22708,17 +22745,17 @@ 1 2 - 523343 + 523346 2 3 - 174342 + 174343 3 4 - 51340 + 51341 4 @@ -22744,7 +22781,7 @@ 1 2 - 746486 + 746490 2 @@ -22764,11 +22801,11 @@ class_template_argument_value - 495405 + 495342 type_id - 304900 + 304861 index @@ -22776,7 +22813,7 @@ arg_value - 495405 + 495342 @@ -22790,12 +22827,12 @@ 1 2 - 249803 + 249772 2 3 - 53229 + 53222 3 @@ -22816,22 +22853,22 @@ 1 2 - 189570 + 189546 2 3 - 81244 + 81234 3 4 - 12139 + 12138 4 9 - 21945 + 21942 @@ -22909,7 +22946,7 @@ 1 2 - 495405 + 495342 @@ -22925,7 +22962,7 @@ 1 2 - 495405 + 495342 @@ -22935,15 +22972,15 @@ is_proxy_class_for - 63034 + 62092 id - 63034 + 62092 templ_param_id - 63034 + 62092 @@ -22957,7 +22994,7 @@ 1 2 - 63034 + 62092 @@ -22973,7 +23010,7 @@ 1 2 - 63034 + 62092 @@ -23279,22 +23316,22 @@ is_function_template - 1403103 + 1402925 id - 1403103 + 1402925 function_instantiation - 894819 + 894816 to - 894819 + 894816 from @@ -23312,7 +23349,7 @@ 1 2 - 894819 + 894816 @@ -23328,7 +23365,7 @@ 1 2 - 100156 + 100155 2 @@ -23358,11 +23395,11 @@ function_template_argument - 2313481 + 2313473 function_id - 1321571 + 1321566 index @@ -23370,7 +23407,7 @@ arg_type - 301234 + 301233 @@ -23384,17 +23421,17 @@ 1 2 - 674407 + 674404 2 3 - 390486 + 390485 3 4 - 186795 + 186794 4 @@ -23415,17 +23452,17 @@ 1 2 - 691825 + 691822 2 3 - 400275 + 400274 3 4 - 166868 + 166867 4 @@ -23609,7 +23646,7 @@ 1 2 - 271727 + 271726 2 @@ -23629,11 +23666,11 @@ function_template_argument_value - 358993 + 358992 function_id - 192752 + 192751 index @@ -23641,7 +23678,7 @@ arg_value - 356381 + 356379 @@ -23676,7 +23713,7 @@ 1 2 - 176135 + 176134 2 @@ -23814,7 +23851,7 @@ 1 2 - 353768 + 353767 2 @@ -23835,7 +23872,7 @@ 1 2 - 356381 + 356379 @@ -24356,15 +24393,15 @@ routinetypes - 538891 + 538889 id - 538891 + 538889 return_type - 280750 + 280749 @@ -24378,7 +24415,7 @@ 1 2 - 538891 + 538889 @@ -24394,7 +24431,7 @@ 1 2 - 244450 + 244449 2 @@ -24414,19 +24451,19 @@ routinetypeargs - 983339 + 983214 routine - 423499 + 423445 index - 7937 + 7936 type_id - 226924 + 226895 @@ -24440,27 +24477,27 @@ 1 2 - 152683 + 152664 2 3 - 134006 + 133989 3 4 - 63501 + 63493 4 5 - 45758 + 45752 5 18 - 27548 + 27544 @@ -24476,27 +24513,27 @@ 1 2 - 182566 + 182543 2 3 - 133539 + 133522 3 4 - 58832 + 58824 4 5 - 33618 + 33614 5 11 - 14941 + 14939 @@ -24654,27 +24691,27 @@ 1 2 - 146613 + 146595 2 3 - 30816 + 30812 3 5 - 16809 + 16807 5 12 - 18209 + 18207 12 110 - 14474 + 14472 @@ -24690,22 +24727,22 @@ 1 2 - 172761 + 172739 2 3 - 30816 + 30812 3 6 - 18676 + 18674 6 14 - 4669 + 4668 @@ -24715,19 +24752,19 @@ ptrtomembers - 37820 + 37815 id - 37820 + 37815 type_id - 37820 + 37815 class_id - 15408 + 15406 @@ -24741,7 +24778,7 @@ 1 2 - 37820 + 37815 @@ -24757,7 +24794,7 @@ 1 2 - 37820 + 37815 @@ -24773,7 +24810,7 @@ 1 2 - 37820 + 37815 @@ -24789,7 +24826,7 @@ 1 2 - 37820 + 37815 @@ -24805,7 +24842,7 @@ 1 2 - 13540 + 13539 8 @@ -24831,7 +24868,7 @@ 1 2 - 13540 + 13539 8 @@ -24851,15 +24888,15 @@ specifiers - 24746 + 24743 id - 24746 + 24743 str - 24746 + 24743 @@ -24873,7 +24910,7 @@ 1 2 - 24746 + 24743 @@ -24889,7 +24926,7 @@ 1 2 - 24746 + 24743 @@ -24899,15 +24936,15 @@ typespecifiers - 1133221 + 1132144 type_id - 1115011 + 1113936 spec_id - 3735 + 3734 @@ -24921,12 +24958,12 @@ 1 2 - 1096801 + 1095728 2 3 - 18209 + 18207 @@ -24967,12 +25004,7 @@ 219 220 - 466 - - - 221 - 222 - 466 + 933 1701 @@ -24987,15 +25019,15 @@ funspecifiers - 10305922 + 10305080 func_id - 4068766 + 4068249 spec_id - 8404 + 8403 @@ -25009,27 +25041,27 @@ 1 2 - 1357811 + 1357639 2 3 - 641085 + 640536 3 4 - 985207 + 985549 4 5 - 780228 + 780129 5 8 - 304433 + 304395 @@ -25128,8 +25160,8 @@ 466 - 6434 - 6435 + 6435 + 6436 466 @@ -25140,15 +25172,15 @@ varspecifiers - 2246366 + 2246080 var_id - 1225205 + 1225050 spec_id - 3735 + 3734 @@ -25162,22 +25194,22 @@ 1 2 - 730267 + 730174 2 3 - 202644 + 202618 3 4 - 58365 + 58357 4 5 - 233928 + 233898 @@ -25286,11 +25318,11 @@ attributes - 561708 + 561636 id - 561708 + 561636 kind @@ -25298,7 +25330,7 @@ name - 11206 + 11204 name_space @@ -25306,7 +25338,7 @@ location - 481397 + 481336 @@ -25320,7 +25352,7 @@ 1 2 - 561708 + 561636 @@ -25336,7 +25368,7 @@ 1 2 - 561708 + 561636 @@ -25352,7 +25384,7 @@ 1 2 - 561708 + 561636 @@ -25368,7 +25400,7 @@ 1 2 - 561708 + 561636 @@ -25559,7 +25591,7 @@ 1 2 - 10272 + 10270 2 @@ -25580,7 +25612,7 @@ 1 2 - 11206 + 11204 @@ -25751,17 +25783,17 @@ 1 2 - 431903 + 431848 2 3 - 20077 + 20075 3 7 - 29416 + 29412 @@ -25777,7 +25809,7 @@ 1 2 - 481397 + 481336 @@ -25793,17 +25825,17 @@ 1 2 - 433304 + 433249 2 3 - 19610 + 19608 3 4 - 28482 + 28478 @@ -25819,7 +25851,7 @@ 1 2 - 481397 + 481336 @@ -25829,11 +25861,11 @@ attribute_args - 344122 + 344078 id - 344122 + 344078 kind @@ -25841,7 +25873,7 @@ attribute - 262877 + 262844 index @@ -25849,7 +25881,7 @@ location - 327779 + 327738 @@ -25863,7 +25895,7 @@ 1 2 - 344122 + 344078 @@ -25879,7 +25911,7 @@ 1 2 - 344122 + 344078 @@ -25895,7 +25927,7 @@ 1 2 - 344122 + 344078 @@ -25911,7 +25943,7 @@ 1 2 - 344122 + 344078 @@ -26026,17 +26058,17 @@ 1 2 - 197508 + 197483 2 3 - 49493 + 49487 3 4 - 15875 + 15873 @@ -26052,12 +26084,12 @@ 1 2 - 252605 + 252573 2 3 - 10272 + 10270 @@ -26073,17 +26105,17 @@ 1 2 - 197508 + 197483 2 3 - 49493 + 49487 3 4 - 15875 + 15873 @@ -26099,17 +26131,17 @@ 1 2 - 197508 + 197483 2 3 - 49493 + 49487 3 4 - 15875 + 15873 @@ -26224,12 +26256,12 @@ 1 2 - 313772 + 313732 2 7 - 14007 + 14005 @@ -26245,12 +26277,12 @@ 1 2 - 315172 + 315132 2 3 - 12606 + 12605 @@ -26266,12 +26298,12 @@ 1 2 - 313772 + 313732 2 7 - 14007 + 14005 @@ -26287,7 +26319,7 @@ 1 2 - 327779 + 327738 @@ -26297,15 +26329,15 @@ attribute_arg_value - 25213 + 25210 arg - 25213 + 25210 value - 15875 + 15873 @@ -26319,7 +26351,7 @@ 1 2 - 25213 + 25210 @@ -26335,7 +26367,7 @@ 1 2 - 14474 + 14472 2 @@ -26398,15 +26430,15 @@ attribute_arg_constant - 318441 + 318400 arg - 318441 + 318400 constant - 318441 + 318400 @@ -26420,7 +26452,7 @@ 1 2 - 318441 + 318400 @@ -26436,7 +26468,7 @@ 1 2 - 318441 + 318400 @@ -26615,15 +26647,15 @@ funcattributes - 630345 + 630265 func_id - 443576 + 443520 spec_id - 524821 + 524754 @@ -26637,17 +26669,17 @@ 1 2 - 338519 + 338476 2 3 - 64435 + 64427 3 6 - 39688 + 39683 6 @@ -26668,12 +26700,12 @@ 1 2 - 506144 + 506080 2 17 - 18676 + 18674 @@ -26809,15 +26841,15 @@ unspecifiedtype - 9490208 + 9488069 type_id - 9490208 + 9488069 unspecified_type_id - 6492096 + 6490338 @@ -26831,7 +26863,7 @@ 1 2 - 9490208 + 9488069 @@ -26847,17 +26879,17 @@ 1 2 - 4560436 + 4558923 2 3 - 1715941 + 1715723 3 145 - 215718 + 215690 @@ -26867,19 +26899,19 @@ member - 3881530 + 3881037 parent - 545832 + 545763 index - 92917 + 92905 child - 3810090 + 3809607 @@ -26893,47 +26925,47 @@ 1 2 - 129804 + 129788 2 3 - 64902 + 64894 3 4 - 73306 + 73297 4 5 - 75174 + 75165 5 6 - 40622 + 40617 6 8 - 46692 + 46686 8 14 - 45758 + 45752 14 30 - 41556 + 41550 30 200 - 28015 + 28011 @@ -26949,52 +26981,52 @@ 1 2 - 129804 + 129788 2 3 - 64902 + 64894 3 4 - 73306 + 73297 4 5 - 76108 + 76098 5 6 - 39688 + 39683 6 7 - 24279 + 24276 7 9 - 42023 + 42017 9 17 - 43890 + 43885 17 41 - 41556 + 41550 41 200 - 10272 + 10270 @@ -27010,57 +27042,57 @@ 1 2 - 26147 + 26144 2 3 - 7003 + 7002 3 4 - 3735 + 3734 4 5 - 7937 + 7936 5 6 - 5603 + 5602 6 7 - 5603 + 5602 7 9 - 7470 + 7469 9 16 - 7003 + 7002 16 52 - 7003 + 7002 52 107 - 7003 + 7002 108 577 - 7003 + 7002 737 @@ -27081,57 +27113,57 @@ 1 2 - 26147 + 26144 2 3 - 7003 + 7002 3 4 - 3735 + 3734 4 5 - 7937 + 7936 5 6 - 5603 + 5602 6 7 - 5603 + 5602 7 9 - 7470 + 7469 9 16 - 7003 + 7002 16 52 - 7003 + 7002 52 107 - 7003 + 7002 108 577 - 7003 + 7002 738 @@ -27152,7 +27184,7 @@ 1 2 - 3810090 + 3809607 @@ -27168,12 +27200,12 @@ 1 2 - 3738651 + 3738177 2 3 - 71439 + 71430 @@ -27183,11 +27215,11 @@ enclosingfunction - 118327 + 118328 child - 118327 + 118328 parent @@ -27205,7 +27237,7 @@ 1 2 - 118327 + 118328 @@ -27236,7 +27268,7 @@ 4 45 - 4887 + 4888 @@ -27246,15 +27278,15 @@ derivations - 391566 + 391564 derivation - 391566 + 391564 sub - 371291 + 371289 index @@ -27262,7 +27294,7 @@ super - 202750 + 202749 location @@ -27280,7 +27312,7 @@ 1 2 - 391566 + 391564 @@ -27296,7 +27328,7 @@ 1 2 - 391566 + 391564 @@ -27312,7 +27344,7 @@ 1 2 - 391566 + 391564 @@ -27328,7 +27360,7 @@ 1 2 - 391566 + 391564 @@ -27344,7 +27376,7 @@ 1 2 - 356311 + 356310 2 @@ -27365,7 +27397,7 @@ 1 2 - 356311 + 356310 2 @@ -27386,7 +27418,7 @@ 1 2 - 356311 + 356310 2 @@ -27407,7 +27439,7 @@ 1 2 - 356311 + 356310 2 @@ -27557,7 +27589,7 @@ 1 2 - 195365 + 195364 2 @@ -27578,7 +27610,7 @@ 1 2 - 195365 + 195364 2 @@ -27599,7 +27631,7 @@ 1 2 - 202297 + 202296 2 @@ -27620,7 +27652,7 @@ 1 2 - 199092 + 199091 2 @@ -27754,11 +27786,11 @@ derspecifiers - 393447 + 393446 der_id - 391183 + 391181 spec_id @@ -27776,7 +27808,7 @@ 1 2 - 388918 + 388917 2 @@ -27822,11 +27854,11 @@ direct_base_offsets - 362617 + 362615 der_id - 362617 + 362615 offset @@ -27844,7 +27876,7 @@ 1 2 - 362617 + 362615 @@ -28186,11 +28218,11 @@ frienddecls - 707049 + 707046 id - 707049 + 707046 type_id @@ -28198,7 +28230,7 @@ decl_id - 69395 + 69394 location @@ -28216,7 +28248,7 @@ 1 2 - 707049 + 707046 @@ -28232,7 +28264,7 @@ 1 2 - 707049 + 707046 @@ -28248,7 +28280,7 @@ 1 2 - 707049 + 707046 @@ -28489,7 +28521,7 @@ 1 2 - 68733 + 68732 2 @@ -28703,15 +28735,15 @@ commentbinding - 3091496 + 3091104 id - 2445742 + 2445431 element - 3014921 + 3014538 @@ -28725,12 +28757,12 @@ 1 2 - 2368699 + 2368399 2 97 - 77042 + 77032 @@ -28746,12 +28778,12 @@ 1 2 - 2938345 + 2937972 2 3 - 76575 + 76565 @@ -28761,15 +28793,15 @@ exprconv - 7032992 + 7032991 converted - 7032992 + 7032991 conversion - 7032992 + 7032991 @@ -28783,7 +28815,7 @@ 1 2 - 7032992 + 7032991 @@ -28799,7 +28831,7 @@ 1 2 - 7032992 + 7032991 @@ -28809,11 +28841,11 @@ compgenerated - 7908039 + 7908009 id - 7908039 + 7908009 @@ -29156,15 +29188,15 @@ namespaces - 12139 + 12138 id - 12139 + 12138 name - 9805 + 9804 @@ -29178,7 +29210,7 @@ 1 2 - 12139 + 12138 @@ -29194,7 +29226,7 @@ 1 2 - 8404 + 8403 2 @@ -29225,15 +29257,15 @@ namespacembrs - 2388310 + 2388007 parentid - 10272 + 10270 memberid - 2388310 + 2388007 @@ -29308,7 +29340,7 @@ 1 2 - 2388310 + 2388007 @@ -29666,11 +29698,11 @@ numtemplatearguments - 393830 + 393829 expr_id - 393830 + 393829 num @@ -29688,7 +29720,7 @@ 1 2 - 393830 + 393829 @@ -30229,7 +30261,7 @@ fun - 511323 + 511342 @@ -30264,12 +30296,12 @@ 1 2 - 315050 + 315088 2 3 - 77912 + 77893 3 @@ -32053,11 +32085,11 @@ id - 18319782 + 18319781 typeid - 1214616 + 1214623 value_category @@ -32075,12 +32107,12 @@ 1 2 - 18188122 + 18188121 2 3 - 131659 + 131660 @@ -32096,7 +32128,7 @@ 1 2 - 18319782 + 18319781 @@ -32112,17 +32144,17 @@ 1 2 - 438565 + 438567 2 3 - 249332 + 249334 3 4 - 102839 + 102840 4 @@ -32132,12 +32164,12 @@ 5 8 - 109274 + 109275 8 14 - 96495 + 96496 14 @@ -32147,7 +32179,7 @@ 41 125325 - 44578 + 44579 @@ -32163,7 +32195,7 @@ 1 2 - 1050230 + 1050237 2 @@ -32197,8 +32229,8 @@ 11 - 1239489 - 1239490 + 1239479 + 1239480 11 @@ -32233,6 +32265,17 @@ + + compound_requirement_is_noexcept + 1 + + + expr + 1 + + + + new_allocated_type 47064 @@ -33663,11 +33706,11 @@ lambdas - 21478 + 21475 expr - 21478 + 21475 default_capture @@ -33689,7 +33732,7 @@ 1 2 - 21478 + 21475 @@ -33705,7 +33748,7 @@ 1 2 - 21478 + 21475 @@ -33779,15 +33822,15 @@ lambda_capture - 28015 + 28011 id - 28015 + 28011 lambda - 20544 + 20541 index @@ -33795,7 +33838,7 @@ field - 28015 + 28011 captured_by_reference @@ -33821,7 +33864,7 @@ 1 2 - 28015 + 28011 @@ -33837,7 +33880,7 @@ 1 2 - 28015 + 28011 @@ -33853,7 +33896,7 @@ 1 2 - 28015 + 28011 @@ -33869,7 +33912,7 @@ 1 2 - 28015 + 28011 @@ -33885,7 +33928,7 @@ 1 2 - 28015 + 28011 @@ -33901,7 +33944,7 @@ 1 2 - 28015 + 28011 @@ -33917,12 +33960,12 @@ 1 2 - 13073 + 13072 2 3 - 7470 + 7469 @@ -33938,12 +33981,12 @@ 1 2 - 13073 + 13072 2 3 - 7470 + 7469 @@ -33959,12 +34002,12 @@ 1 2 - 13073 + 13072 2 3 - 7470 + 7469 @@ -33980,7 +34023,7 @@ 1 2 - 20544 + 20541 @@ -33996,7 +34039,7 @@ 1 2 - 20544 + 20541 @@ -34012,12 +34055,12 @@ 1 2 - 13073 + 13072 2 3 - 7470 + 7469 @@ -34149,7 +34192,7 @@ 1 2 - 28015 + 28011 @@ -34165,7 +34208,7 @@ 1 2 - 28015 + 28011 @@ -34181,7 +34224,7 @@ 1 2 - 28015 + 28011 @@ -34197,7 +34240,7 @@ 1 2 - 28015 + 28011 @@ -34213,7 +34256,7 @@ 1 2 - 28015 + 28011 @@ -34229,7 +34272,7 @@ 1 2 - 28015 + 28011 @@ -36275,11 +36318,11 @@ stmt_decl_bind - 580843 + 580842 stmt - 541061 + 541060 num @@ -36287,7 +36330,7 @@ decl - 580739 + 580738 @@ -36301,7 +36344,7 @@ 1 2 - 520373 + 520371 2 @@ -36322,7 +36365,7 @@ 1 2 - 520373 + 520371 2 @@ -36525,7 +36568,7 @@ 1 2 - 580702 + 580700 2 @@ -36546,7 +36589,7 @@ 1 2 - 580739 + 580738 @@ -36556,11 +36599,11 @@ stmt_decl_entry_bind - 580843 + 580842 stmt - 541061 + 541060 num @@ -36568,7 +36611,7 @@ decl_entry - 580785 + 580784 @@ -36582,7 +36625,7 @@ 1 2 - 520373 + 520371 2 @@ -36603,7 +36646,7 @@ 1 2 - 520373 + 520371 2 @@ -36806,7 +36849,7 @@ 1 2 - 580764 + 580763 3 @@ -36827,7 +36870,7 @@ 1 2 - 580785 + 580784 @@ -37076,19 +37119,19 @@ preprocdirects - 4191099 + 4190567 id - 4191099 + 4190567 kind - 5136 + 5135 location - 4150477 + 4149950 @@ -37102,7 +37145,7 @@ 1 2 - 4191099 + 4190567 @@ -37118,7 +37161,7 @@ 1 2 - 4191099 + 4190567 @@ -37266,7 +37309,7 @@ 1 2 - 4150010 + 4149483 88 @@ -37287,7 +37330,7 @@ 1 2 - 4150477 + 4149950 @@ -37297,15 +37340,15 @@ preprocpair - 1431585 + 1431403 begin - 1197190 + 1197038 elseelifend - 1431585 + 1431403 @@ -37319,17 +37362,17 @@ 1 2 - 978670 + 978546 2 3 - 208247 + 208221 3 11 - 10272 + 10270 @@ -37345,7 +37388,7 @@ 1 2 - 1431585 + 1431403 @@ -37355,22 +37398,22 @@ preproctrue - 767154 + 767056 branch - 767154 + 767056 preprocfalse - 331515 + 331473 branch - 331515 + 331473 @@ -37523,15 +37566,15 @@ includes - 313305 + 313265 id - 313305 + 313265 included - 117197 + 117182 @@ -37545,7 +37588,7 @@ 1 2 - 313305 + 313265 @@ -37561,27 +37604,27 @@ 1 2 - 61166 + 61159 2 3 - 21945 + 21942 3 4 - 12606 + 12605 4 6 - 10272 + 10270 6 14 - 8871 + 8870 14 @@ -37644,11 +37687,11 @@ link_parent - 28676738 + 28682586 element - 3584435 + 3585083 link_target @@ -37666,7 +37709,7 @@ 1 2 - 432952 + 432951 2 @@ -37676,7 +37719,7 @@ 9 10 - 3131138 + 3131788 @@ -37695,48 +37738,48 @@ 34 - 90034 - 90035 + 90053 + 90054 34 - 90100 - 90101 + 90119 + 90120 34 - 90152 - 90153 + 90171 + 90172 34 - 90159 - 90160 + 90178 + 90179 34 - 90195 - 90196 + 90214 + 90215 34 - 90252 - 90253 + 90271 + 90272 34 - 91339 - 91340 + 91358 + 91359 34 - 94665 - 94666 + 94684 + 94685 34 - 96273 - 96274 + 96292 + 96293 34 diff --git a/cpp/ql/lib/upgrades/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/old.dbscheme b/cpp/ql/lib/upgrades/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/old.dbscheme new file mode 100644 index 000000000000..6f5d51e89e76 --- /dev/null +++ b/cpp/ql/lib/upgrades/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/old.dbscheme @@ -0,0 +1,2316 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/semmlecode.cpp.dbscheme new file mode 100644 index 000000000000..e51fad7a2436 --- /dev/null +++ b/cpp/ql/lib/upgrades/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/semmlecode.cpp.dbscheme @@ -0,0 +1,2323 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/upgrade.properties b/cpp/ql/lib/upgrades/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/upgrade.properties new file mode 100644 index 000000000000..5807e06e14c0 --- /dev/null +++ b/cpp/ql/lib/upgrades/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/upgrade.properties @@ -0,0 +1,2 @@ +description: Support C++20 requires expressions +compatibility: backwards diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 510d13fdfa2b..7e8df845de16 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -23585,10 +23585,26 @@ ir.cpp: # 2692| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y # 2692| Type = [IntType] int # 2692| getVariable().getInitializer(): [Initializer] initializer for y -#-----| getExpr(): [RequiresExpr] requires ... +#-----| getExpr(): [RequiresExpr] requires { ... } #-----| Type = [BoolType] bool #-----| Value = [RequiresExpr] 1 #-----| ValueCategory = prvalue +#-----| : +# 2692| getRequirement(0): [GTExpr,SimpleRequirementExpr] ... > ... +# 2692| Type = [BoolType] bool +# 2692| ValueCategory = prvalue +# 2692| getGreaterOperand(): [SizeofTypeOperator] sizeof(int) +# 2692| Type = [LongType] unsigned long +# 2692| Value = [SizeofTypeOperator] 4 +# 2692| ValueCategory = prvalue +# 2692| getLesserOperand(): [Literal] 0 +# 2692| Type = [IntType] int +# 2692| Value = [Literal] 0 +# 2692| ValueCategory = prvalue +# 2692| getLesserOperand().getFullyConverted(): [CStyleCast] (unsigned long)... +# 2692| Conversion = [IntegralConversion] integral conversion +# 2692| Type = [LongType] unsigned long +# 2692| ValueCategory = prvalue #-----| getExpr().getFullyConverted(): [CStyleCast] (int)... #-----| Conversion = [IntegralConversion] integral conversion #-----| Type = [IntType] int From e16405c6755c650be6b29b06d4128aa24138473d Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 15 Oct 2024 11:48:43 +0000 Subject: [PATCH 133/217] Python: Add test for `copy.replace` This test demonstrates the current state of affairs: that `copy.replace` essentially blocks all flow of taint through it, because it has not been modelled yet. --- .../test_collections.py | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/python/ql/test/library-tests/dataflow/tainttracking/defaultAdditionalTaintStep/test_collections.py b/python/ql/test/library-tests/dataflow/tainttracking/defaultAdditionalTaintStep/test_collections.py index e7ae9b41eda6..07ee2a628fb2 100644 --- a/python/ql/test/library-tests/dataflow/tainttracking/defaultAdditionalTaintStep/test_collections.py +++ b/python/ql/test/library-tests/dataflow/tainttracking/defaultAdditionalTaintStep/test_collections.py @@ -166,6 +166,34 @@ def test_copy_2(): copy.deepcopy(TAINTED_LIST), # $ tainted ) +def test_replace(): + from copy import replace + + class C: + def __init__(self, always_tainted, tainted_to_safe, safe_to_tainted, always_safe): + self.always_tainted = always_tainted + self.tainted_to_safe = tainted_to_safe + self.safe_to_tainted = safe_to_tainted + self.always_safe = always_safe + + c = C(always_tainted=TAINTED_STRING, + tainted_to_safe=TAINTED_STRING, + safe_to_tainted=NOT_TAINTED, + always_safe=NOT_TAINTED) + + d = replace(c, tainted_to_safe=NOT_TAINTED, safe_to_tainted=TAINTED_STRING) + + ensure_tainted(d.always_tainted) # $ MISSING: tainted + ensure_tainted(d.safe_to_tainted) # $ MISSING: tainted + ensure_not_tainted(d.always_safe) + + # Currently, we have no way of stopping the value in the tainted_to_safe field (which gets + # overwritten) from flowing through the replace call, which means we get a spurious result. + + ensure_not_tainted(d.tainted_to_safe) # $ + + + def list_index_assign(): tainted_string = TAINTED_STRING From ce914019c59a1fefd8ef617d5eb9415f016b1ccd Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 15 Oct 2024 11:50:38 +0000 Subject: [PATCH 134/217] Python: Add `getMaDRepresentation()` This adds a convenient way of getting the Models-as-Data representation of a particular type of content. This avoids repeating the same construction over and over in our various summaries. Currently this is defined for all types of content except the captured variable content, which to my knowledge doesn't have any representation in Models-as-Data. --- .../dataflow/new/internal/DataFlowPublic.qll | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll index 085eed843eff..ffecbcba57ac 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll @@ -687,16 +687,23 @@ newtype TContent = class Content extends TContent { /** Gets a textual representation of this element. */ string toString() { result = "Content" } + + /** Gets the Models-as-Data representation of this content (if any). */ + string getMaDRepresentation() { none() } } /** An element of a list. */ class ListElementContent extends TListElementContent, Content { override string toString() { result = "List element" } + + override string getMaDRepresentation() { result = "ListElement" } } /** An element of a set. */ class SetElementContent extends TSetElementContent, Content { override string toString() { result = "Set element" } + + override string getMaDRepresentation() { result = "SetElement" } } /** An element of a tuple at a specific index. */ @@ -709,6 +716,8 @@ class TupleElementContent extends TTupleElementContent, Content { int getIndex() { result = index } override string toString() { result = "Tuple element at index " + index.toString() } + + override string getMaDRepresentation() { result = "TupleElement[" + index + "]" } } /** An element of a dictionary under a specific key. */ @@ -721,11 +730,15 @@ class DictionaryElementContent extends TDictionaryElementContent, Content { string getKey() { result = key } override string toString() { result = "Dictionary element at key " + key } + + override string getMaDRepresentation() { result = "DictionaryElement[" + key + "]" } } /** An element of a dictionary under any key. */ class DictionaryElementAnyContent extends TDictionaryElementAnyContent, Content { override string toString() { result = "Any dictionary element" } + + override string getMaDRepresentation() { result = "DictionaryElementAny" } } /** An object attribute. */ @@ -738,6 +751,8 @@ class AttributeContent extends TAttributeContent, Content { string getAttribute() { result = attr } override string toString() { result = "Attribute " + attr } + + override string getMaDRepresentation() { result = "Attribute[" + attr + "]" } } /** A captured variable. */ @@ -750,6 +765,8 @@ class CapturedVariableContent extends Content, TCapturedVariableContent { VariableCapture::CapturedVariable getVariable() { result = v } override string toString() { result = "captured " + v } + + override string getMaDRepresentation() { none() } } /** From 6f2cfa0ba8aed54d1e36d76ddcb48f3e1a82e30b Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 15 Oct 2024 11:52:37 +0000 Subject: [PATCH 135/217] Python: Update `CopySummary` to use `getMaDRepresentation` Demonstrates the somewhat more ergonomic way to use `getMaDRepresentation` when specifying summaries. Note that this slightly extends the previous definition, in that `DictionaryContentAny` is now _also_ propagated by a call to the `.copy()` method, but I think this is correct. --- .../ql/lib/semmle/python/frameworks/Stdlib.qll | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index 2bec246bfc0b..f208f19c74cb 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -4537,21 +4537,9 @@ module StdlibPrivate { override DataFlow::ArgumentNode getACallback() { none() } override predicate propagatesFlow(string input, string output, boolean preservesValue) { - exists(string content | - content = "ListElement" - or - content = "SetElement" - or - exists(DataFlow::TupleElementContent tc, int i | i = tc.getIndex() | - content = "TupleElement[" + i.toString() + "]" - ) - or - exists(DataFlow::DictionaryElementContent dc, string key | key = dc.getKey() | - content = "DictionaryElement[" + key + "]" - ) - | - input = "Argument[self]." + content and - output = "ReturnValue." + content and + exists(DataFlow::Content c | + input = "Argument[self]." + c.getMaDRepresentation() and + output = "ReturnValue." + c.getMaDRepresentation() and preservesValue = true ) or From eaef783f4b7a24b726a7b9c824d90fa2fd5d8f2e Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 15 Oct 2024 11:58:47 +0000 Subject: [PATCH 136/217] Python: Add partial model for `copy.replace` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extends our modelling to partially cover the behaviour of `copy.replace`. In particular, we model this in two ways: Firstly, we extend the existing Models-as-Data row for `copy` and `deepcopy` to also cover `replace`. This means that we treat the result of `replace` as containing all of the fields of the original object. This is somewhat _more_ than we want, as strictly speaking the fields that are overwritten should _not_ propagate flow through the `replace` call, but currently we don't have a good way of modelling this blocking of flow. Secondly, we add a flow summary that adds flow from named arguments of the `replace` call to the corresponding fields on the base object. This ensures that we at least have the new flow arising from the `replace` call. Note that the flow summary adds this flow for _all_ named arguments of _all_ `replace` calls throughout the codebase. However, since any particular `replace` call will only populate a subset of these (the subset consisting of exactly those named arguments that are in that particular call), this does not cause any unwanted crosstalk between different `replace` calls.§ --- .../semmle/python/frameworks/Stdlib.model.yml | 2 +- .../lib/semmle/python/frameworks/Stdlib.qll | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.model.yml b/python/ql/lib/semmle/python/frameworks/Stdlib.model.yml index 683b0aa9b3df..96e1a284f3e4 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.model.yml +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.model.yml @@ -45,7 +45,7 @@ extensions: # See https://docs.python.org/3/library/contextlib.html#contextlib.ExitStack - ["contextlib.ExitStack", "Member[enter_context]", "Argument[0,cm:]", "ReturnValue", "taint"] # See https://docs.python.org/3/library/copy.html#copy.deepcopy - - ["copy", "Member[copy,deepcopy]", "Argument[0,x:]", "ReturnValue", "value"] + - ["copy", "Member[copy,deepcopy,replace]", "Argument[0,x:]", "ReturnValue", "value"] # See # - https://docs.python.org/3/library/ctypes.html#ctypes.create_string_buffer # - https://docs.python.org/3/library/ctypes.html#ctypes.create_unicode_buffer diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index f208f19c74cb..45878c8160b2 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -4549,6 +4549,32 @@ module StdlibPrivate { } } + /** A flow summary for `copy.replace`. */ + class ReplaceSummary extends SummarizedCallable { + ReplaceSummary() { this = "copy.replace" } + + override DataFlow::CallCfgNode getACall() { + result = API::moduleImport("copy").getMember("replace").getACall() + } + + override DataFlow::ArgumentNode getACallback() { + result = API::moduleImport("copy").getMember("replace").getAValueReachableFromSource() + } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + exists(CallNode c, string name, ControlFlowNode n, DataFlow::AttributeContent ac | + c.getFunction().(NameNode).getId() = "replace" or + c.getFunction().(AttrNode).getName() = "replace" + | + n = c.getArgByName(name) and + ac.getAttribute() = name and + input = "Argument[" + name + ":]" and + output = "ReturnValue." + ac.getMaDRepresentation() and + preservesValue = true + ) + } + } + /** * A flow summary for `pop` either for list or set. * This ignores the index if given, since content is From 778b96aa39ee9830313cacc72a97cdf854962f99 Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 15 Oct 2024 11:59:54 +0000 Subject: [PATCH 137/217] Python: Update test expectations --- .../defaultAdditionalTaintStep/test_collections.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/python/ql/test/library-tests/dataflow/tainttracking/defaultAdditionalTaintStep/test_collections.py b/python/ql/test/library-tests/dataflow/tainttracking/defaultAdditionalTaintStep/test_collections.py index 07ee2a628fb2..8a667e95fb07 100644 --- a/python/ql/test/library-tests/dataflow/tainttracking/defaultAdditionalTaintStep/test_collections.py +++ b/python/ql/test/library-tests/dataflow/tainttracking/defaultAdditionalTaintStep/test_collections.py @@ -183,14 +183,14 @@ def __init__(self, always_tainted, tainted_to_safe, safe_to_tainted, always_safe d = replace(c, tainted_to_safe=NOT_TAINTED, safe_to_tainted=TAINTED_STRING) - ensure_tainted(d.always_tainted) # $ MISSING: tainted - ensure_tainted(d.safe_to_tainted) # $ MISSING: tainted + ensure_tainted(d.always_tainted) # $ tainted + ensure_tainted(d.safe_to_tainted) # $ tainted ensure_not_tainted(d.always_safe) # Currently, we have no way of stopping the value in the tainted_to_safe field (which gets # overwritten) from flowing through the replace call, which means we get a spurious result. - ensure_not_tainted(d.tainted_to_safe) # $ + ensure_not_tainted(d.tainted_to_safe) # $ SPURIOUS: tainted From 3b60d8302b1714a9403374e6a51386e645b72412 Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 15 Oct 2024 12:04:09 +0000 Subject: [PATCH 138/217] Python: Add change note --- .../lib/change-notes/2024-10-15-models-for-copy-replace.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 python/ql/lib/change-notes/2024-10-15-models-for-copy-replace.md diff --git a/python/ql/lib/change-notes/2024-10-15-models-for-copy-replace.md b/python/ql/lib/change-notes/2024-10-15-models-for-copy-replace.md new file mode 100644 index 000000000000..4edd7086e428 --- /dev/null +++ b/python/ql/lib/change-notes/2024-10-15-models-for-copy-replace.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- + +- Added partial support for the `copy.replace` method, [added](https://docs.python.org/3.13/library/copy.html#copy.replace) in Python 3.13. From 079ab77a38d940c62e9d17f17c58ae565a5acd2e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 15 Oct 2024 12:16:59 +0000 Subject: [PATCH 139/217] Post-release preparation for codeql-cli-2.19.2 --- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 35 files changed, 35 insertions(+), 35 deletions(-) diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 91af68ed6411..2e28ea9dc252 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 2.0.2 +version: 2.0.3-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index eee6e064b22f..c43f40dfd12e 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.2.5 +version: 1.2.6-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index e02f2f0733ce..4f73477856f1 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.27 +version: 1.7.28-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index d94e11459d4c..396f60b6296f 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.27 +version: 1.7.28-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 1515544bc960..94a6fe88d2b5 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 3.0.1 +version: 3.0.2-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 90e7ec11d865..f9e30d36a52c 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.0.10 +version: 1.0.11-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 726aa918f891..0c4241ef565c 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.10 +version: 1.0.11-dev groups: - go - queries diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index ba6a48a29d49..643dc6a4bf15 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 2.1.1 +version: 2.1.2-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 0dbc1fe67fae..377e3cf2ed64 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.1.1 +version: 1.1.2-dev groups: - go - queries diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 7621f1900d53..2c47663bdb6c 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 1.0.10 +version: 1.0.11-dev groups: - java - automodel diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 23871cfb7d82..fbc0d1105860 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 4.1.1 +version: 4.1.2-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 82b14986199e..601c7fc7d331 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.1.7 +version: 1.1.8-dev groups: - java - queries diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 8cf13a5240ce..34347c17efd5 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.0.2 +version: 2.0.3-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 5aee59e9b015..1d1e261a43ca 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 1.2.2 +version: 1.2.3-dev groups: - javascript - queries diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 6b8eb63063ba..74364a1bc286 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.10 +version: 1.0.11-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index dd92c1068daf..bf974400c193 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 2.1.1 +version: 2.1.2-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 52d6ee0b6032..825f9a26dfbe 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.3.1 +version: 1.3.2-dev groups: - python - queries diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 53ea89afe3b1..a20bcc15cec7 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 2.0.2 +version: 2.0.3-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 2c0ea256429e..c21061faa0c8 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.1.5 +version: 1.1.6-dev groups: - ruby - queries diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 0d1248c09815..9ec1882c73cf 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 3d21af7c256b..aed05aceffb7 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 1.1.4 +version: 1.1.5-dev groups: shared library: true dependencies: diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index b45f7415c81a..1764a076c6d4 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index a11b83edace6..1ee936931e91 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true dependencies: diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index bfb63fdee77f..118445fe4e0a 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true dependencies: diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 7e09739a333a..1ed12762728b 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 7609a088b6e9..f03e6761ee77 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.10 +version: 1.0.11-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 1cfbfb40c91c..822ff4e936c3 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index 430f9e468126..08468e3fbcaa 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true dependencies: diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index d29f0c0bd6e4..cd6d1482196a 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true dependencies: diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 4e15f26a72c5..5bf928f6c915 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index d73aee511702..c087c5f64d9f 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true dependencies: null diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index 56f477c27e19..071b3d1543d9 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true dependencies: diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index b1e351ce1968..5be2bc73ea0e 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 31dd6d915f3d..e1d5a0f06692 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 2.0.2 +version: 2.0.3-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 17bf94f219d8..ef9b975f1695 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.0.10 +version: 1.0.11-dev groups: - swift - queries From b5bfd06624174090c95e230f1a62b092352c95b8 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 15 Oct 2024 13:17:26 +0100 Subject: [PATCH 140/217] Kotlin: Fix for 2.1.0-Beta2 We need to catch a different exception now. --- .../src/main/kotlin/KotlinFileExtractor.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt b/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt index 574e11c21b9d..45583dbf55b9 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt @@ -169,11 +169,17 @@ open class KotlinFileExtractor( } private fun FunctionDescriptor.tryIsHiddenToOvercomeSignatureClash(d: IrFunction): Boolean { + // `org.jetbrains.kotlin.ir.descriptors.IrBasedClassConstructorDescriptor.isHiddenToOvercomeSignatureClash` + // throws one exception or other in Kotlin 2, depending on the version. + // TODO: We need a replacement for this for Kotlin 2 try { return this.isHiddenToOvercomeSignatureClash } catch (e: NotImplementedError) { - // `org.jetbrains.kotlin.ir.descriptors.IrBasedClassConstructorDescriptor.isHiddenToOvercomeSignatureClash` throws the exception - // TODO: We need a replacement for this for Kotlin 2 + if (!usesK2) { + logger.warnElement("Couldn't query if element is fake, deciding it's not.", d, e) + } + return false + } catch (e: IllegalStateException) { if (!usesK2) { logger.warnElement("Couldn't query if element is fake, deciding it's not.", d, e) } From bd08bc79234852d6fd9c2b6bcf933c1da7ff45a2 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 15 Oct 2024 14:21:11 +0200 Subject: [PATCH 141/217] Rust: address review --- misc/codegen/lib/schemadefs.py | 6 +++--- misc/codegen/test/test_schemaloader.py | 30 ++++++++++++++++++++++++++ rust/schema/annotations.py | 7 ------ rust/schema/prelude.py | 8 +++++++ 4 files changed, 41 insertions(+), 10 deletions(-) diff --git a/misc/codegen/lib/schemadefs.py b/misc/codegen/lib/schemadefs.py index 199043de7e6f..997b85b4ca6a 100644 --- a/misc/codegen/lib/schemadefs.py +++ b/misc/codegen/lib/schemadefs.py @@ -1,7 +1,7 @@ from typing import ( Callable as _Callable, Dict as _Dict, - List as _List, + Iterable as _Iterable, ClassVar as _ClassVar, ) from misc.codegen.lib import schema as _schema @@ -279,7 +279,7 @@ def __or__(self, other: _schema.PropertyModifier): drop = object() -def annotate(annotated_cls: type, add_bases: _List[type] | None = None, replace_bases: _Dict[type, type] | None = None) -> _Callable[[type], _PropertyAnnotation]: +def annotate(annotated_cls: type, add_bases: _Iterable[type] | None = None, replace_bases: _Dict[type, type] | None = None) -> _Callable[[type], _PropertyAnnotation]: """ Add or modify schema annotations after a class has been defined previously. @@ -297,7 +297,7 @@ def decorator(cls: type) -> _PropertyAnnotation: if replace_bases: annotated_cls.__bases__ = tuple(replace_bases.get(b, b) for b in annotated_cls.__bases__) if add_bases: - annotated_cls.__bases__ = tuple(annotated_cls.__bases__) + tuple(add_bases) + annotated_cls.__bases__ += tuple(add_bases) for a in dir(cls): if a.startswith(_schema.inheritable_pragma_prefix): setattr(annotated_cls, a, getattr(cls, a)) diff --git a/misc/codegen/test/test_schemaloader.py b/misc/codegen/test/test_schemaloader.py index 0c9128c72727..6c6fccfb3eac 100644 --- a/misc/codegen/test/test_schemaloader.py +++ b/misc/codegen/test/test_schemaloader.py @@ -914,6 +914,36 @@ class _: } +def test_annotate_add_bases(): + @load + class data: + class Root: + pass + + class A(Root): + pass + + class B(Root): + pass + + class C(Root): + pass + + class Derived(A): + pass + + @defs.annotate(Derived, add_bases=(B, C)) + class _: + pass + assert data.classes == { + "Root": schema.Class("Root", derived={"A", "B", "C"}), + "A": schema.Class("A", bases=["Root"], derived={"Derived"}), + "B": schema.Class("B", bases=["Root"], derived={"Derived"}), + "C": schema.Class("C", bases=["Root"], derived={"Derived"}), + "Derived": schema.Class("Derived", bases=["A", "B", "C"]), + } + + def test_annotate_drop_field(): @load class data: diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index fe220233b571..f5e91c9928f8 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -1741,13 +1741,6 @@ class _: ``` """ -class Callable(AstNode): - """ - A callable. Either a `Function` or a `ClosureExpr`. - """ - param_list: optional["ParamList"] | child - attrs: list["Attr"] | child - @annotate(Function, add_bases=[Callable]) class _: param_list: drop diff --git a/rust/schema/prelude.py b/rust/schema/prelude.py index de905eb5b346..4f001ed2b5b8 100644 --- a/rust/schema/prelude.py +++ b/rust/schema/prelude.py @@ -63,3 +63,11 @@ class Unimplemented(Unextracted): The base class for unimplemented nodes. This is used to mark nodes that are not yet extracted. """ pass + + +class Callable(AstNode): + """ + A callable. Either a `Function` or a `ClosureExpr`. + """ + param_list: optional["ParamList"] | child + attrs: list["Attr"] | child From 8e31abaefe59080125adb1ae3e2f5cbb3e84057e Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 15 Oct 2024 14:37:30 +0200 Subject: [PATCH 142/217] Rust: fix codegen to allow `--force` This passes command line arguments to codegen, allowing in particular `--force` to be passed. Also, a convenience `//rust/codegen:py` is added to only run the python based code generation, which will be faster and enough when `ast-generator` is unchanged. --- rust/codegen/BUILD.bazel | 15 +++++++++++++++ rust/codegen/codegen.sh | 4 +++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/rust/codegen/BUILD.bazel b/rust/codegen/BUILD.bazel index 43e057a6fbf6..ba9f2565b70e 100644 --- a/rust/codegen/BUILD.bazel +++ b/rust/codegen/BUILD.bazel @@ -1,3 +1,5 @@ +load("@bazel_skylib//rules:native_binary.bzl", "native_binary") + _args = [ "//rust/ast-generator", "//rust/ast-generator:manifest", @@ -15,3 +17,16 @@ sh_binary( "//misc/bazel:sh_runfiles", ], ) + +native_binary( + name = "py", + src = "//misc/codegen", + out = "codegen", + args = [ + "--configuration-file=$(location //rust:codegen-conf)", + ], + data = [ + "//rust:codegen-conf", + ], + visibility = ["//rust:__subpackages__"], +) diff --git a/rust/codegen/codegen.sh b/rust/codegen/codegen.sh index cb15c796fd6a..4ab8ad9a5aef 100755 --- a/rust/codegen/codegen.sh +++ b/rust/codegen/codegen.sh @@ -4,10 +4,12 @@ set -eu source misc/bazel/runfiles.sh 2>/dev/null || source external/ql+/misc/bazel/runfiles.sh + ast_generator="$(rlocation "$1")" ast_generator_manifest="$(rlocation "$2")" codegen="$(rlocation "$3")" codegen_conf="$(rlocation "$4")" +shift 4 CARGO_MANIFEST_DIR="$(dirname "$ast_generator_manifest")" "$ast_generator" -"$codegen" --configuration-file="$codegen_conf" +"$codegen" --configuration-file="$codegen_conf" "$@" From 79c5adfc9a1f90cee974ce155294172c9008a12c Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 15 Oct 2024 14:10:51 +0100 Subject: [PATCH 143/217] Rust: Use correct versions of the consistency predicates. --- .../controlflow/internal/CfgConsistency.qll | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/CfgConsistency.qll b/rust/ql/lib/codeql/rust/controlflow/internal/CfgConsistency.qll index e463f5776652..378062e16b41 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/CfgConsistency.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/CfgConsistency.qll @@ -54,40 +54,40 @@ int getCfgInconsistencyCounts(string type) { // - `codeql.rust.controlflow.internal.CfgConsistency` (this file) // - `shared.controlflow.codeql.controlflow.Cfg` type = "Non-unique set representation" and - result = count(CfgImpl::Splits ss | Consistency::nonUniqueSetRepresentation(ss, _) | ss) + result = count(CfgImpl::Splits ss | nonUniqueSetRepresentation(ss, _) | ss) or type = "Splitting invariant 2" and - result = count(AstNode n | Consistency::breakInvariant2(n, _, _, _, _, _) | n) + result = count(AstNode n | breakInvariant2(n, _, _, _, _, _) | n) or type = "Splitting invariant 3" and - result = count(AstNode n | Consistency::breakInvariant3(n, _, _, _, _, _) | n) + result = count(AstNode n | breakInvariant3(n, _, _, _, _, _) | n) or type = "Splitting invariant 4" and - result = count(AstNode n | Consistency::breakInvariant4(n, _, _, _, _, _) | n) + result = count(AstNode n | breakInvariant4(n, _, _, _, _, _) | n) or type = "Splitting invariant 5" and - result = count(AstNode n | Consistency::breakInvariant5(n, _, _, _, _, _) | n) + result = count(AstNode n | breakInvariant5(n, _, _, _, _, _) | n) or type = "Multiple successors of the same type" and - result = count(CfgNode n | Consistency::multipleSuccessors(n, _, _) | n) + result = count(CfgNode n | multipleSuccessors(n, _, _) | n) or type = "Simple and normal successors" and - result = count(CfgNode n | Consistency::simpleAndNormalSuccessors(n, _, _, _, _) | n) + result = count(CfgNode n | simpleAndNormalSuccessors(n, _, _, _, _) | n) or type = "Dead end" and - result = count(CfgNode n | Consistency::deadEnd(n) | n) + result = count(CfgNode n | deadEnd(n) | n) or type = "Non-unique split kind" and - result = count(CfgImpl::SplitImpl si | Consistency::nonUniqueSplitKind(si, _) | si) + result = count(CfgImpl::SplitImpl si | nonUniqueSplitKind(si, _) | si) or type = "Non-unique list order" and - result = count(CfgImpl::SplitKind sk | Consistency::nonUniqueListOrder(sk, _) | sk) + result = count(CfgImpl::SplitKind sk | nonUniqueListOrder(sk, _) | sk) or type = "Multiple toStrings" and - result = count(CfgNode n | Consistency::multipleToString(n, _) | n) + result = count(CfgNode n | multipleToString(n, _) | n) or type = "CFG scope lacks initial AST node" and - result = count(CfgScope s | Consistency::scopeNoFirst(s) | s) + result = count(CfgScope s | scopeNoFirst(s) | s) or type = "Non-PostOrderTree Expr node" and result = count(Expr e | nonPostOrderExpr(e, _) | e) From 414fcf836e6b2a3a7660adda6dd706b10848ea18 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 11 Oct 2024 16:02:39 +0100 Subject: [PATCH 144/217] Rust: Move the AST consistency logic to a .qll. --- rust/ql/consistency-queries/AstConsistency.ql | 29 +++++-------------- rust/ql/lib/codeql/rust/AstConsistency.qll | 25 ++++++++++++++++ 2 files changed, 33 insertions(+), 21 deletions(-) create mode 100644 rust/ql/lib/codeql/rust/AstConsistency.qll diff --git a/rust/ql/consistency-queries/AstConsistency.ql b/rust/ql/consistency-queries/AstConsistency.ql index 2187f53b61fe..1db4f27bef27 100644 --- a/rust/ql/consistency-queries/AstConsistency.ql +++ b/rust/ql/consistency-queries/AstConsistency.ql @@ -1,21 +1,8 @@ -import rust -import codeql.rust.elements.internal.generated.ParentChild - -query predicate multipleToString(Element e, string s) { - s = strictconcat(e.toString(), ",") and - strictcount(e.toString()) > 1 -} - -query predicate multipleLocations(Locatable e) { strictcount(e.getLocation()) > 1 } - -query predicate multiplePrimaryQlClasses(Element e, string s) { - s = e.getPrimaryQlClasses() and - strictcount(e.getAPrimaryQlClass()) > 1 -} - -private Element getParent(Element child) { child = getChildAndAccessor(result, _, _) } - -query predicate multipleParents(Element child, Element parent) { - parent = getParent(child) and - strictcount(getParent(child)) > 1 -} +/** + * @name Abstract syntax tree inconsistencies + * @description Lists the abstract syntax tree inconsistencies in the database. This query is intended for internal use. + * @kind table + * @id rust/diagnostics/ast-consistency + */ + +import codeql.rust.AstConsistency diff --git a/rust/ql/lib/codeql/rust/AstConsistency.qll b/rust/ql/lib/codeql/rust/AstConsistency.qll new file mode 100644 index 000000000000..0bb009fed9cb --- /dev/null +++ b/rust/ql/lib/codeql/rust/AstConsistency.qll @@ -0,0 +1,25 @@ +/** + * Provides classes for recognizing control flow graph inconsistencies. + */ + +private import rust +private import codeql.rust.elements.internal.generated.ParentChild + +query predicate multipleToString(Element e, string s) { + s = strictconcat(e.toString(), ",") and + strictcount(e.toString()) > 1 +} + +query predicate multipleLocations(Locatable e) { strictcount(e.getLocation()) > 1 } + +query predicate multiplePrimaryQlClasses(Element e, string s) { + s = e.getPrimaryQlClasses() and + strictcount(e.getAPrimaryQlClass()) > 1 +} + +private Element getParent(Element child) { child = getChildAndAccessor(result, _, _) } + +query predicate multipleParents(Element child, Element parent) { + parent = getParent(child) and + strictcount(getParent(child)) > 1 +} From b5c88c7bfee19ce51f615a8473c0ff808f273763 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 11 Oct 2024 16:07:21 +0100 Subject: [PATCH 145/217] Rust: Give the extraction consistency query metadata as well. --- rust/ql/consistency-queries/ExtractionConsistency.ql | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/rust/ql/consistency-queries/ExtractionConsistency.ql b/rust/ql/consistency-queries/ExtractionConsistency.ql index 20148f0cea2d..8b1f0adca949 100644 --- a/rust/ql/consistency-queries/ExtractionConsistency.ql +++ b/rust/ql/consistency-queries/ExtractionConsistency.ql @@ -1,3 +1,10 @@ +/** + * @name Extraction consistency + * @description Lists the extraction inconsistencies (errors) in the database. This query is intended for internal use. + * @kind table + * @id rust/diagnostics/extraction-consistency + */ + import codeql.rust.Diagnostics query predicate extractionError(ExtractionError ee) { any() } From 2d019eb00e73f598cca2116cc4f15c80cfbfa227 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 11 Oct 2024 16:11:27 +0100 Subject: [PATCH 146/217] Rust: Add QLDoc to the AST consistency rules and make their output more consistent. --- rust/ql/lib/codeql/rust/AstConsistency.qll | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/rust/ql/lib/codeql/rust/AstConsistency.qll b/rust/ql/lib/codeql/rust/AstConsistency.qll index 0bb009fed9cb..3af37eac64b8 100644 --- a/rust/ql/lib/codeql/rust/AstConsistency.qll +++ b/rust/ql/lib/codeql/rust/AstConsistency.qll @@ -5,20 +5,32 @@ private import rust private import codeql.rust.elements.internal.generated.ParentChild -query predicate multipleToString(Element e, string s) { - s = strictconcat(e.toString(), ",") and +/** + * Holds if `e` has more than one `toString()` result. + */ +query predicate multipleToStrings(Element e, string s) { + s = strictconcat(e.toString(), ", ") and strictcount(e.toString()) > 1 } +/** + * Holds if `e` has more than one `Location`. + */ query predicate multipleLocations(Locatable e) { strictcount(e.getLocation()) > 1 } +/** + * Holds if `e` has more than one `getPrimaryQlClasses()` result. + */ query predicate multiplePrimaryQlClasses(Element e, string s) { - s = e.getPrimaryQlClasses() and + s = strictconcat(e.getPrimaryQlClasses(), ", ") and strictcount(e.getAPrimaryQlClass()) > 1 } private Element getParent(Element child) { child = getChildAndAccessor(result, _, _) } +/** + * Holds if `child` has more than one AST parent. + */ query predicate multipleParents(Element child, Element parent) { parent = getParent(child) and strictcount(getParent(child)) > 1 From e01ecd1b79395790caee2b86ba04b4925d4efe3c Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 11 Oct 2024 16:18:33 +0100 Subject: [PATCH 147/217] Rust: Calculate a total of AST inconsistencies. --- rust/ql/lib/codeql/rust/AstConsistency.qll | 18 ++++++++++++++++++ rust/ql/src/queries/summary/Stats.qll | 6 ++++++ rust/ql/src/queries/summary/SummaryStats.ql | 2 ++ .../diagnostics/SummaryStats.expected | 1 + 4 files changed, 27 insertions(+) diff --git a/rust/ql/lib/codeql/rust/AstConsistency.qll b/rust/ql/lib/codeql/rust/AstConsistency.qll index 3af37eac64b8..525726999aab 100644 --- a/rust/ql/lib/codeql/rust/AstConsistency.qll +++ b/rust/ql/lib/codeql/rust/AstConsistency.qll @@ -35,3 +35,21 @@ query predicate multipleParents(Element child, Element parent) { parent = getParent(child) and strictcount(getParent(child)) > 1 } + +/** + * Gets counts of abstract syntax tree inconsistencies of each type. + */ +int getAstInconsistencyCounts(string type) { + // total results from all the AST consistency query predicates. + type = "Multiple toStrings" and + result = count(Element e | multipleToStrings(e, _) | e) + or + type = "Multiple locations" and + result = count(Element e | multipleLocations(e) | e) + or + type = "Multiple primary QL classes" and + result = count(Element e | multiplePrimaryQlClasses(e, _) | e) + or + type = "Multiple parents" and + result = count(Element e | multipleParents(e, _) | e) +} diff --git a/rust/ql/src/queries/summary/Stats.qll b/rust/ql/src/queries/summary/Stats.qll index 242bb990e04a..1660849f22aa 100644 --- a/rust/ql/src/queries/summary/Stats.qll +++ b/rust/ql/src/queries/summary/Stats.qll @@ -3,6 +3,7 @@ */ import rust +import codeql.rust.AstConsistency as AstConsistency private import codeql.rust.controlflow.internal.CfgConsistency as CfgConsistency /** @@ -17,6 +18,11 @@ int getLinesOfUserCode() { result = sum(File f | exists(f.getRelativePath()) | f.getNumberOfLinesOfCode()) } +/** + * Gets a count of the total number of abstract syntax tree inconsistencies in the database. + */ +int getTotalAstInconsistencies() { result = sum(AstConsistency::getAstInconsistencyCounts(_)) } + /** * Gets a count of the total number of control flow graph inconsistencies in the database. */ diff --git a/rust/ql/src/queries/summary/SummaryStats.ql b/rust/ql/src/queries/summary/SummaryStats.ql index 83429fae6d7d..8f032eaec598 100644 --- a/rust/ql/src/queries/summary/SummaryStats.ql +++ b/rust/ql/src/queries/summary/SummaryStats.ql @@ -34,5 +34,7 @@ where or key = "Lines of user code extracted" and value = getLinesOfUserCode().toString() or + key = "Inconsistencies - AST" and value = getTotalAstInconsistencies().toString() + or key = "Inconsistencies - CFG" and value = getTotalCfgInconsistencies().toString() select key, value diff --git a/rust/ql/test/query-tests/diagnostics/SummaryStats.expected b/rust/ql/test/query-tests/diagnostics/SummaryStats.expected index 0a1312ad5d02..56fda0b4f8e5 100644 --- a/rust/ql/test/query-tests/diagnostics/SummaryStats.expected +++ b/rust/ql/test/query-tests/diagnostics/SummaryStats.expected @@ -5,6 +5,7 @@ | Files extracted - total | 7 | | Files extracted - with errors | 2 | | Files extracted - without errors | 5 | +| Inconsistencies - AST | 0 | | Inconsistencies - CFG | 0 | | Lines of code extracted | 59 | | Lines of user code extracted | 59 | From e8953fb5e4b9ce0875b6e71ffd409d0a7bdd1683 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 11 Oct 2024 16:29:17 +0100 Subject: [PATCH 148/217] Rust: Add diagnostic query for AST inconsistency counts. --- .../queries/diagnostics/AstConsistencyCounts.ql | 15 +++++++++++++++ .../diagnostics/AstConsistencyCounts.expected | 4 ++++ .../diagnostics/AstConsistencyCounts.qlref | 1 + 3 files changed, 20 insertions(+) create mode 100644 rust/ql/src/queries/diagnostics/AstConsistencyCounts.ql create mode 100644 rust/ql/test/query-tests/diagnostics/AstConsistencyCounts.expected create mode 100644 rust/ql/test/query-tests/diagnostics/AstConsistencyCounts.qlref diff --git a/rust/ql/src/queries/diagnostics/AstConsistencyCounts.ql b/rust/ql/src/queries/diagnostics/AstConsistencyCounts.ql new file mode 100644 index 000000000000..9a46b1a8bb1b --- /dev/null +++ b/rust/ql/src/queries/diagnostics/AstConsistencyCounts.ql @@ -0,0 +1,15 @@ +/** + * @name Abstract syntax tree inconsistency counts + * @description Counts the number of abstract syntax tree inconsistencies of each type. This query is intended for internal use. + * @kind diagnostic + * @id rust/diagnostics/ast-consistency-counts + */ + +import rust +import codeql.rust.AstConsistency as Consistency + +// see also `rust/diagnostics/ast-consistency`, which lists the +// individual inconsistency results. +from string type, int num +where num = Consistency::getAstInconsistencyCounts(type) +select type, num diff --git a/rust/ql/test/query-tests/diagnostics/AstConsistencyCounts.expected b/rust/ql/test/query-tests/diagnostics/AstConsistencyCounts.expected new file mode 100644 index 000000000000..62ee879ab1eb --- /dev/null +++ b/rust/ql/test/query-tests/diagnostics/AstConsistencyCounts.expected @@ -0,0 +1,4 @@ +| Multiple locations | 0 | +| Multiple parents | 0 | +| Multiple primary QL classes | 0 | +| Multiple toStrings | 0 | diff --git a/rust/ql/test/query-tests/diagnostics/AstConsistencyCounts.qlref b/rust/ql/test/query-tests/diagnostics/AstConsistencyCounts.qlref new file mode 100644 index 000000000000..68d587b883e3 --- /dev/null +++ b/rust/ql/test/query-tests/diagnostics/AstConsistencyCounts.qlref @@ -0,0 +1 @@ +queries/diagnostics/AstConsistencyCounts.ql From 2be5ce4f7a4b28e1a4ffa5e8a913c23c49cf265b Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 14 Oct 2024 17:46:22 +0100 Subject: [PATCH 149/217] Rust: Change rust/summary/summary-statistics to a diagnostic query, so that it gets run as a diagnmetric query for DCA. --- rust/ql/src/queries/summary/SummaryStats.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/ql/src/queries/summary/SummaryStats.ql b/rust/ql/src/queries/summary/SummaryStats.ql index 8f032eaec598..fae7f3e6d6c4 100644 --- a/rust/ql/src/queries/summary/SummaryStats.ql +++ b/rust/ql/src/queries/summary/SummaryStats.ql @@ -1,7 +1,7 @@ /** * @name Summary Statistics * @description A table of summary statistics about a database. - * @kind table + * @kind diagnostic * @id rust/summary/summary-statistics * @tags summary */ From f4d49252395cc17037d636f9a445b1688aae9057 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 15 Oct 2024 11:32:28 +0100 Subject: [PATCH 150/217] Rust: Address QL-for-QL complaint. --- rust/ql/src/queries/summary/Stats.qll | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rust/ql/src/queries/summary/Stats.qll b/rust/ql/src/queries/summary/Stats.qll index 1660849f22aa..69453f68fffb 100644 --- a/rust/ql/src/queries/summary/Stats.qll +++ b/rust/ql/src/queries/summary/Stats.qll @@ -21,7 +21,9 @@ int getLinesOfUserCode() { /** * Gets a count of the total number of abstract syntax tree inconsistencies in the database. */ -int getTotalAstInconsistencies() { result = sum(AstConsistency::getAstInconsistencyCounts(_)) } +int getTotalAstInconsistencies() { + result = sum(string type | | AstConsistency::getAstInconsistencyCounts(type)) +} /** * Gets a count of the total number of control flow graph inconsistencies in the database. From f07f6188ae3b3c403bcc65fd9c591c3477477e3e Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 15 Oct 2024 09:46:53 +0100 Subject: [PATCH 151/217] Rust: Make rust/summary/summary-statistics a metric query so that we can access data in the DCA job. --- rust/ql/src/queries/summary/SummaryStats.ql | 25 ++++++++++----------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/rust/ql/src/queries/summary/SummaryStats.ql b/rust/ql/src/queries/summary/SummaryStats.ql index fae7f3e6d6c4..2a2fe1dcdc89 100644 --- a/rust/ql/src/queries/summary/SummaryStats.ql +++ b/rust/ql/src/queries/summary/SummaryStats.ql @@ -1,7 +1,7 @@ /** * @name Summary Statistics * @description A table of summary statistics about a database. - * @kind diagnostic + * @kind metric * @id rust/summary/summary-statistics * @tags summary */ @@ -10,31 +10,30 @@ import rust import codeql.rust.Diagnostics import Stats -from string key, string value +from string key, int value where - key = "Elements extracted" and value = count(Element e | not e instanceof Unextracted).toString() + key = "Elements extracted" and value = count(Element e | not e instanceof Unextracted) or - key = "Elements unextracted" and value = count(Unextracted e).toString() + key = "Elements unextracted" and value = count(Unextracted e) or - key = "Extraction errors" and value = count(ExtractionError e).toString() + key = "Extraction errors" and value = count(ExtractionError e) or - key = "Extraction warnings" and value = count(ExtractionWarning w).toString() + key = "Extraction warnings" and value = count(ExtractionWarning w) or - key = "Files extracted - total" and value = count(File f | exists(f.getRelativePath())).toString() + key = "Files extracted - total" and value = count(File f | exists(f.getRelativePath())) or key = "Files extracted - with errors" and value = count(File f | exists(f.getRelativePath()) and not f instanceof SuccessfullyExtractedFile) - .toString() or key = "Files extracted - without errors" and - value = count(SuccessfullyExtractedFile f | exists(f.getRelativePath())).toString() + value = count(SuccessfullyExtractedFile f | exists(f.getRelativePath())) or - key = "Lines of code extracted" and value = getLinesOfCode().toString() + key = "Lines of code extracted" and value = getLinesOfCode() or - key = "Lines of user code extracted" and value = getLinesOfUserCode().toString() + key = "Lines of user code extracted" and value = getLinesOfUserCode() or - key = "Inconsistencies - AST" and value = getTotalAstInconsistencies().toString() + key = "Inconsistencies - AST" and value = getTotalAstInconsistencies() or - key = "Inconsistencies - CFG" and value = getTotalCfgInconsistencies().toString() + key = "Inconsistencies - CFG" and value = getTotalCfgInconsistencies() select key, value From 88f6d3b5eaad596439be3317a3ffb27c3200fb5c Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 9 Oct 2024 20:34:34 +0200 Subject: [PATCH 152/217] Rust: Implement `UnusedValue.ql` --- .../src/queries/unusedentities/UnusedValue.ql | 15 +++- .../queries/unusedentities/UnusedVariable.ql | 7 +- .../queries/unusedentities/UnusedVariable.qll | 14 ++++ .../unusedentities/UnusedValue.expected | 16 ++++ .../unusedentities/UnusedVariable.expected | 13 ++++ .../test/query-tests/unusedentities/main.rs | 77 +++++++++---------- 6 files changed, 92 insertions(+), 50 deletions(-) create mode 100644 rust/ql/src/queries/unusedentities/UnusedVariable.qll diff --git a/rust/ql/src/queries/unusedentities/UnusedValue.ql b/rust/ql/src/queries/unusedentities/UnusedValue.ql index a22413696822..6070927f640b 100644 --- a/rust/ql/src/queries/unusedentities/UnusedValue.ql +++ b/rust/ql/src/queries/unusedentities/UnusedValue.ql @@ -9,7 +9,16 @@ */ import rust +import codeql.rust.dataflow.Ssa +import codeql.rust.dataflow.internal.SsaImpl +import UnusedVariable -from Locatable e -where none() // TODO: implement query -select e, "Variable is assigned a value that is never used." +from AstNode write, Ssa::Variable v +where + variableWrite(write, v) and + // SSA definitions are only created for live writes + not write = any(Ssa::WriteDefinition def).getWriteAccess().getAstNode() and + // avoid overlap with the unused variable query + not isUnused(v) and + not v instanceof DiscardVariable +select write, "Variable is assigned a value that is never used." diff --git a/rust/ql/src/queries/unusedentities/UnusedVariable.ql b/rust/ql/src/queries/unusedentities/UnusedVariable.ql index f6be18b76e15..0162d32ff8a3 100644 --- a/rust/ql/src/queries/unusedentities/UnusedVariable.ql +++ b/rust/ql/src/queries/unusedentities/UnusedVariable.ql @@ -9,11 +9,8 @@ */ import rust +import UnusedVariable from Variable v -where - not exists(v.getAnAccess()) and - not exists(v.getInitializer()) and - not v.getName().charAt(0) = "_" and - exists(File f | f.getBaseName() = "main.rs" | v.getLocation().getFile() = f) // temporarily severely limit results +where isUnused(v) select v, "Variable is not used." diff --git a/rust/ql/src/queries/unusedentities/UnusedVariable.qll b/rust/ql/src/queries/unusedentities/UnusedVariable.qll new file mode 100644 index 000000000000..64cca6e237af --- /dev/null +++ b/rust/ql/src/queries/unusedentities/UnusedVariable.qll @@ -0,0 +1,14 @@ +import rust + +/** A deliberately unused variable. */ +class DiscardVariable extends Variable { + DiscardVariable() { this.getName().charAt(0) = "_" } +} + +/** Holds if variable `v` is unused. */ +predicate isUnused(Variable v) { + not exists(v.getAnAccess()) and + not exists(v.getInitializer()) and + not v instanceof DiscardVariable and + exists(File f | f.getBaseName() = "main.rs" | v.getLocation().getFile() = f) // temporarily severely limit results +} diff --git a/rust/ql/test/query-tests/unusedentities/UnusedValue.expected b/rust/ql/test/query-tests/unusedentities/UnusedValue.expected index e69de29bb2d1..6be94698ea8c 100644 --- a/rust/ql/test/query-tests/unusedentities/UnusedValue.expected +++ b/rust/ql/test/query-tests/unusedentities/UnusedValue.expected @@ -0,0 +1,16 @@ +| main.rs:6:9:6:9 | a | Variable is assigned a value that is never used. | +| main.rs:9:9:9:9 | d | Variable is assigned a value that is never used. | +| main.rs:35:5:35:5 | b | Variable is assigned a value that is never used. | +| main.rs:37:5:37:5 | c | Variable is assigned a value that is never used. | +| main.rs:40:5:40:5 | c | Variable is assigned a value that is never used. | +| main.rs:44:9:44:9 | d | Variable is assigned a value that is never used. | +| main.rs:50:5:50:5 | e | Variable is assigned a value that is never used. | +| main.rs:61:5:61:5 | f | Variable is assigned a value that is never used. | +| main.rs:63:5:63:5 | f | Variable is assigned a value that is never used. | +| main.rs:65:5:65:5 | g | Variable is assigned a value that is never used. | +| main.rs:87:9:87:9 | a | Variable is assigned a value that is never used. | +| main.rs:108:9:108:10 | is | Variable is assigned a value that is never used. | +| main.rs:133:13:133:17 | total | Variable is assigned a value that is never used. | +| main.rs:232:13:232:17 | total | Variable is assigned a value that is never used. | +| main.rs:301:9:301:9 | x | Variable is assigned a value that is never used. | +| main.rs:309:17:309:17 | x | Variable is assigned a value that is never used. | diff --git a/rust/ql/test/query-tests/unusedentities/UnusedVariable.expected b/rust/ql/test/query-tests/unusedentities/UnusedVariable.expected index 2c570b315070..c8ce31ab92c9 100644 --- a/rust/ql/test/query-tests/unusedentities/UnusedVariable.expected +++ b/rust/ql/test/query-tests/unusedentities/UnusedVariable.expected @@ -20,3 +20,16 @@ | main.rs:386:21:386:21 | y | Variable is not used. | | main.rs:434:27:434:29 | val | Variable is not used. | | main.rs:437:22:437:24 | acc | Variable is not used. | +| main.rs:164:9:164:9 | x | Variable is not used. | +| main.rs:202:17:202:17 | a | Variable is not used. | +| main.rs:210:20:210:22 | val | Variable is not used. | +| main.rs:224:14:224:16 | val | Variable is not used. | +| main.rs:239:22:239:24 | val | Variable is not used. | +| main.rs:246:24:246:26 | val | Variable is not used. | +| main.rs:254:13:254:15 | num | Variable is not used. | +| main.rs:269:12:269:12 | j | Variable is not used. | +| main.rs:289:25:289:25 | y | Variable is not used. | +| main.rs:292:28:292:28 | a | Variable is not used. | +| main.rs:295:9:295:9 | p | Variable is not used. | +| main.rs:302:13:302:13 | y | Variable is not used. | +| main.rs:310:21:310:21 | y | Variable is not used. | diff --git a/rust/ql/test/query-tests/unusedentities/main.rs b/rust/ql/test/query-tests/unusedentities/main.rs index 3b81b0db54a9..9eb6d03ca21b 100644 --- a/rust/ql/test/query-tests/unusedentities/main.rs +++ b/rust/ql/test/query-tests/unusedentities/main.rs @@ -3,10 +3,10 @@ // --- locals --- fn locals_1() { - let a = 1; // BAD: unused value [NOT DETECTED] + let a = 1; // BAD: unused value let b = 1; let c = 1; - let d = String::from("a"); // BAD: unused value [NOT DETECTED] + let d = String::from("a"); // BAD: unused value let e = String::from("b"); let f = 1; let _ = 1; // (deliberately unused) @@ -32,22 +32,22 @@ fn locals_2() { let h: i32; let i: i32; - b = 1; // BAD: unused value [NOT DETECTED] + b = 1; // BAD: unused value - c = 1; // BAD: unused value [NOT DETECTED] + c = 1; // BAD: unused value c = 2; println!("use {}", c); - c = 3; // BAD: unused value [NOT DETECTED] + c = 3; // BAD: unused value d = 1; if cond() { - d = 2; // BAD: unused value [NOT DETECTED] + d = 2; // BAD: unused value d = 3; } else { } println!("use {}", d); - e = 1; // BAD: unused value [NOT DETECTED] + e = 1; // BAD: unused value if cond() { e = 2; } else { @@ -58,16 +58,16 @@ fn locals_2() { f = 1; f += 1; println!("use {}", f); - f += 1; // BAD: unused value [NOT DETECTED] + f += 1; // BAD: unused value f = 1; - f += 1; // BAD: unused value [NOT DETECTED] + f += 1; // BAD: unused value - g = if cond() { 1 } else { 2 }; // BAD: unused value (x2) [NOT DETECTED] + g = if cond() { 1 } else { 2 }; // BAD: unused value h = if cond() { 3 } else { 4 }; i = if cond() { h } else { 5 }; println!("use {}", i); - _ = 1; // (deliberately unused) [NOT DETECTED] + _ = 1; // GOOD (deliberately unused) } // --- structs --- @@ -84,7 +84,7 @@ impl MyStruct { } fn structs() { - let a = MyStruct { val: 1 }; // BAD: unused value [NOT DETECTED] + let a = MyStruct { val: 1 }; // BAD: unused value let b = MyStruct { val: 2 }; let c = MyStruct { val: 3 }; let mut d: MyStruct; // BAD: unused variable @@ -105,7 +105,7 @@ fn structs() { // --- arrays --- fn arrays() { - let is = [1, 2, 3]; // BAD: unused values (x3) [NOT DETECTED] + let is = [1, 2, 3]; // BAD: unused values (x3) let js = [1, 2, 3]; let ks = [1, 2, 3]; @@ -130,7 +130,7 @@ fn statics() { static mut STAT4: i32 = 0; // BAD: unused value [NOT DETECTED] unsafe { - let total = CON1 + STAT1 + STAT3; + let total = CON1 + STAT1 + STAT3; // BAD: unused value } } @@ -237,7 +237,7 @@ enum YesOrNo { No, } -use YesOrNo::{Yes, No}; // allows `Yes`, `No` to be accessed without qualifiers. +use YesOrNo::{No, Yes}; // allows `Yes`, `No` to be accessed without qualifiers. struct MyPoint { x: i64, @@ -255,7 +255,8 @@ fn if_lets_matches() { } let mut next = Some(30); - while let Some(val) = next // BAD: unused variable + while let Some(val) = // BAD: unused variable + next { next = None; } @@ -270,25 +271,22 @@ fn if_lets_matches() { match c { Some(val) => { // BAD: unused variable } - None => { - } + None => {} } let d = Some(70); match d { Some(val) => { - total += val; - } - None => { + total += val; // BAD: unused value } + None => {} } let e = Option::Some(80); match e { Option::Some(val) => { // BAD: unused variable } - Option::None => { - } + Option::None => {} } let f = MyOption::Some(90); @@ -298,10 +296,9 @@ fn if_lets_matches() { MyOption::None => {} } - let g : Result = Ok(100); + let g: Result = Ok(100); match g { - Ok(_) => { - } + Ok(_) => {} Err(num) => {} // BAD: unused variable } @@ -327,8 +324,7 @@ fn if_lets_matches() { } let l = Yes; - if let Yes = l { - } + if let Yes = l {} match 1 { 1 => {} @@ -337,16 +333,13 @@ fn if_lets_matches() { let p1 = MyPoint { x: 1, y: 2 }; match p1 { - MyPoint { x: 0, y: 0 } => { - } + MyPoint { x: 0, y: 0 } => {} MyPoint { x: 1, y } => { // BAD: unused variable } - MyPoint { x: 2, y: _ } => { - } + MyPoint { x: 2, y: _ } => {} MyPoint { x: 3, y: a } => { // BAD: unused variable } - MyPoint { x: 4, .. } => { - } + MyPoint { x: 4, .. } => {} p => { // BAD: unused variable } } @@ -374,7 +367,7 @@ fn if_lets_matches() { } fn shadowing() -> i32 { - let x = 1; // BAD: unused value [NOT DETECTED] + let x = 1; // BAD: unused value let mut y: i32; // BAD: unused variable { @@ -382,7 +375,7 @@ fn shadowing() -> i32 { let mut y: i32; { - let x = 3; // BAD: unused value [NOT DETECTED] + let x = 3; // BAD: unused value let mut y: i32; // BAD: unused variable } @@ -449,16 +442,16 @@ fn main() { structs(); arrays(); statics(); - println!("lets use result {}", parameters(1, 2, 3)); + println!("lets use result {}", parameters(1, 2, 3)); loops(); if_lets_matches(); shadowing(); func_ptrs(); folds_and_closures(); - unreachable_if(); - unreachable_panic(); - unreachable_match(); - unreachable_loop(); - unreachable_paren(); + unreachable_if(); + unreachable_panic(); + unreachable_match(); + unreachable_loop(); + unreachable_paren(); } From 84a74d910dd65cd9e67b47e415f9147f24520e77 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 15 Oct 2024 15:12:25 +0100 Subject: [PATCH 153/217] Rust: Fixup after merging main. --- .../unusedentities/UnusedValue.expected | 11 +++-- .../unusedentities/UnusedVariable.expected | 41 +++++++------------ .../test/query-tests/unusedentities/main.rs | 12 +++--- 3 files changed, 28 insertions(+), 36 deletions(-) diff --git a/rust/ql/test/query-tests/unusedentities/UnusedValue.expected b/rust/ql/test/query-tests/unusedentities/UnusedValue.expected index 6be94698ea8c..9266840f659d 100644 --- a/rust/ql/test/query-tests/unusedentities/UnusedValue.expected +++ b/rust/ql/test/query-tests/unusedentities/UnusedValue.expected @@ -11,6 +11,11 @@ | main.rs:87:9:87:9 | a | Variable is assigned a value that is never used. | | main.rs:108:9:108:10 | is | Variable is assigned a value that is never used. | | main.rs:133:13:133:17 | total | Variable is assigned a value that is never used. | -| main.rs:232:13:232:17 | total | Variable is assigned a value that is never used. | -| main.rs:301:9:301:9 | x | Variable is assigned a value that is never used. | -| main.rs:309:17:309:17 | x | Variable is assigned a value that is never used. | +| main.rs:203:13:203:31 | res | Variable is assigned a value that is never used. | +| main.rs:218:9:218:24 | kind | Variable is assigned a value that is never used. | +| main.rs:223:9:223:32 | kind | Variable is assigned a value that is never used. | +| main.rs:280:13:280:17 | total | Variable is assigned a value that is never used. | +| main.rs:348:5:348:39 | kind | Variable is assigned a value that is never used. | +| main.rs:370:9:370:9 | x | Variable is assigned a value that is never used. | +| main.rs:378:17:378:17 | x | Variable is assigned a value that is never used. | +| main.rs:432:9:432:10 | i6 | Variable is assigned a value that is never used. | diff --git a/rust/ql/test/query-tests/unusedentities/UnusedVariable.expected b/rust/ql/test/query-tests/unusedentities/UnusedVariable.expected index c8ce31ab92c9..58a47494907d 100644 --- a/rust/ql/test/query-tests/unusedentities/UnusedVariable.expected +++ b/rust/ql/test/query-tests/unusedentities/UnusedVariable.expected @@ -6,30 +6,17 @@ | main.rs:201:9:201:9 | x | Variable is not used. | | main.rs:250:17:250:17 | a | Variable is not used. | | main.rs:258:20:258:22 | val | Variable is not used. | -| main.rs:271:14:271:16 | val | Variable is not used. | -| main.rs:288:22:288:24 | val | Variable is not used. | -| main.rs:296:24:296:26 | val | Variable is not used. | -| main.rs:305:13:305:15 | num | Variable is not used. | -| main.rs:320:12:320:12 | j | Variable is not used. | -| main.rs:342:25:342:25 | y | Variable is not used. | -| main.rs:346:28:346:28 | a | Variable is not used. | -| main.rs:350:9:350:9 | p | Variable is not used. | -| main.rs:365:9:365:13 | right | Variable is not used. | -| main.rs:371:9:371:14 | right2 | Variable is not used. | -| main.rs:378:13:378:13 | y | Variable is not used. | -| main.rs:386:21:386:21 | y | Variable is not used. | -| main.rs:434:27:434:29 | val | Variable is not used. | -| main.rs:437:22:437:24 | acc | Variable is not used. | -| main.rs:164:9:164:9 | x | Variable is not used. | -| main.rs:202:17:202:17 | a | Variable is not used. | -| main.rs:210:20:210:22 | val | Variable is not used. | -| main.rs:224:14:224:16 | val | Variable is not used. | -| main.rs:239:22:239:24 | val | Variable is not used. | -| main.rs:246:24:246:26 | val | Variable is not used. | -| main.rs:254:13:254:15 | num | Variable is not used. | -| main.rs:269:12:269:12 | j | Variable is not used. | -| main.rs:289:25:289:25 | y | Variable is not used. | -| main.rs:292:28:292:28 | a | Variable is not used. | -| main.rs:295:9:295:9 | p | Variable is not used. | -| main.rs:302:13:302:13 | y | Variable is not used. | -| main.rs:310:21:310:21 | y | Variable is not used. | +| main.rs:272:14:272:16 | val | Variable is not used. | +| main.rs:287:22:287:24 | val | Variable is not used. | +| main.rs:294:24:294:26 | val | Variable is not used. | +| main.rs:302:13:302:15 | num | Variable is not used. | +| main.rs:317:12:317:12 | j | Variable is not used. | +| main.rs:337:25:337:25 | y | Variable is not used. | +| main.rs:340:28:340:28 | a | Variable is not used. | +| main.rs:343:9:343:9 | p | Variable is not used. | +| main.rs:358:9:358:13 | right | Variable is not used. | +| main.rs:364:9:364:14 | right2 | Variable is not used. | +| main.rs:371:13:371:13 | y | Variable is not used. | +| main.rs:379:21:379:21 | y | Variable is not used. | +| main.rs:427:27:427:29 | val | Variable is not used. | +| main.rs:430:22:430:24 | acc | Variable is not used. | diff --git a/rust/ql/test/query-tests/unusedentities/main.rs b/rust/ql/test/query-tests/unusedentities/main.rs index 9eb6d03ca21b..e4f8f1646cc1 100644 --- a/rust/ql/test/query-tests/unusedentities/main.rs +++ b/rust/ql/test/query-tests/unusedentities/main.rs @@ -105,7 +105,7 @@ fn structs() { // --- arrays --- fn arrays() { - let is = [1, 2, 3]; // BAD: unused values (x3) + let is = [1, 2, 3]; // BAD: unused value let js = [1, 2, 3]; let ks = [1, 2, 3]; @@ -200,7 +200,7 @@ fn loops() { for x // SPURIOUS: unused variable in 1..10 { - _ = format!("x is {x}"); + _ = format!("x is {x}"); // SPURIOUS: unused value `res` } for x @@ -215,12 +215,12 @@ fn loops() { for x in 1..10 { - assert_eq!(x, 1); + assert_eq!(x, 1); // SPURIOUS: unused value `kind` } for x in 1..10 { - assert_eq!(id(x), id(1)); + assert_eq!(id(x), id(1)); // SPURIOUS: unused value `kind` } } @@ -345,7 +345,7 @@ fn if_lets_matches() { } let duration1 = std::time::Duration::new(10, 0); // ten seconds - assert_eq!(duration1.as_secs(), 10); + assert_eq!(duration1.as_secs(), 10); // SPURIOUS: unused value `kind` let duration2:Result = Ok(std::time::Duration::new(10, 0)); @@ -429,7 +429,7 @@ fn folds_and_closures() { let a5 = 1..10; _ = a5.fold(0, | acc, val | val); // BAD: unused variable - let i6 = 1; + let i6 = 1; // SPURIOUS: unused value let a6 = 1..10; _ = a6.fold(0, | acc, val | acc + val + i6); } From 2a68d3e46eba89bf73c530c2aafce2bed72641e0 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 15 Oct 2024 15:31:21 +0100 Subject: [PATCH 154/217] Rust: Put Yes, No back in the logical order. --- rust/ql/test/query-tests/unusedentities/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/ql/test/query-tests/unusedentities/main.rs b/rust/ql/test/query-tests/unusedentities/main.rs index e4f8f1646cc1..c56bac83b088 100644 --- a/rust/ql/test/query-tests/unusedentities/main.rs +++ b/rust/ql/test/query-tests/unusedentities/main.rs @@ -237,7 +237,7 @@ enum YesOrNo { No, } -use YesOrNo::{No, Yes}; // allows `Yes`, `No` to be accessed without qualifiers. +use YesOrNo::{Yes, No}; // allows `Yes`, `No` to be accessed without qualifiers. struct MyPoint { x: i64, From feed0ebeca5bcb4080f24c6f984ac2ba2f18fecb Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 15 Oct 2024 15:49:56 +0100 Subject: [PATCH 155/217] Rust: Autoformat. --- rust/ql/src/queries/summary/SummaryStats.ql | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/rust/ql/src/queries/summary/SummaryStats.ql b/rust/ql/src/queries/summary/SummaryStats.ql index 2a2fe1dcdc89..d16e229b4ddc 100644 --- a/rust/ql/src/queries/summary/SummaryStats.ql +++ b/rust/ql/src/queries/summary/SummaryStats.ql @@ -23,8 +23,7 @@ where key = "Files extracted - total" and value = count(File f | exists(f.getRelativePath())) or key = "Files extracted - with errors" and - value = - count(File f | exists(f.getRelativePath()) and not f instanceof SuccessfullyExtractedFile) + value = count(File f | exists(f.getRelativePath()) and not f instanceof SuccessfullyExtractedFile) or key = "Files extracted - without errors" and value = count(SuccessfullyExtractedFile f | exists(f.getRelativePath())) From 2c970a080d9a57a01b15ea0f3895309d19e18d7a Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 15 Oct 2024 16:50:15 +0200 Subject: [PATCH 156/217] Rust: remove useless blank line Co-authored-by: Simon Friis Vindum --- rust/codegen/codegen.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/rust/codegen/codegen.sh b/rust/codegen/codegen.sh index 4ab8ad9a5aef..0d746eeb289a 100755 --- a/rust/codegen/codegen.sh +++ b/rust/codegen/codegen.sh @@ -4,7 +4,6 @@ set -eu source misc/bazel/runfiles.sh 2>/dev/null || source external/ql+/misc/bazel/runfiles.sh - ast_generator="$(rlocation "$1")" ast_generator_manifest="$(rlocation "$2")" codegen="$(rlocation "$3")" From 22b8e2cbb495db53317067f3e8cf5c63c77e6ae7 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 15 Oct 2024 16:47:10 +0200 Subject: [PATCH 157/217] C++: Add missing parent scope cases --- cpp/ql/lib/semmle/code/cpp/Element.qll | 21 +++++++++++++------ .../library-tests/scopes/parents/parents.cpp | 9 +++++++- .../scopes/parents/parents.expected | 7 +++++++ 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/Element.qll b/cpp/ql/lib/semmle/code/cpp/Element.qll index 98b5da60c1c5..1cf75aa8a842 100644 --- a/cpp/ql/lib/semmle/code/cpp/Element.qll +++ b/cpp/ql/lib/semmle/code/cpp/Element.qll @@ -129,7 +129,7 @@ class Element extends ElementBase { * or certain kinds of `Statement`. */ Element getParentScope() { - // result instanceof class + // result instanceof Class exists(Declaration m | m = this and result = m.getDeclaringType() and @@ -138,31 +138,40 @@ class Element extends ElementBase { or exists(TemplateClass tc | this = tc.getATemplateArgument() and result = tc) or - // result instanceof namespace + // result instanceof Namespace exists(Namespace n | result = n and n.getADeclaration() = this) or exists(FriendDecl d, Namespace n | this = d and n.getADeclaration() = d and result = n) or exists(Namespace n | this = n and result = n.getParentNamespace()) or - // result instanceof stmt + // result instanceof Stmt exists(LocalVariable v | this = v and exists(DeclStmt ds | ds.getADeclaration() = v and result = ds.getParent()) ) or - exists(Parameter p | this = p and result = p.getFunction()) + exists(Parameter p | + this = p and + ( + result = p.getFunction() or + result = p.getCatchBlock().getParent().(Handler).getParent().(TryStmt).getParent() or + result = p.getRequiresExpr().getEnclosingStmt().getParent() + ) + ) or exists(GlobalVariable g, Namespace n | this = g and n.getADeclaration() = g and result = n) or + exists(TemplateVariable tv | this = tv.getATemplateArgument() and result = tv) + or exists(EnumConstant e | this = e and result = e.getDeclaringEnum()) or - // result instanceof block|function + // result instanceof Block|Function exists(BlockStmt b | this = b and blockscope(unresolveElement(b), unresolveElement(result))) or exists(TemplateFunction tf | this = tf.getATemplateArgument() and result = tf) or - // result instanceof stmt + // result instanceof Stmt exists(ControlStructure s | this = s and result = s.getParent()) or using_container(unresolveElement(result), underlyingElement(this)) diff --git a/cpp/ql/test/library-tests/scopes/parents/parents.cpp b/cpp/ql/test/library-tests/scopes/parents/parents.cpp index 3e0f66aa52c5..cdf42821701f 100644 --- a/cpp/ql/test/library-tests/scopes/parents/parents.cpp +++ b/cpp/ql/test/library-tests/scopes/parents/parents.cpp @@ -14,6 +14,13 @@ namespace foo { } } +template +T var = 42; - +int g() { + requires(int l) { l; }; + return var; +} + +// semmle-extractor-options: -std=c++20 diff --git a/cpp/ql/test/library-tests/scopes/parents/parents.expected b/cpp/ql/test/library-tests/scopes/parents/parents.expected index 1d9e352ab9d6..6d6e9fc2780a 100644 --- a/cpp/ql/test/library-tests/scopes/parents/parents.expected +++ b/cpp/ql/test/library-tests/scopes/parents/parents.expected @@ -1,5 +1,8 @@ | 0 | file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | __va_list_tag | | 0 | file://:0:0:0:0 | (global namespace) | parents.cpp:2:11:2:13 | foo | +| 0 | file://:0:0:0:0 | (global namespace) | parents.cpp:18:3:18:3 | var | +| 0 | file://:0:0:0:0 | (global namespace) | parents.cpp:18:7:18:7 | var | +| 0 | file://:0:0:0:0 | (global namespace) | parents.cpp:20:5:20:5 | g | | 1 | file://:0:0:0:0 | __va_list_tag | file://:0:0:0:0 | fp_offset | | 1 | file://:0:0:0:0 | __va_list_tag | file://:0:0:0:0 | gp_offset | | 1 | file://:0:0:0:0 | __va_list_tag | file://:0:0:0:0 | operator= | @@ -14,7 +17,11 @@ | 1 | parents.cpp:4:10:4:10 | f | parents.cpp:4:19:13:5 | { ... } | | 1 | parents.cpp:4:19:13:5 | { ... } | parents.cpp:5:11:5:11 | j | | 1 | parents.cpp:4:19:13:5 | { ... } | parents.cpp:6:11:10:7 | { ... } | +| 1 | parents.cpp:4:19:13:5 | { ... } | parents.cpp:11:18:11:18 | e | | 1 | parents.cpp:4:19:13:5 | { ... } | parents.cpp:11:21:12:7 | { ... } | | 1 | parents.cpp:6:11:10:7 | { ... } | parents.cpp:7:9:9:9 | for(...;...;...) ... | | 1 | parents.cpp:6:11:10:7 | { ... } | parents.cpp:7:33:9:9 | { ... } | | 1 | parents.cpp:7:33:9:9 | { ... } | parents.cpp:8:15:8:15 | k | +| 1 | parents.cpp:18:7:18:7 | var | parents.cpp:17:19:17:19 | T | +| 1 | parents.cpp:20:5:20:5 | g | parents.cpp:20:9:24:1 | { ... } | +| 1 | parents.cpp:20:9:24:1 | { ... } | parents.cpp:21:16:21:16 | l | From 5b667026cba05ae596482fe5157af28c5c63dbb1 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 15 Oct 2024 16:17:03 +0100 Subject: [PATCH 158/217] Rust: More fixup after some line numbers changed. --- .../CONSISTENCY/CfgConsistency.expected | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/rust/ql/test/query-tests/unusedentities/CONSISTENCY/CfgConsistency.expected b/rust/ql/test/query-tests/unusedentities/CONSISTENCY/CfgConsistency.expected index bdd995b19f3e..6711de9645d7 100644 --- a/rust/ql/test/query-tests/unusedentities/CONSISTENCY/CfgConsistency.expected +++ b/rust/ql/test/query-tests/unusedentities/CONSISTENCY/CfgConsistency.expected @@ -1,11 +1,11 @@ multipleSuccessors -| main.rs:428:17:428:17 | 0 | successor | main.rs:428:9:428:10 | a2 | -| main.rs:428:17:428:17 | 0 | successor | main.rs:428:20:428:62 | ClosureExpr | -| main.rs:431:17:431:17 | 0 | successor | main.rs:431:9:431:10 | a3 | -| main.rs:431:17:431:17 | 0 | successor | main.rs:431:20:431:41 | ClosureExpr | -| main.rs:434:17:434:17 | 0 | successor | main.rs:434:9:434:10 | a4 | -| main.rs:434:17:434:17 | 0 | successor | main.rs:434:20:434:35 | ClosureExpr | -| main.rs:437:17:437:17 | 0 | successor | main.rs:437:9:437:10 | a5 | -| main.rs:437:17:437:17 | 0 | successor | main.rs:437:20:437:35 | ClosureExpr | -| main.rs:441:17:441:17 | 0 | successor | main.rs:441:9:441:10 | a6 | -| main.rs:441:17:441:17 | 0 | successor | main.rs:441:20:441:46 | ClosureExpr | +| main.rs:421:17:421:17 | 0 | successor | main.rs:421:9:421:10 | a2 | +| main.rs:421:17:421:17 | 0 | successor | main.rs:421:20:421:62 | ClosureExpr | +| main.rs:424:17:424:17 | 0 | successor | main.rs:424:9:424:10 | a3 | +| main.rs:424:17:424:17 | 0 | successor | main.rs:424:20:424:41 | ClosureExpr | +| main.rs:427:17:427:17 | 0 | successor | main.rs:427:9:427:10 | a4 | +| main.rs:427:17:427:17 | 0 | successor | main.rs:427:20:427:35 | ClosureExpr | +| main.rs:430:17:430:17 | 0 | successor | main.rs:430:9:430:10 | a5 | +| main.rs:430:17:430:17 | 0 | successor | main.rs:430:20:430:35 | ClosureExpr | +| main.rs:434:17:434:17 | 0 | successor | main.rs:434:9:434:10 | a6 | +| main.rs:434:17:434:17 | 0 | successor | main.rs:434:20:434:46 | ClosureExpr | From 65dbc1de9179e0b3c3aff6349779e44b8bc7dacf Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 15 Oct 2024 18:17:00 +0200 Subject: [PATCH 159/217] Python: Add `copy.replace` test to list of runnable tests --- .../tainttracking/defaultAdditionalTaintStep/test_collections.py | 1 + 1 file changed, 1 insertion(+) diff --git a/python/ql/test/library-tests/dataflow/tainttracking/defaultAdditionalTaintStep/test_collections.py b/python/ql/test/library-tests/dataflow/tainttracking/defaultAdditionalTaintStep/test_collections.py index 8a667e95fb07..6c86d1c75d58 100644 --- a/python/ql/test/library-tests/dataflow/tainttracking/defaultAdditionalTaintStep/test_collections.py +++ b/python/ql/test/library-tests/dataflow/tainttracking/defaultAdditionalTaintStep/test_collections.py @@ -302,6 +302,7 @@ def set_add(): test_defaultdict("key", "key") test_copy_1() test_copy_2() +test_replace() list_index_assign() list_index_aug_assign() From fd31e6d8138da09e3480370dbe282db08d31629e Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 9 Oct 2024 16:36:10 +0200 Subject: [PATCH 160/217] Bazel: skip git lfs endpoints presenting malformed data --- misc/bazel/internal/git_lfs_probe.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/misc/bazel/internal/git_lfs_probe.py b/misc/bazel/internal/git_lfs_probe.py index 22ca9855f54a..4f0ee9fa30e8 100755 --- a/misc/bazel/internal/git_lfs_probe.py +++ b/misc/bazel/internal/git_lfs_probe.py @@ -179,15 +179,18 @@ def get_locations(objects): try: with urllib.request.urlopen(req, timeout=TIMEOUT) as resp: data = json.load(resp) + assert len(data["objects"]) == len( + indexes + ), f"received {len(data)} objects, expected {len(indexes)}" + for i, resp in zip(indexes, data["objects"]): + ret[i] = f'{resp["oid"]} {resp["actions"]["download"]["href"]}' + return ret except urllib.error.URLError as e: warn(f"encountered {type(e).__name__} {e}, ignoring endpoint {endpoint.name}") continue - assert len(data["objects"]) == len( - indexes - ), f"received {len(data)} objects, expected {len(indexes)}" - for i, resp in zip(indexes, data["objects"]): - ret[i] = f'{resp["oid"]} {resp["actions"]["download"]["href"]}' - return ret + except KeyError: + warn(f"encountered malformed response, ignoring endpoint {endpoint.name}:\n{json.dumps(data, indent=2)}") + continue raise NoEndpointsFound From 8f451515e0713bd4802b6dd4d3b253266bbbc375 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 16 Oct 2024 10:16:38 +0200 Subject: [PATCH 161/217] Bazel: print workaround for `git_lfs_probe.py` failing --- misc/bazel/internal/git_lfs_probe.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/misc/bazel/internal/git_lfs_probe.py b/misc/bazel/internal/git_lfs_probe.py index 4f0ee9fa30e8..57f0fd5b8bb0 100755 --- a/misc/bazel/internal/git_lfs_probe.py +++ b/misc/bazel/internal/git_lfs_probe.py @@ -213,5 +213,12 @@ def get_lfs_object(path): for resp in get_locations(objects): print(resp) except NoEndpointsFound as e: - print(f"ERROR: no valid endpoints found", file=sys.stderr) + print("""\ +ERROR: no valid endpoints found, your git authentication method might be currently unsupported by this script. +You can bypass this error by running from semmle-code (this might take a while): + git config lfs.fetchexclude "" + git -C ql config lfs.fetchinclude \\* + git lfs fetch && git lfs checkout + cd ql + git lfs fetch && git lfs checkout""", file=sys.stderr) sys.exit(1) From 1eb0b49634d894957b6a5730bd549576541bd9a5 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 15 Oct 2024 18:02:06 +0200 Subject: [PATCH 162/217] C++: Improve parameter naming --- cpp/ql/lib/semmle/code/cpp/Parameter.qll | 3 ++- cpp/ql/lib/semmle/code/cpp/Variable.qll | 20 ++++++++----------- .../declarationEntry/roundTrip.expected | 4 ++-- .../more/declarationEntry.expected | 8 ++++---- .../parameters/toStrings/params.expected | 16 +++++++-------- .../Dependencies/dependencies.expected | 4 ++-- 6 files changed, 26 insertions(+), 29 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/Parameter.qll b/cpp/ql/lib/semmle/code/cpp/Parameter.qll index 49e47d40ef0a..e45dd56e7204 100644 --- a/cpp/ql/lib/semmle/code/cpp/Parameter.qll +++ b/cpp/ql/lib/semmle/code/cpp/Parameter.qll @@ -73,7 +73,8 @@ class Parameter extends LocalScopeVariable, @parameter { } private VariableDeclarationEntry getANamedDeclarationEntry() { - result = this.getAnEffectiveDeclarationEntry() and result.getName() != "" + result = this.getAnEffectiveDeclarationEntry() and + exists(string name | var_decls(unresolveElement(result), _, _, name, _) | name != "") } /** diff --git a/cpp/ql/lib/semmle/code/cpp/Variable.qll b/cpp/ql/lib/semmle/code/cpp/Variable.qll index 96bfabb4de07..b3b619c4ccc5 100644 --- a/cpp/ql/lib/semmle/code/cpp/Variable.qll +++ b/cpp/ql/lib/semmle/code/cpp/Variable.qll @@ -241,6 +241,10 @@ class VariableDeclarationEntry extends DeclarationEntry, @var_decl { name != "" and result = name or name = "" and result = this.getVariable().(LocalVariable).getName() + or + name = "" and + not this instanceof ParameterDeclarationEntry and + result = this.getVariable().(Parameter).getName() ) ) } @@ -295,19 +299,11 @@ class ParameterDeclarationEntry extends VariableDeclarationEntry { private string getAnonymousParameterDescription() { not exists(this.getName()) and - exists(string idx | - idx = - ((this.getIndex() + 1).toString() + "th") - .replaceAll("1th", "1st") - .replaceAll("2th", "2nd") - .replaceAll("3th", "3rd") - .replaceAll("11st", "11th") - .replaceAll("12nd", "12th") - .replaceAll("13rd", "13th") and + exists(string anon | + anon = "(unnamed parameter " + this.getIndex().toString() + ")" and if exists(this.getCanonicalName()) - then - result = "declaration of " + this.getCanonicalName() + " as anonymous " + idx + " parameter" - else result = "declaration of " + idx + " parameter" + then result = "declaration of " + this.getCanonicalName() + " as " + anon + else result = "declaration of " + anon ) } diff --git a/cpp/ql/test/library-tests/declarationEntry/declarationEntry/roundTrip.expected b/cpp/ql/test/library-tests/declarationEntry/declarationEntry/roundTrip.expected index 2f9ea170973e..29366af69930 100644 --- a/cpp/ql/test/library-tests/declarationEntry/declarationEntry/roundTrip.expected +++ b/cpp/ql/test/library-tests/declarationEntry/declarationEntry/roundTrip.expected @@ -25,8 +25,8 @@ | declarationEntry.cpp:39:7:39:7 | declaration of operator= | declarationEntry.cpp:39:7:39:7 | operator= | yes | | declarationEntry.cpp:39:7:39:13 | definition of myClass | declarationEntry.cpp:39:7:39:13 | myClass | yes | | declarationEntry.cpp:42:6:42:21 | definition of myMemberVariable | declarationEntry.cpp:42:6:42:21 | myMemberVariable | yes | -| file://:0:0:0:0 | declaration of 1st parameter | file://:0:0:0:0 | (unnamed parameter 0) | yes | -| file://:0:0:0:0 | declaration of 1st parameter | file://:0:0:0:0 | (unnamed parameter 0) | yes | +| file://:0:0:0:0 | declaration of (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | yes | +| file://:0:0:0:0 | declaration of (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | yes | | file://:0:0:0:0 | definition of fp_offset | file://:0:0:0:0 | fp_offset | yes | | file://:0:0:0:0 | definition of gp_offset | file://:0:0:0:0 | gp_offset | yes | | file://:0:0:0:0 | definition of overflow_arg_area | file://:0:0:0:0 | overflow_arg_area | yes | diff --git a/cpp/ql/test/library-tests/declarationEntry/more/declarationEntry.expected b/cpp/ql/test/library-tests/declarationEntry/more/declarationEntry.expected index b4817f60ad14..767da646f5e0 100644 --- a/cpp/ql/test/library-tests/declarationEntry/more/declarationEntry.expected +++ b/cpp/ql/test/library-tests/declarationEntry/more/declarationEntry.expected @@ -1,7 +1,7 @@ -| file://:0:0:0:0 | declaration of 1st parameter | -| file://:0:0:0:0 | declaration of 1st parameter | -| file://:0:0:0:0 | declaration of 1st parameter | -| file://:0:0:0:0 | declaration of 1st parameter | +| file://:0:0:0:0 | declaration of (unnamed parameter 0) | +| file://:0:0:0:0 | declaration of (unnamed parameter 0) | +| file://:0:0:0:0 | declaration of (unnamed parameter 0) | +| file://:0:0:0:0 | declaration of (unnamed parameter 0) | | file://:0:0:0:0 | definition of fp_offset | | file://:0:0:0:0 | definition of gp_offset | | file://:0:0:0:0 | definition of overflow_arg_area | diff --git a/cpp/ql/test/library-tests/parameters/toStrings/params.expected b/cpp/ql/test/library-tests/parameters/toStrings/params.expected index 908089b31e68..f5687137e87b 100644 --- a/cpp/ql/test/library-tests/parameters/toStrings/params.expected +++ b/cpp/ql/test/library-tests/parameters/toStrings/params.expected @@ -1,11 +1,11 @@ -| test.c:2:8:2:10 | declaration of 1st parameter | -| test.c:2:13:2:15 | declaration of 2nd parameter | -| test.c:2:18:2:20 | declaration of 3rd parameter | -| test.c:2:23:2:25 | declaration of 4th parameter | -| test.c:3:8:3:10 | declaration of y1 as anonymous 1st parameter | -| test.c:3:13:3:15 | declaration of y2 as anonymous 2nd parameter | -| test.c:3:18:3:20 | declaration of y3 as anonymous 3rd parameter | -| test.c:3:23:3:25 | declaration of y4 as anonymous 4th parameter | +| test.c:2:8:2:10 | declaration of (unnamed parameter 0) | +| test.c:2:13:2:15 | declaration of (unnamed parameter 1) | +| test.c:2:18:2:20 | declaration of (unnamed parameter 2) | +| test.c:2:23:2:25 | declaration of (unnamed parameter 3) | +| test.c:3:8:3:10 | declaration of y1 as (unnamed parameter 0) | +| test.c:3:13:3:15 | declaration of y2 as (unnamed parameter 1) | +| test.c:3:18:3:20 | declaration of y3 as (unnamed parameter 2) | +| test.c:3:23:3:25 | declaration of y4 as (unnamed parameter 3) | | test.c:4:12:4:13 | declaration of x1 | | test.c:4:20:4:21 | declaration of x2 | | test.c:4:28:4:29 | declaration of x3 | diff --git a/cpp/ql/test/query-tests/Metrics/Dependencies/dependencies.expected b/cpp/ql/test/query-tests/Metrics/Dependencies/dependencies.expected index 6c93362a0961..9e7f88376f88 100644 --- a/cpp/ql/test/query-tests/Metrics/Dependencies/dependencies.expected +++ b/cpp/ql/test/query-tests/Metrics/Dependencies/dependencies.expected @@ -1,5 +1,5 @@ -| file://:0:0:0:0 | declaration of 1st parameter | LibB/libb_internal.h:5:8:5:12 | thing | -| file://:0:0:0:0 | declaration of 1st parameter | LibB/libb_internal.h:5:8:5:12 | thing | +| file://:0:0:0:0 | declaration of (unnamed parameter 0) | LibB/libb_internal.h:5:8:5:12 | thing | +| file://:0:0:0:0 | declaration of (unnamed parameter 0) | LibB/libb_internal.h:5:8:5:12 | thing | | include.h:3:25:3:33 | num | LibD/libd.h:5:12:5:14 | num | | main.cpp:8:31:8:31 | call to container | LibC/libc.h:9:3:9:3 | container | | main.cpp:8:31:8:31 | definition of x | LibB/libb_internal.h:5:8:5:12 | thing | From 4577d1ce060791be7292fc15512a8c66bd2c2e12 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 16 Oct 2024 11:38:30 +0100 Subject: [PATCH 163/217] Rust: Additional test cases. --- .../unusedentities/UnusedValue.expected | 9 ++ .../test/query-tests/unusedentities/more.rs | 119 ++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 rust/ql/test/query-tests/unusedentities/more.rs diff --git a/rust/ql/test/query-tests/unusedentities/UnusedValue.expected b/rust/ql/test/query-tests/unusedentities/UnusedValue.expected index 9266840f659d..4b2118953ecf 100644 --- a/rust/ql/test/query-tests/unusedentities/UnusedValue.expected +++ b/rust/ql/test/query-tests/unusedentities/UnusedValue.expected @@ -19,3 +19,12 @@ | main.rs:370:9:370:9 | x | Variable is assigned a value that is never used. | | main.rs:378:17:378:17 | x | Variable is assigned a value that is never used. | | main.rs:432:9:432:10 | i6 | Variable is assigned a value that is never used. | +| more.rs:8:9:8:13 | times | Variable is assigned a value that is never used. | +| more.rs:9:9:9:14 | unused | Variable is assigned a value that is never used. | +| more.rs:21:9:21:14 | unused | Variable is assigned a value that is never used. | +| more.rs:38:23:38:25 | val | Variable is assigned a value that is never used. | +| more.rs:42:19:42:21 | val | Variable is assigned a value that is never used. | +| more.rs:58:9:58:11 | val | Variable is assigned a value that is never used. | +| more.rs:80:9:80:14 | a_ptr4 | Variable is assigned a value that is never used. | +| more.rs:95:9:95:13 | d_ptr | Variable is assigned a value that is never used. | +| more.rs:101:9:101:17 | f_ptr | Variable is assigned a value that is never used. | diff --git a/rust/ql/test/query-tests/unusedentities/more.rs b/rust/ql/test/query-tests/unusedentities/more.rs new file mode 100644 index 000000000000..9bea3de66daf --- /dev/null +++ b/rust/ql/test/query-tests/unusedentities/more.rs @@ -0,0 +1,119 @@ + + +// --- traits --- + +trait Incrementable { + fn increment( + &mut self, + times: i32, // SPURIOUS: unused value + unused: i32 // SPURIOUS: unused value + ); +} + +struct MyValue { + value: i32, +} + +impl Incrementable for MyValue { + fn increment( + &mut self, + times: i32, + unused: i32 // BAD: unused variable [NOT DETECTED] SPURIOUS: unused value + ) { + self.value += times; + } +} + +fn traits() { + let mut i = MyValue { value: 0 }; + let a = 1; + let b = 2; + + i.increment(a, b); +} + +// --- generics --- + +trait MySettable { + fn set(&mut self, val: T); // SPURIOUS: unused value +} + +trait MyGettable { + fn get(&self, val: T) -> &T; // SPURIOUS: unused value +} + +struct MyContainer { + val: T +} + +impl MySettable for MyContainer { + fn set(&mut self, val: T) { + self.val = val; + } +} + +impl MyGettable for MyContainer { + fn get( + &self, + val: T // BAD: unused variable [NOT DETECTED] SPURIOUS: unused value + ) -> &T { + return &(self.val); + } +} + +fn generics() { + let mut a = MyContainer { val: 1 }; // BAD: unused value [NOT DETECTED] + let b = MyContainer { val: 2 }; + + a.set( + *b.get(3) + ); +} + +// --- pointers --- + +fn pointers() { + let a = 1; + let a_ptr1 = &a; + let a_ptr2 = &a; + let a_ptr3 = &a; // BAD: unused value [NOT DETECTED] + let a_ptr4 = &a; // BAD: unused value + println!("{}", *a_ptr1); + println!("{}", a_ptr2); + println!("{}", &a_ptr3); + + let b = 2; // BAD: unused value [NOT DETECTED] + let b_ptr = &b; + println!("{}", b_ptr); + + let c = 3; + let c_ptr = &c; + let c_ptr_ptr = &c_ptr; + println!("{}", **c_ptr_ptr); + + let d = 4; + let d_ptr = &d; // BAD: unused value + let d_ptr_ptr = &&d; + println!("{}", **d_ptr_ptr); + + let e = 5; // BAD: unused value [NOT DETECTED] + let f = 6; + let mut f_ptr = &e; // BAD: unused value + f_ptr = &f; + println!("{}", *f_ptr); + + let mut g = 7; // BAD: unused value [NOT DETECTED] + let g_ptr = &mut g; + *g_ptr = 77; // BAD: unused value [NOT DETECTED] + + let mut h = 8; // BAD: unused value [NOT DETECTED] + let h_ptr = &mut h; + *h_ptr = 88; + println!("{}", h); + + let mut i = 9; // BAD: unused value [NOT DETECTED] + let i_ptr = &mut i; + *i_ptr = 99; + let i_ptr2 = &mut i; + println!("{}", *i_ptr2); +} From 9ea4c40ca999b66bba411c28e96114bc39c09f50 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 16 Oct 2024 14:13:55 +0100 Subject: [PATCH 164/217] C++: Add failing test. --- .../dataflow-tests/dataflow-consistency.expected | 3 +++ .../dataflow/dataflow-tests/test.cpp | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected index d97abde482eb..e9dc3cdb790b 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected @@ -3,6 +3,9 @@ uniqueEnclosingCallable | test.cpp:864:47:864:54 | call to source | Node should have one enclosing callable but has 0. | | test.cpp:872:46:872:51 | call to source | Node should have one enclosing callable but has 0. | | test.cpp:872:53:872:56 | 1 | Node should have one enclosing callable but has 0. | +| test.cpp:1126:33:1129:1 | {...} | Node should have one enclosing callable but has 0. | +| test.cpp:1127:3:1127:13 | reads_input | Node should have one enclosing callable but has 0. | +| test.cpp:1128:3:1128:21 | not_does_read_input | Node should have one enclosing callable but has 0. | uniqueCallEnclosingCallable | test.cpp:864:47:864:54 | call to source | Call should have one enclosing callable but has 0. | | test.cpp:872:46:872:51 | call to source | Call should have one enclosing callable but has 0. | diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp index 3a6ffe9b716b..4c84a209b4f7 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp @@ -1115,4 +1115,20 @@ void indirect_sink_const_ref(const T&); void test_temp_with_conversion_from_materialization() { indirect_sink_const_ref(source()); // $ ir MISSING: ast +} + +void reads_input(int x) { + sink(x); // $ MISSING: ast,ir +} + +void not_does_read_input(int x); + +void (*dispatch_table[])(int) = { + reads_input, + not_does_read_input +}; + +void test_dispatch_table(int i) { + int x = source(); + dispatch_table[i](x); } \ No newline at end of file From 30e07817781f06efc88ddd554bde213b86fa7e5d Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 16 Oct 2024 14:14:52 +0100 Subject: [PATCH 165/217] C++: Also check for source calls when using 'lambda call resolution'. --- .../semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll index ac6e898748ab..8f0ae53171e3 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll @@ -1328,7 +1328,10 @@ predicate lambdaCreation(Node creation, LambdaCallKind kind, DataFlowCallable c) /** Holds if `call` is a lambda call of kind `kind` where `receiver` is the lambda expression. */ predicate lambdaCall(DataFlowCall call, LambdaCallKind kind, Node receiver) { - call.(SummaryCall).getReceiver() = receiver.(FlowSummaryNode).getSummaryNode() and + ( + call.(SummaryCall).getReceiver() = receiver.(FlowSummaryNode).getSummaryNode() or + call.asCallInstruction().getCallTargetOperand() = receiver.asOperand() + ) and exists(kind) } From 2dbf75fde91e64a9169f3cbf6042fc7d48b2c14f Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 16 Oct 2024 14:15:05 +0100 Subject: [PATCH 166/217] C++: Accept test changes. --- .../dataflow/dataflow-tests/test-source-sink.expected | 1 + cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected index 90f797429c96..10a8bef9a338 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected @@ -323,6 +323,7 @@ irFlow | test.cpp:1069:9:1069:14 | call to source | test.cpp:1074:10:1074:10 | i | | test.cpp:1069:9:1069:14 | call to source | test.cpp:1081:10:1081:10 | i | | test.cpp:1117:27:1117:34 | call to source | test.cpp:1117:27:1117:34 | call to source | +| test.cpp:1132:11:1132:16 | call to source | test.cpp:1121:8:1121:8 | x | | true_upon_entry.cpp:9:11:9:16 | call to source | true_upon_entry.cpp:13:8:13:8 | x | | true_upon_entry.cpp:17:11:17:16 | call to source | true_upon_entry.cpp:21:8:21:8 | x | | true_upon_entry.cpp:27:9:27:14 | call to source | true_upon_entry.cpp:29:8:29:8 | x | diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp index 4c84a209b4f7..60baa08bb8d7 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp @@ -1118,7 +1118,7 @@ void test_temp_with_conversion_from_materialization() { } void reads_input(int x) { - sink(x); // $ MISSING: ast,ir + sink(x); // $ ir MISSING: ast } void not_does_read_input(int x); From 7e2542bd74034b5882c12fcf56a3945554813f1d Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:32:16 +0100 Subject: [PATCH 167/217] Rust: Accept consistency check failures. --- .../unusedentities/CONSISTENCY/CfgConsistency.expected | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/rust/ql/test/query-tests/unusedentities/CONSISTENCY/CfgConsistency.expected b/rust/ql/test/query-tests/unusedentities/CONSISTENCY/CfgConsistency.expected index 6711de9645d7..4f7bdcbbaa47 100644 --- a/rust/ql/test/query-tests/unusedentities/CONSISTENCY/CfgConsistency.expected +++ b/rust/ql/test/query-tests/unusedentities/CONSISTENCY/CfgConsistency.expected @@ -9,3 +9,9 @@ multipleSuccessors | main.rs:430:17:430:17 | 0 | successor | main.rs:430:20:430:35 | ClosureExpr | | main.rs:434:17:434:17 | 0 | successor | main.rs:434:9:434:10 | a6 | | main.rs:434:17:434:17 | 0 | successor | main.rs:434:20:434:46 | ClosureExpr | +| more.rs:32:17:32:17 | a | successor | more.rs:32:5:32:5 | i | +| more.rs:32:17:32:17 | a | successor | more.rs:32:20:32:20 | b | +deadEnd +| more.rs:9:9:9:19 | Param | +| more.rs:38:23:38:28 | Param | +| more.rs:42:19:42:24 | Param | From a99d57640a2b08d3f775539f9317406b737120a8 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 16 Oct 2024 14:45:44 +0100 Subject: [PATCH 168/217] C++: Add a new API for getting the target of a 'Call' expression. --- .../code/cpp/ir/dataflow/internal/DataFlowUtil.qll | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll index f2263abf7f52..d0935bb76d2e 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll @@ -17,6 +17,7 @@ private import SsaInternals as Ssa private import DataFlowImplCommon as DataFlowImplCommon private import codeql.util.Unit private import Node0ToString +private import DataFlowDispatch as DataFlowDispatch import ExprNodes /** @@ -2497,3 +2498,16 @@ class AdditionalCallTarget extends Unit { */ abstract Declaration viableTarget(Call call); } + +/** + * Gets a function that may be called by `call`. + * + * Note that `call` may be a call to a function pointer expression. + */ +Function getARuntimeTarget(Call call) { + exists(DataFlowCall dfCall | dfCall.asCallInstruction().getUnconvertedResultExpression() = call | + result = DataFlowDispatch::viableCallable(dfCall).asSourceCallable() + or + result = DataFlowImplCommon::viableCallableLambda(dfCall, _).asSourceCallable() + ) +} From a92de0df930004043401b52894ea26e4b73a849c Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 16 Oct 2024 16:21:06 +0100 Subject: [PATCH 169/217] Rust: Test spacing. --- .../query-tests/unusedentities/UnreachableCode.expected | 4 ++-- rust/ql/test/query-tests/unusedentities/unreachable.rs | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected b/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected index fa463c47fc35..e7a99a041ffe 100644 --- a/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected +++ b/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected @@ -10,5 +10,5 @@ | unreachable.rs:147:3:147:17 | ExprStmt | This code is never reached. | | unreachable.rs:156:4:156:18 | ExprStmt | This code is never reached. | | unreachable.rs:162:3:162:17 | ExprStmt | This code is never reached. | -| unreachable.rs:168:4:168:18 | ExprStmt | This code is never reached. | -| unreachable.rs:171:2:171:16 | ExprStmt | This code is never reached. | +| unreachable.rs:176:4:176:18 | ExprStmt | This code is never reached. | +| unreachable.rs:179:2:179:16 | ExprStmt | This code is never reached. | diff --git a/rust/ql/test/query-tests/unusedentities/unreachable.rs b/rust/ql/test/query-tests/unusedentities/unreachable.rs index 328c6edf0ea0..a62ff3e56a84 100644 --- a/rust/ql/test/query-tests/unusedentities/unreachable.rs +++ b/rust/ql/test/query-tests/unusedentities/unreachable.rs @@ -162,6 +162,14 @@ fn unreachable_loop() { do_something(); // BAD: unreachable code } + + + + + + + + loop { if cond() { return; From e21959d7bb36dd361c4abcb77e03984e69ada1ed Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 16 Oct 2024 16:55:41 +0100 Subject: [PATCH 170/217] Rust: Add more unreachable test cases. --- .../unusedentities/UnreachableCode.expected | 6 ++ .../test/query-tests/unusedentities/main.rs | 6 +- .../query-tests/unusedentities/unreachable.rs | 56 ++++++++++++++++--- 3 files changed, 59 insertions(+), 9 deletions(-) diff --git a/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected b/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected index e7a99a041ffe..169dba5c739e 100644 --- a/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected +++ b/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected @@ -10,5 +10,11 @@ | unreachable.rs:147:3:147:17 | ExprStmt | This code is never reached. | | unreachable.rs:156:4:156:18 | ExprStmt | This code is never reached. | | unreachable.rs:162:3:162:17 | ExprStmt | This code is never reached. | +| unreachable.rs:168:4:168:18 | ExprStmt | This code is never reached. | | unreachable.rs:176:4:176:18 | ExprStmt | This code is never reached. | | unreachable.rs:179:2:179:16 | ExprStmt | This code is never reached. | +| unreachable.rs:193:3:193:17 | ExprStmt | This code is never reached. | +| unreachable.rs:196:2:196:16 | ExprStmt | This code is never reached. | +| unreachable.rs:201:3:201:17 | ExprStmt | This code is never reached. | +| unreachable.rs:216:2:216:16 | ExprStmt | This code is never reached. | +| unreachable.rs:225:2:225:16 | ExprStmt | This code is never reached. | diff --git a/rust/ql/test/query-tests/unusedentities/main.rs b/rust/ql/test/query-tests/unusedentities/main.rs index 3b81b0db54a9..1e2e22639f65 100644 --- a/rust/ql/test/query-tests/unusedentities/main.rs +++ b/rust/ql/test/query-tests/unusedentities/main.rs @@ -456,9 +456,13 @@ fn main() { func_ptrs(); folds_and_closures(); - unreachable_if(); + unreachable_if_1(); unreachable_panic(); unreachable_match(); unreachable_loop(); unreachable_paren(); + unreachable_let_1(); + unreachable_let_2(); + unreachable_if_2(); + unreachable_if_3(); } diff --git a/rust/ql/test/query-tests/unusedentities/unreachable.rs b/rust/ql/test/query-tests/unusedentities/unreachable.rs index a62ff3e56a84..fc784979928a 100644 --- a/rust/ql/test/query-tests/unusedentities/unreachable.rs +++ b/rust/ql/test/query-tests/unusedentities/unreachable.rs @@ -7,7 +7,7 @@ fn do_something() { } -fn unreachable_if() { +fn unreachable_if_1() { if false { do_something(); // BAD: unreachable code } else { @@ -162,13 +162,13 @@ fn unreachable_loop() { do_something(); // BAD: unreachable code } - - - - - - - + for x in 1..10 { + if cond() { + continue; + do_something(); // BAD: unreachable code + } + do_something(); + } loop { if cond() { @@ -184,3 +184,43 @@ fn unreachable_loop() { fn unreachable_paren() { let _ = (((1))); } + +fn unreachable_let_1() { + if let a = get_a_number() { + do_something(); + return; + } else { + do_something(); // SPURIOUS: unreachable code + } + + do_something(); // SPURIOUS: unreachable code +} + +fn unreachable_let_2() { + let a = get_a_number() else { + do_something(); // SPURIOUS: unreachable code + return; + }; + + do_something(); +} + +fn unreachable_if_2() { + if cond() { + do_something(); + return; + } else { + do_something(); + } + + do_something(); // SPURIOUS: unreachable code +} + +fn unreachable_if_3() { + if !cond() { + do_something(); + return; + } + + do_something(); // SPURIOUS: unreachable code +} From baab74cb3524733f6a561bfd332d17e50333cc62 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 16 Oct 2024 17:45:44 +0100 Subject: [PATCH 171/217] C++: Add change notes. --- .../change-notes/2024-10-16-function-pointer-resolution.md | 4 ++++ .../2024-10-16-new-api-for-call-target-resolution.md | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2024-10-16-function-pointer-resolution.md create mode 100644 cpp/ql/lib/change-notes/2024-10-16-new-api-for-call-target-resolution.md diff --git a/cpp/ql/lib/change-notes/2024-10-16-function-pointer-resolution.md b/cpp/ql/lib/change-notes/2024-10-16-function-pointer-resolution.md new file mode 100644 index 000000000000..d682ee78d592 --- /dev/null +++ b/cpp/ql/lib/change-notes/2024-10-16-function-pointer-resolution.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The function call target resolution algorithm has been improved to resolve more calls through function pointers. As a result, dataflow queries may have more results. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2024-10-16-new-api-for-call-target-resolution.md b/cpp/ql/lib/change-notes/2024-10-16-new-api-for-call-target-resolution.md new file mode 100644 index 000000000000..2e1898845f3c --- /dev/null +++ b/cpp/ql/lib/change-notes/2024-10-16-new-api-for-call-target-resolution.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* Added a new predicate `DataFlow::getARuntimeTarget` for getting a function that may be invoked by a `Call` expression. Unlike `Call.getTarget` this new predicate may also resolves function pointers. \ No newline at end of file From b97ec405d0e399008b16aac32181e459ddb72d94 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 17 Oct 2024 10:34:49 +0200 Subject: [PATCH 172/217] Rust: Add CFG tests with empty tuple and struct patterns --- .../library-tests/controlflow/Cfg.expected | 205 +++++++++--------- .../ql/test/library-tests/controlflow/test.rs | 16 ++ 2 files changed, 123 insertions(+), 98 deletions(-) diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 42f39dfec830..b62828d99394 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -632,101 +632,110 @@ edges | test.rs:281:36:281:36 | 5 | test.rs:281:32:281:36 | ... + ... | | | test.rs:282:13:282:24 | PathPat | test.rs:282:29:282:29 | 5 | match | | test.rs:282:29:282:29 | 5 | test.rs:276:9:283:9 | MatchExpr | | -| test.rs:288:5:293:5 | enter test_infinite_loop | test.rs:289:9:291:9 | ExprStmt | | -| test.rs:289:9:291:9 | ExprStmt | test.rs:290:13:290:13 | 1 | | -| test.rs:289:14:291:9 | BlockExpr | test.rs:290:13:290:13 | 1 | | -| test.rs:290:13:290:13 | 1 | test.rs:289:14:291:9 | BlockExpr | | -| test.rs:295:5:298:5 | enter test_let_match | test.rs:295:23:295:23 | a | | -| test.rs:295:5:298:5 | exit test_let_match (normal) | test.rs:295:5:298:5 | exit test_let_match | | -| test.rs:295:23:295:23 | a | test.rs:295:23:295:36 | Param | match | -| test.rs:295:23:295:36 | Param | test.rs:296:9:296:49 | LetStmt | | -| test.rs:295:39:298:5 | BlockExpr | test.rs:295:5:298:5 | exit test_let_match (normal) | | -| test.rs:296:9:296:49 | LetStmt | test.rs:296:23:296:23 | a | | -| test.rs:296:13:296:19 | TupleStructPat | test.rs:296:18:296:18 | n | match | -| test.rs:296:13:296:19 | TupleStructPat | test.rs:296:32:296:46 | "Expected some" | no-match | -| test.rs:296:18:296:18 | n | test.rs:297:9:297:9 | n | match | -| test.rs:296:23:296:23 | a | test.rs:296:13:296:19 | TupleStructPat | | -| test.rs:296:32:296:46 | "Expected some" | test.rs:296:30:296:48 | BlockExpr | | -| test.rs:297:9:297:9 | n | test.rs:295:39:298:5 | BlockExpr | | -| test.rs:301:1:306:1 | enter dead_code | test.rs:302:5:304:5 | ExprStmt | | -| test.rs:301:1:306:1 | exit dead_code (normal) | test.rs:301:1:306:1 | exit dead_code | | -| test.rs:302:5:304:5 | ExprStmt | test.rs:302:9:302:12 | true | | -| test.rs:302:9:302:12 | true | test.rs:303:9:303:17 | ExprStmt | true | -| test.rs:303:9:303:16 | ReturnExpr | test.rs:301:1:306:1 | exit dead_code (normal) | return | -| test.rs:303:9:303:17 | ExprStmt | test.rs:303:16:303:16 | 0 | | -| test.rs:303:16:303:16 | 0 | test.rs:303:9:303:16 | ReturnExpr | | -| test.rs:308:1:321:1 | enter labelled_block1 | test.rs:309:5:320:6 | LetStmt | | -| test.rs:308:1:321:1 | exit labelled_block1 (normal) | test.rs:308:1:321:1 | exit labelled_block1 | | -| test.rs:308:29:321:1 | BlockExpr | test.rs:308:1:321:1 | exit labelled_block1 (normal) | | -| test.rs:309:5:320:6 | LetStmt | test.rs:310:9:310:19 | ExprStmt | | -| test.rs:309:9:309:14 | result | test.rs:308:29:321:1 | BlockExpr | match | -| test.rs:309:18:320:5 | BlockExpr | test.rs:309:9:309:14 | result | | -| test.rs:310:9:310:16 | PathExpr | test.rs:310:9:310:18 | CallExpr | | -| test.rs:310:9:310:18 | CallExpr | test.rs:311:9:313:9 | ExprStmt | | -| test.rs:310:9:310:19 | ExprStmt | test.rs:310:9:310:16 | PathExpr | | -| test.rs:311:9:313:9 | ExprStmt | test.rs:311:12:311:28 | PathExpr | | -| test.rs:311:9:313:9 | IfExpr | test.rs:314:9:314:24 | ExprStmt | | -| test.rs:311:12:311:28 | PathExpr | test.rs:311:12:311:30 | CallExpr | | -| test.rs:311:12:311:30 | CallExpr | test.rs:311:9:313:9 | IfExpr | false | -| test.rs:311:12:311:30 | CallExpr | test.rs:312:13:312:27 | ExprStmt | true | -| test.rs:312:13:312:26 | BreakExpr | test.rs:309:18:320:5 | BlockExpr | break | -| test.rs:312:13:312:27 | ExprStmt | test.rs:312:26:312:26 | 1 | | -| test.rs:312:26:312:26 | 1 | test.rs:312:13:312:26 | BreakExpr | | -| test.rs:314:9:314:21 | PathExpr | test.rs:314:9:314:23 | CallExpr | | -| test.rs:314:9:314:23 | CallExpr | test.rs:315:9:317:9 | ExprStmt | | -| test.rs:314:9:314:24 | ExprStmt | test.rs:314:9:314:21 | PathExpr | | -| test.rs:315:9:317:9 | ExprStmt | test.rs:315:12:315:28 | PathExpr | | -| test.rs:315:9:317:9 | IfExpr | test.rs:318:9:318:24 | ExprStmt | | -| test.rs:315:12:315:28 | PathExpr | test.rs:315:12:315:30 | CallExpr | | -| test.rs:315:12:315:30 | CallExpr | test.rs:315:9:317:9 | IfExpr | false | -| test.rs:315:12:315:30 | CallExpr | test.rs:316:13:316:27 | ExprStmt | true | -| test.rs:316:13:316:26 | BreakExpr | test.rs:309:18:320:5 | BlockExpr | break | -| test.rs:316:13:316:27 | ExprStmt | test.rs:316:26:316:26 | 2 | | -| test.rs:316:26:316:26 | 2 | test.rs:316:13:316:26 | BreakExpr | | -| test.rs:318:9:318:21 | PathExpr | test.rs:318:9:318:23 | CallExpr | | -| test.rs:318:9:318:23 | CallExpr | test.rs:319:9:319:9 | 3 | | -| test.rs:318:9:318:24 | ExprStmt | test.rs:318:9:318:21 | PathExpr | | -| test.rs:319:9:319:9 | 3 | test.rs:309:18:320:5 | BlockExpr | | -| test.rs:323:1:331:1 | enter labelled_block2 | test.rs:324:5:330:6 | LetStmt | | -| test.rs:323:1:331:1 | exit labelled_block2 (normal) | test.rs:323:1:331:1 | exit labelled_block2 | | -| test.rs:323:29:331:1 | BlockExpr | test.rs:323:1:331:1 | exit labelled_block2 (normal) | | -| test.rs:324:5:330:6 | LetStmt | test.rs:325:9:325:34 | LetStmt | | -| test.rs:324:9:324:14 | result | test.rs:323:29:331:1 | BlockExpr | match | -| test.rs:324:18:330:5 | BlockExpr | test.rs:324:9:324:14 | result | | -| test.rs:325:9:325:34 | LetStmt | test.rs:325:30:325:33 | PathExpr | | -| test.rs:325:13:325:13 | x | test.rs:326:9:328:10 | LetStmt | match | -| test.rs:325:30:325:33 | PathExpr | test.rs:325:13:325:13 | x | | -| test.rs:326:9:328:10 | LetStmt | test.rs:326:23:326:23 | x | | -| test.rs:326:13:326:19 | TupleStructPat | test.rs:326:18:326:18 | y | match | -| test.rs:326:13:326:19 | TupleStructPat | test.rs:327:13:327:27 | ExprStmt | no-match | -| test.rs:326:18:326:18 | y | test.rs:329:9:329:9 | x | match | -| test.rs:326:23:326:23 | x | test.rs:326:13:326:19 | TupleStructPat | | -| test.rs:327:13:327:26 | BreakExpr | test.rs:324:18:330:5 | BlockExpr | break | -| test.rs:327:13:327:27 | ExprStmt | test.rs:327:26:327:26 | 1 | | -| test.rs:327:26:327:26 | 1 | test.rs:327:13:327:26 | BreakExpr | | -| test.rs:329:9:329:9 | x | test.rs:324:18:330:5 | BlockExpr | | -| test.rs:333:1:339:1 | enter test_nested_function | test.rs:334:5:334:18 | LetStmt | | -| test.rs:333:1:339:1 | exit test_nested_function (normal) | test.rs:333:1:339:1 | exit test_nested_function | | -| test.rs:333:27:339:1 | BlockExpr | test.rs:333:1:339:1 | exit test_nested_function (normal) | | -| test.rs:334:5:334:18 | LetStmt | test.rs:334:17:334:17 | 0 | | -| test.rs:334:9:334:13 | x | test.rs:335:5:337:5 | nested | match | -| test.rs:334:17:334:17 | 0 | test.rs:334:9:334:13 | x | | -| test.rs:335:5:337:5 | enter nested | test.rs:335:15:335:15 | x | | -| test.rs:335:5:337:5 | exit nested (normal) | test.rs:335:5:337:5 | exit nested | | -| test.rs:335:5:337:5 | nested | test.rs:338:5:338:19 | ExprStmt | | -| test.rs:335:15:335:15 | x | test.rs:335:15:335:25 | Param | match | -| test.rs:335:15:335:25 | Param | test.rs:336:9:336:16 | ExprStmt | | -| test.rs:335:28:337:5 | BlockExpr | test.rs:335:5:337:5 | exit nested (normal) | | -| test.rs:336:9:336:10 | * ... | test.rs:336:15:336:15 | 1 | | -| test.rs:336:9:336:15 | ... += ... | test.rs:335:28:337:5 | BlockExpr | | -| test.rs:336:9:336:16 | ExprStmt | test.rs:336:10:336:10 | x | | -| test.rs:336:10:336:10 | x | test.rs:336:9:336:10 | * ... | | -| test.rs:336:15:336:15 | 1 | test.rs:336:9:336:15 | ... += ... | | -| test.rs:338:5:338:10 | PathExpr | test.rs:338:17:338:17 | x | | -| test.rs:338:5:338:18 | CallExpr | test.rs:333:27:339:1 | BlockExpr | | -| test.rs:338:5:338:19 | ExprStmt | test.rs:338:5:338:10 | PathExpr | | -| test.rs:338:12:338:17 | RefExpr | test.rs:338:5:338:18 | CallExpr | | -| test.rs:338:17:338:17 | x | test.rs:338:12:338:17 | RefExpr | | +| test.rs:289:5:292:5 | enter empty_tuple_pattern | test.rs:289:28:289:31 | unit | | +| test.rs:289:28:289:31 | unit | test.rs:289:28:289:35 | Param | match | +| test.rs:289:28:289:35 | Param | test.rs:290:9:290:22 | LetStmt | | +| test.rs:290:9:290:22 | LetStmt | test.rs:290:18:290:21 | unit | | +| test.rs:290:18:290:21 | unit | test.rs:290:13:290:14 | TuplePat | | +| test.rs:296:5:300:5 | enter empty_struct_pattern | test.rs:296:29:296:30 | st | | +| test.rs:296:29:296:30 | st | test.rs:296:29:296:40 | Param | match | +| test.rs:296:29:296:40 | Param | test.rs:297:15:297:16 | st | | +| test.rs:297:15:297:16 | st | test.rs:298:13:298:23 | RecordPat | | +| test.rs:304:5:309:5 | enter test_infinite_loop | test.rs:305:9:307:9 | ExprStmt | | +| test.rs:305:9:307:9 | ExprStmt | test.rs:306:13:306:13 | 1 | | +| test.rs:305:14:307:9 | BlockExpr | test.rs:306:13:306:13 | 1 | | +| test.rs:306:13:306:13 | 1 | test.rs:305:14:307:9 | BlockExpr | | +| test.rs:311:5:314:5 | enter test_let_match | test.rs:311:23:311:23 | a | | +| test.rs:311:5:314:5 | exit test_let_match (normal) | test.rs:311:5:314:5 | exit test_let_match | | +| test.rs:311:23:311:23 | a | test.rs:311:23:311:36 | Param | match | +| test.rs:311:23:311:36 | Param | test.rs:312:9:312:49 | LetStmt | | +| test.rs:311:39:314:5 | BlockExpr | test.rs:311:5:314:5 | exit test_let_match (normal) | | +| test.rs:312:9:312:49 | LetStmt | test.rs:312:23:312:23 | a | | +| test.rs:312:13:312:19 | TupleStructPat | test.rs:312:18:312:18 | n | match | +| test.rs:312:13:312:19 | TupleStructPat | test.rs:312:32:312:46 | "Expected some" | no-match | +| test.rs:312:18:312:18 | n | test.rs:313:9:313:9 | n | match | +| test.rs:312:23:312:23 | a | test.rs:312:13:312:19 | TupleStructPat | | +| test.rs:312:32:312:46 | "Expected some" | test.rs:312:30:312:48 | BlockExpr | | +| test.rs:313:9:313:9 | n | test.rs:311:39:314:5 | BlockExpr | | +| test.rs:317:1:322:1 | enter dead_code | test.rs:318:5:320:5 | ExprStmt | | +| test.rs:317:1:322:1 | exit dead_code (normal) | test.rs:317:1:322:1 | exit dead_code | | +| test.rs:318:5:320:5 | ExprStmt | test.rs:318:9:318:12 | true | | +| test.rs:318:9:318:12 | true | test.rs:319:9:319:17 | ExprStmt | true | +| test.rs:319:9:319:16 | ReturnExpr | test.rs:317:1:322:1 | exit dead_code (normal) | return | +| test.rs:319:9:319:17 | ExprStmt | test.rs:319:16:319:16 | 0 | | +| test.rs:319:16:319:16 | 0 | test.rs:319:9:319:16 | ReturnExpr | | +| test.rs:324:1:337:1 | enter labelled_block1 | test.rs:325:5:336:6 | LetStmt | | +| test.rs:324:1:337:1 | exit labelled_block1 (normal) | test.rs:324:1:337:1 | exit labelled_block1 | | +| test.rs:324:29:337:1 | BlockExpr | test.rs:324:1:337:1 | exit labelled_block1 (normal) | | +| test.rs:325:5:336:6 | LetStmt | test.rs:326:9:326:19 | ExprStmt | | +| test.rs:325:9:325:14 | result | test.rs:324:29:337:1 | BlockExpr | match | +| test.rs:325:18:336:5 | BlockExpr | test.rs:325:9:325:14 | result | | +| test.rs:326:9:326:16 | PathExpr | test.rs:326:9:326:18 | CallExpr | | +| test.rs:326:9:326:18 | CallExpr | test.rs:327:9:329:9 | ExprStmt | | +| test.rs:326:9:326:19 | ExprStmt | test.rs:326:9:326:16 | PathExpr | | +| test.rs:327:9:329:9 | ExprStmt | test.rs:327:12:327:28 | PathExpr | | +| test.rs:327:9:329:9 | IfExpr | test.rs:330:9:330:24 | ExprStmt | | +| test.rs:327:12:327:28 | PathExpr | test.rs:327:12:327:30 | CallExpr | | +| test.rs:327:12:327:30 | CallExpr | test.rs:327:9:329:9 | IfExpr | false | +| test.rs:327:12:327:30 | CallExpr | test.rs:328:13:328:27 | ExprStmt | true | +| test.rs:328:13:328:26 | BreakExpr | test.rs:325:18:336:5 | BlockExpr | break | +| test.rs:328:13:328:27 | ExprStmt | test.rs:328:26:328:26 | 1 | | +| test.rs:328:26:328:26 | 1 | test.rs:328:13:328:26 | BreakExpr | | +| test.rs:330:9:330:21 | PathExpr | test.rs:330:9:330:23 | CallExpr | | +| test.rs:330:9:330:23 | CallExpr | test.rs:331:9:333:9 | ExprStmt | | +| test.rs:330:9:330:24 | ExprStmt | test.rs:330:9:330:21 | PathExpr | | +| test.rs:331:9:333:9 | ExprStmt | test.rs:331:12:331:28 | PathExpr | | +| test.rs:331:9:333:9 | IfExpr | test.rs:334:9:334:24 | ExprStmt | | +| test.rs:331:12:331:28 | PathExpr | test.rs:331:12:331:30 | CallExpr | | +| test.rs:331:12:331:30 | CallExpr | test.rs:331:9:333:9 | IfExpr | false | +| test.rs:331:12:331:30 | CallExpr | test.rs:332:13:332:27 | ExprStmt | true | +| test.rs:332:13:332:26 | BreakExpr | test.rs:325:18:336:5 | BlockExpr | break | +| test.rs:332:13:332:27 | ExprStmt | test.rs:332:26:332:26 | 2 | | +| test.rs:332:26:332:26 | 2 | test.rs:332:13:332:26 | BreakExpr | | +| test.rs:334:9:334:21 | PathExpr | test.rs:334:9:334:23 | CallExpr | | +| test.rs:334:9:334:23 | CallExpr | test.rs:335:9:335:9 | 3 | | +| test.rs:334:9:334:24 | ExprStmt | test.rs:334:9:334:21 | PathExpr | | +| test.rs:335:9:335:9 | 3 | test.rs:325:18:336:5 | BlockExpr | | +| test.rs:339:1:347:1 | enter labelled_block2 | test.rs:340:5:346:6 | LetStmt | | +| test.rs:339:1:347:1 | exit labelled_block2 (normal) | test.rs:339:1:347:1 | exit labelled_block2 | | +| test.rs:339:29:347:1 | BlockExpr | test.rs:339:1:347:1 | exit labelled_block2 (normal) | | +| test.rs:340:5:346:6 | LetStmt | test.rs:341:9:341:34 | LetStmt | | +| test.rs:340:9:340:14 | result | test.rs:339:29:347:1 | BlockExpr | match | +| test.rs:340:18:346:5 | BlockExpr | test.rs:340:9:340:14 | result | | +| test.rs:341:9:341:34 | LetStmt | test.rs:341:30:341:33 | PathExpr | | +| test.rs:341:13:341:13 | x | test.rs:342:9:344:10 | LetStmt | match | +| test.rs:341:30:341:33 | PathExpr | test.rs:341:13:341:13 | x | | +| test.rs:342:9:344:10 | LetStmt | test.rs:342:23:342:23 | x | | +| test.rs:342:13:342:19 | TupleStructPat | test.rs:342:18:342:18 | y | match | +| test.rs:342:13:342:19 | TupleStructPat | test.rs:343:13:343:27 | ExprStmt | no-match | +| test.rs:342:18:342:18 | y | test.rs:345:9:345:9 | x | match | +| test.rs:342:23:342:23 | x | test.rs:342:13:342:19 | TupleStructPat | | +| test.rs:343:13:343:26 | BreakExpr | test.rs:340:18:346:5 | BlockExpr | break | +| test.rs:343:13:343:27 | ExprStmt | test.rs:343:26:343:26 | 1 | | +| test.rs:343:26:343:26 | 1 | test.rs:343:13:343:26 | BreakExpr | | +| test.rs:345:9:345:9 | x | test.rs:340:18:346:5 | BlockExpr | | +| test.rs:349:1:355:1 | enter test_nested_function | test.rs:350:5:350:18 | LetStmt | | +| test.rs:349:1:355:1 | exit test_nested_function (normal) | test.rs:349:1:355:1 | exit test_nested_function | | +| test.rs:349:27:355:1 | BlockExpr | test.rs:349:1:355:1 | exit test_nested_function (normal) | | +| test.rs:350:5:350:18 | LetStmt | test.rs:350:17:350:17 | 0 | | +| test.rs:350:9:350:13 | x | test.rs:351:5:353:5 | nested | match | +| test.rs:350:17:350:17 | 0 | test.rs:350:9:350:13 | x | | +| test.rs:351:5:353:5 | enter nested | test.rs:351:15:351:15 | x | | +| test.rs:351:5:353:5 | exit nested (normal) | test.rs:351:5:353:5 | exit nested | | +| test.rs:351:5:353:5 | nested | test.rs:354:5:354:19 | ExprStmt | | +| test.rs:351:15:351:15 | x | test.rs:351:15:351:25 | Param | match | +| test.rs:351:15:351:25 | Param | test.rs:352:9:352:16 | ExprStmt | | +| test.rs:351:28:353:5 | BlockExpr | test.rs:351:5:353:5 | exit nested (normal) | | +| test.rs:352:9:352:10 | * ... | test.rs:352:15:352:15 | 1 | | +| test.rs:352:9:352:15 | ... += ... | test.rs:351:28:353:5 | BlockExpr | | +| test.rs:352:9:352:16 | ExprStmt | test.rs:352:10:352:10 | x | | +| test.rs:352:10:352:10 | x | test.rs:352:9:352:10 | * ... | | +| test.rs:352:15:352:15 | 1 | test.rs:352:9:352:15 | ... += ... | | +| test.rs:354:5:354:10 | PathExpr | test.rs:354:17:354:17 | x | | +| test.rs:354:5:354:18 | CallExpr | test.rs:349:27:355:1 | BlockExpr | | +| test.rs:354:5:354:19 | ExprStmt | test.rs:354:5:354:10 | PathExpr | | +| test.rs:354:12:354:17 | RefExpr | test.rs:354:5:354:18 | CallExpr | | +| test.rs:354:17:354:17 | x | test.rs:354:12:354:17 | RefExpr | | breakTarget | test.rs:16:17:16:21 | BreakExpr | test.rs:10:9:22:9 | LoopExpr | | test.rs:30:21:30:25 | BreakExpr | test.rs:28:13:35:13 | LoopExpr | @@ -738,9 +747,9 @@ breakTarget | test.rs:170:17:170:28 | BreakExpr | test.rs:168:13:173:9 | LoopExpr | | test.rs:183:17:183:35 | BreakExpr | test.rs:181:13:186:9 | LoopExpr | | test.rs:195:13:195:30 | BreakExpr | test.rs:194:13:196:9 | BlockExpr | -| test.rs:312:13:312:26 | BreakExpr | test.rs:309:18:320:5 | BlockExpr | -| test.rs:316:13:316:26 | BreakExpr | test.rs:309:18:320:5 | BlockExpr | -| test.rs:327:13:327:26 | BreakExpr | test.rs:324:18:330:5 | BlockExpr | +| test.rs:328:13:328:26 | BreakExpr | test.rs:325:18:336:5 | BlockExpr | +| test.rs:332:13:332:26 | BreakExpr | test.rs:325:18:336:5 | BlockExpr | +| test.rs:343:13:343:26 | BreakExpr | test.rs:340:18:346:5 | BlockExpr | continueTarget | test.rs:19:17:19:24 | ContinueExpr | test.rs:10:9:22:9 | LoopExpr | | test.rs:45:21:45:28 | ContinueExpr | test.rs:43:13:50:13 | LoopExpr | diff --git a/rust/ql/test/library-tests/controlflow/test.rs b/rust/ql/test/library-tests/controlflow/test.rs index 674c697f7154..162f472861f4 100644 --- a/rust/ql/test/library-tests/controlflow/test.rs +++ b/rust/ql/test/library-tests/controlflow/test.rs @@ -284,6 +284,22 @@ mod match_expression { } } +mod patterns { + + fn empty_tuple_pattern(unit: ()) -> void { + let () = unit; + return; + } + + struct MyStruct {} + + fn empty_struct_pattern(st: MyStruct) -> i64 { + match st { + MyStruct {} => 1, + } + } +} + mod divergence { fn test_infinite_loop() -> &'static str { loop { From 2d1c62b6df14855565a6669e5f52bee6cc119cd6 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 17 Oct 2024 10:40:34 +0200 Subject: [PATCH 173/217] Rust: Fix dead end in CFG for empty tuple and struct patterns --- .../rust/controlflow/internal/ControlFlowGraphImpl.qll | 9 +++++++-- rust/ql/test/library-tests/controlflow/Cfg.expected | 9 +++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index f6587bf76554..4366610bb9c0 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -612,6 +612,8 @@ module PatternTrees { result = rank[i + 1](Pat pat, int j | pat = this.getPat(j) | pat order by j) } + predicate isEmpty() { not any(Pat p) = this.getPat(0) } + override predicate propagatesAbnormal(AstNode child) { child = this.getPatRanked(_) } override predicate succ(AstNode pred, AstNode succ, Completion c) { @@ -629,8 +631,11 @@ module PatternTrees { override predicate last(AstNode node, Completion c) { node = this and - completionIsValidFor(c, this) and - c.(MatchCompletion).failed() + ( + completionIsValidFor(c, this) and c.(MatchCompletion).failed() + or + this.isEmpty() and node = this and c.(MatchCompletion).succeeded() + ) or exists(int i | last(this.getPatRanked(i), node, c) | c.(MatchCompletion).failed() diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index b62828d99394..64b2760c2104 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -633,14 +633,23 @@ edges | test.rs:282:13:282:24 | PathPat | test.rs:282:29:282:29 | 5 | match | | test.rs:282:29:282:29 | 5 | test.rs:276:9:283:9 | MatchExpr | | | test.rs:289:5:292:5 | enter empty_tuple_pattern | test.rs:289:28:289:31 | unit | | +| test.rs:289:5:292:5 | exit empty_tuple_pattern (normal) | test.rs:289:5:292:5 | exit empty_tuple_pattern | | | test.rs:289:28:289:31 | unit | test.rs:289:28:289:35 | Param | match | | test.rs:289:28:289:35 | Param | test.rs:290:9:290:22 | LetStmt | | | test.rs:290:9:290:22 | LetStmt | test.rs:290:18:290:21 | unit | | +| test.rs:290:13:290:14 | TuplePat | test.rs:291:9:291:15 | ExprStmt | match | | test.rs:290:18:290:21 | unit | test.rs:290:13:290:14 | TuplePat | | +| test.rs:291:9:291:14 | ReturnExpr | test.rs:289:5:292:5 | exit empty_tuple_pattern (normal) | return | +| test.rs:291:9:291:15 | ExprStmt | test.rs:291:9:291:14 | ReturnExpr | | | test.rs:296:5:300:5 | enter empty_struct_pattern | test.rs:296:29:296:30 | st | | +| test.rs:296:5:300:5 | exit empty_struct_pattern (normal) | test.rs:296:5:300:5 | exit empty_struct_pattern | | | test.rs:296:29:296:30 | st | test.rs:296:29:296:40 | Param | match | | test.rs:296:29:296:40 | Param | test.rs:297:15:297:16 | st | | +| test.rs:296:50:300:5 | BlockExpr | test.rs:296:5:300:5 | exit empty_struct_pattern (normal) | | +| test.rs:297:9:299:9 | MatchExpr | test.rs:296:50:300:5 | BlockExpr | | | test.rs:297:15:297:16 | st | test.rs:298:13:298:23 | RecordPat | | +| test.rs:298:13:298:23 | RecordPat | test.rs:298:28:298:28 | 1 | match | +| test.rs:298:28:298:28 | 1 | test.rs:297:9:299:9 | MatchExpr | | | test.rs:304:5:309:5 | enter test_infinite_loop | test.rs:305:9:307:9 | ExprStmt | | | test.rs:305:9:307:9 | ExprStmt | test.rs:306:13:306:13 | 1 | | | test.rs:305:14:307:9 | BlockExpr | test.rs:306:13:306:13 | 1 | | From 5e04358ece4aeea08c2ed8b740aa6f3c08f9fccb Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Thu, 17 Oct 2024 10:57:30 +0100 Subject: [PATCH 174/217] Update cpp/ql/lib/change-notes/2024-10-16-new-api-for-call-target-resolution.md Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com> --- .../2024-10-16-new-api-for-call-target-resolution.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/change-notes/2024-10-16-new-api-for-call-target-resolution.md b/cpp/ql/lib/change-notes/2024-10-16-new-api-for-call-target-resolution.md index 2e1898845f3c..db4da19c02b5 100644 --- a/cpp/ql/lib/change-notes/2024-10-16-new-api-for-call-target-resolution.md +++ b/cpp/ql/lib/change-notes/2024-10-16-new-api-for-call-target-resolution.md @@ -1,4 +1,4 @@ --- category: feature --- -* Added a new predicate `DataFlow::getARuntimeTarget` for getting a function that may be invoked by a `Call` expression. Unlike `Call.getTarget` this new predicate may also resolves function pointers. \ No newline at end of file +* Added a new predicate `DataFlow::getARuntimeTarget` for getting a function that may be invoked by a `Call` expression. Unlike `Call.getTarget` this new predicate may also resolve function pointers. \ No newline at end of file From 5007666d6e2a734d509426c345d221a23b570925 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 17 Oct 2024 11:26:24 +0100 Subject: [PATCH 175/217] Add helper predicate `lookThroughPointerType` --- go/ql/lib/semmle/go/Decls.qll | 5 +---- go/ql/lib/semmle/go/Scopes.qll | 8 +------- go/ql/lib/semmle/go/Types.qll | 20 +++++++++---------- go/ql/lib/semmle/go/controlflow/IR.qll | 6 +----- .../LengthComparisonOffByOne.ql | 2 +- 5 files changed, 14 insertions(+), 27 deletions(-) diff --git a/go/ql/lib/semmle/go/Decls.qll b/go/ql/lib/semmle/go/Decls.qll index 8e3df22cc800..6c66b085575b 100644 --- a/go/ql/lib/semmle/go/Decls.qll +++ b/go/ql/lib/semmle/go/Decls.qll @@ -212,10 +212,7 @@ class MethodDecl extends FuncDecl { * * is `Rectangle`. */ - NamedType getReceiverBaseType() { - result = this.getReceiverType() or - result = this.getReceiverType().(PointerType).getBaseType() - } + NamedType getReceiverBaseType() { result = lookThroughPointerType(this.getReceiverType()) } /** * Gets the receiver variable of this method. diff --git a/go/ql/lib/semmle/go/Scopes.qll b/go/ql/lib/semmle/go/Scopes.qll index 191534759ea6..f9b9e3a26b9a 100644 --- a/go/ql/lib/semmle/go/Scopes.qll +++ b/go/ql/lib/semmle/go/Scopes.qll @@ -519,13 +519,7 @@ class Method extends Function { * Gets the receiver base type of this method, that is, either the base type of the receiver type * if it is a pointer type, or the receiver type itself if it is not a pointer type. */ - Type getReceiverBaseType() { - exists(Type recv | recv = this.getReceiverType() | - if recv instanceof PointerType - then result = recv.(PointerType).getBaseType() - else result = recv - ) - } + Type getReceiverBaseType() { result = lookThroughPointerType(this.getReceiverType()) } /** Holds if this method has name `m` and belongs to the method set of type `tp` or `*tp`. */ private predicate isIn(NamedType tp, string m) { diff --git a/go/ql/lib/semmle/go/Types.qll b/go/ql/lib/semmle/go/Types.qll index 4818db2f774d..e86acd5a3e84 100644 --- a/go/ql/lib/semmle/go/Types.qll +++ b/go/ql/lib/semmle/go/Types.qll @@ -446,11 +446,7 @@ class StructType extends @structtype, CompositeType { if n = "" then ( isEmbedded = true and - ( - name = tp.(NamedType).getName() - or - name = tp.(PointerType).getBaseType().(NamedType).getName() - ) + name = lookThroughPointerType(tp).(NamedType).getName() ) else ( isEmbedded = false and name = n @@ -489,8 +485,7 @@ class StructType extends @structtype, CompositeType { */ private predicate hasEmbeddedField(Type tp, int depth) { exists(Field f | this.hasFieldCand(_, f, depth, true) | - tp = f.getType() or - tp = f.getType().(PointerType).getBaseType() + tp = lookThroughPointerType(f.getType()) ) } @@ -518,9 +513,7 @@ class StructType extends @structtype, CompositeType { this.hasFieldCand(_, embeddedParent, depth - 1, true) and result.getName() = name and ( - result.getReceiverBaseType() = embeddedParent.getType() - or - result.getReceiverBaseType() = embeddedParent.getType().(PointerType).getBaseType() + result.getReceiverBaseType() = lookThroughPointerType(embeddedParent.getType()) or methodhosts(result, embeddedParent.getType()) ) @@ -644,6 +637,13 @@ class PointerType extends @pointertype, CompositeType { override string toString() { result = "pointer type" } } +Type lookThroughPointerType(Type t) { + not t instanceof PointerType and + result = t + or + result = t.(PointerType).getBaseType() +} + private newtype TTypeSetTerm = MkTypeSetTerm(TypeSetLiteralType tslit, int index) { component_types(tslit, index, _, _) } diff --git a/go/ql/lib/semmle/go/controlflow/IR.qll b/go/ql/lib/semmle/go/controlflow/IR.qll index b036ddf6d0f5..addd85a36c4c 100644 --- a/go/ql/lib/semmle/go/controlflow/IR.qll +++ b/go/ql/lib/semmle/go/controlflow/IR.qll @@ -358,11 +358,7 @@ module IR { override predicate reads(ValueEntity v) { v = field } - override Type getResultType() { - if field.getType() instanceof PointerType - then result = field.getType().(PointerType).getBaseType() - else result = field.getType() - } + override Type getResultType() { result = lookThroughPointerType(field.getType()) } override ControlFlow::Root getRoot() { result.isRootOf(e) } diff --git a/go/ql/src/InconsistentCode/LengthComparisonOffByOne.ql b/go/ql/src/InconsistentCode/LengthComparisonOffByOne.ql index 39c951f0150b..fbb1965c5f62 100644 --- a/go/ql/src/InconsistentCode/LengthComparisonOffByOne.ql +++ b/go/ql/src/InconsistentCode/LengthComparisonOffByOne.ql @@ -73,7 +73,7 @@ predicate isRegexpMethodCall(DataFlow::MethodCallNode c) { exists(NamedType regexp, Type recvtp | regexp.getName() = "Regexp" and recvtp = c.getReceiver().getType() | - recvtp = regexp or recvtp.(PointerType).getBaseType() = regexp + lookThroughPointerType(recvtp) = regexp ) } From 87992fac889d06101bde85a161bbade3bacc90d3 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 17 Oct 2024 11:50:17 +0100 Subject: [PATCH 176/217] Revert change to `hasEmbeddedField` --- go/ql/lib/semmle/go/Types.qll | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/go/ql/lib/semmle/go/Types.qll b/go/ql/lib/semmle/go/Types.qll index e86acd5a3e84..9f0b1c845121 100644 --- a/go/ql/lib/semmle/go/Types.qll +++ b/go/ql/lib/semmle/go/Types.qll @@ -485,7 +485,8 @@ class StructType extends @structtype, CompositeType { */ private predicate hasEmbeddedField(Type tp, int depth) { exists(Field f | this.hasFieldCand(_, f, depth, true) | - tp = lookThroughPointerType(f.getType()) + tp = f.getType() or + tp = f.getType().(PointerType).getBaseType() ) } From 1318504aa57986091317f27f4de759fbf4cc13f9 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 17 Oct 2024 12:06:46 +0100 Subject: [PATCH 177/217] Add QLDoc --- go/ql/lib/semmle/go/Types.qll | 3 +++ 1 file changed, 3 insertions(+) diff --git a/go/ql/lib/semmle/go/Types.qll b/go/ql/lib/semmle/go/Types.qll index 9f0b1c845121..1b09ea466cc4 100644 --- a/go/ql/lib/semmle/go/Types.qll +++ b/go/ql/lib/semmle/go/Types.qll @@ -638,6 +638,9 @@ class PointerType extends @pointertype, CompositeType { override string toString() { result = "pointer type" } } +/** + * Gets the base type if `t` is a pointer type, otherwise `t` itself. + */ Type lookThroughPointerType(Type t) { not t instanceof PointerType and result = t From b0cd44e47ff6c0b3c9f2619560932b832afc52fe Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 17 Oct 2024 16:09:17 +0200 Subject: [PATCH 178/217] Rust: Add CFG test cases --- .../library-tests/controlflow/Cfg.expected | 1583 +++++++++-------- .../ql/test/library-tests/controlflow/test.rs | 47 +- 2 files changed, 857 insertions(+), 773 deletions(-) diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 64b2760c2104..9184f86461ec 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -1,769 +1,822 @@ edges -| test.rs:1:1:4:1 | enter test_call | test.rs:2:5:2:41 | ExprStmt | | -| test.rs:1:1:4:1 | exit test_call (normal) | test.rs:1:1:4:1 | exit test_call | | -| test.rs:1:24:4:1 | BlockExpr | test.rs:1:1:4:1 | exit test_call (normal) | | -| test.rs:2:5:2:21 | PathExpr | test.rs:2:23:2:26 | true | | -| test.rs:2:5:2:40 | CallExpr | test.rs:3:5:3:24 | ExprStmt | | -| test.rs:2:5:2:41 | ExprStmt | test.rs:2:5:2:21 | PathExpr | | -| test.rs:2:23:2:26 | true | test.rs:2:29:2:33 | false | | -| test.rs:2:29:2:33 | false | test.rs:2:36:2:39 | true | | -| test.rs:2:36:2:39 | true | test.rs:2:5:2:40 | CallExpr | | -| test.rs:3:5:3:19 | PathExpr | test.rs:3:21:3:22 | 42 | | -| test.rs:3:5:3:23 | CallExpr | test.rs:1:24:4:1 | BlockExpr | | -| test.rs:3:5:3:24 | ExprStmt | test.rs:3:5:3:19 | PathExpr | | -| test.rs:3:21:3:22 | 42 | test.rs:3:5:3:23 | CallExpr | | -| test.rs:8:5:24:5 | enter test_break_and_continue | test.rs:8:32:8:32 | n | | -| test.rs:8:5:24:5 | exit test_break_and_continue (normal) | test.rs:8:5:24:5 | exit test_break_and_continue | | -| test.rs:8:32:8:32 | n | test.rs:8:32:8:37 | Param | match | -| test.rs:8:32:8:37 | Param | test.rs:9:9:9:22 | LetStmt | | -| test.rs:9:9:9:22 | LetStmt | test.rs:9:21:9:21 | n | | -| test.rs:9:13:9:17 | i | test.rs:10:9:22:9 | ExprStmt | match | -| test.rs:9:21:9:21 | n | test.rs:9:13:9:17 | i | | -| test.rs:10:9:22:9 | ExprStmt | test.rs:11:13:11:24 | ExprStmt | | -| test.rs:10:9:22:9 | LoopExpr | test.rs:23:9:23:20 | ExprStmt | | -| test.rs:10:14:22:9 | BlockExpr | test.rs:11:13:11:24 | ExprStmt | | -| test.rs:11:13:11:13 | i | test.rs:11:17:11:20 | PathExpr | | -| test.rs:11:13:11:23 | ... = ... | test.rs:12:13:14:13 | ExprStmt | | -| test.rs:11:13:11:24 | ExprStmt | test.rs:11:13:11:13 | i | | -| test.rs:11:17:11:20 | PathExpr | test.rs:11:22:11:22 | i | | -| test.rs:11:17:11:23 | CallExpr | test.rs:11:13:11:23 | ... = ... | | -| test.rs:11:22:11:22 | i | test.rs:11:17:11:23 | CallExpr | | -| test.rs:12:13:14:13 | ExprStmt | test.rs:12:16:12:16 | i | | -| test.rs:12:13:14:13 | IfExpr | test.rs:15:13:17:13 | ExprStmt | | -| test.rs:12:16:12:16 | i | test.rs:12:20:12:24 | 10000 | | -| test.rs:12:16:12:24 | ... > ... | test.rs:12:13:14:13 | IfExpr | false | -| test.rs:12:16:12:24 | ... > ... | test.rs:13:17:13:29 | ExprStmt | true | -| test.rs:12:20:12:24 | 10000 | test.rs:12:16:12:24 | ... > ... | | -| test.rs:13:17:13:28 | ReturnExpr | test.rs:8:5:24:5 | exit test_break_and_continue (normal) | return | -| test.rs:13:17:13:29 | ExprStmt | test.rs:13:24:13:28 | false | | -| test.rs:13:24:13:28 | false | test.rs:13:17:13:28 | ReturnExpr | | -| test.rs:15:13:17:13 | ExprStmt | test.rs:15:16:15:16 | i | | -| test.rs:15:13:17:13 | IfExpr | test.rs:18:13:20:13 | ExprStmt | | -| test.rs:15:16:15:16 | i | test.rs:15:21:15:21 | 1 | | -| test.rs:15:16:15:21 | ... == ... | test.rs:15:13:17:13 | IfExpr | false | -| test.rs:15:16:15:21 | ... == ... | test.rs:16:17:16:22 | ExprStmt | true | -| test.rs:15:21:15:21 | 1 | test.rs:15:16:15:21 | ... == ... | | -| test.rs:16:17:16:21 | BreakExpr | test.rs:10:9:22:9 | LoopExpr | break | -| test.rs:16:17:16:22 | ExprStmt | test.rs:16:17:16:21 | BreakExpr | | -| test.rs:18:13:20:13 | ExprStmt | test.rs:18:16:18:16 | i | | -| test.rs:18:13:20:13 | IfExpr | test.rs:21:13:21:13 | i | | -| test.rs:18:16:18:16 | i | test.rs:18:20:18:20 | 2 | | -| test.rs:18:16:18:20 | ... % ... | test.rs:18:25:18:25 | 0 | | -| test.rs:18:16:18:25 | ... != ... | test.rs:18:13:20:13 | IfExpr | false | -| test.rs:18:16:18:25 | ... != ... | test.rs:19:17:19:25 | ExprStmt | true | -| test.rs:18:20:18:20 | 2 | test.rs:18:16:18:20 | ... % ... | | -| test.rs:18:25:18:25 | 0 | test.rs:18:16:18:25 | ... != ... | | -| test.rs:19:17:19:24 | ContinueExpr | test.rs:11:13:11:24 | ExprStmt | continue | -| test.rs:19:17:19:25 | ExprStmt | test.rs:19:17:19:24 | ContinueExpr | | -| test.rs:21:13:21:13 | i | test.rs:21:17:21:17 | i | | -| test.rs:21:13:21:21 | ... = ... | test.rs:10:14:22:9 | BlockExpr | | -| test.rs:21:17:21:17 | i | test.rs:21:21:21:21 | 2 | | -| test.rs:21:17:21:21 | ... / ... | test.rs:21:13:21:21 | ... = ... | | -| test.rs:21:21:21:21 | 2 | test.rs:21:17:21:21 | ... / ... | | -| test.rs:23:9:23:19 | ReturnExpr | test.rs:8:5:24:5 | exit test_break_and_continue (normal) | return | -| test.rs:23:9:23:20 | ExprStmt | test.rs:23:16:23:19 | true | | -| test.rs:23:16:23:19 | true | test.rs:23:9:23:19 | ReturnExpr | | -| test.rs:26:5:38:5 | enter test_break_with_labels | test.rs:26:31:26:31 | b | | -| test.rs:26:5:38:5 | exit test_break_with_labels (normal) | test.rs:26:5:38:5 | exit test_break_with_labels | | -| test.rs:26:31:26:31 | b | test.rs:26:31:26:37 | Param | match | -| test.rs:26:31:26:37 | Param | test.rs:27:9:36:9 | ExprStmt | | -| test.rs:26:48:38:5 | BlockExpr | test.rs:26:5:38:5 | exit test_break_with_labels (normal) | | -| test.rs:27:9:36:9 | ExprStmt | test.rs:29:17:33:17 | ExprStmt | | -| test.rs:27:9:36:9 | LoopExpr | test.rs:37:9:37:12 | true | | -| test.rs:27:22:36:9 | BlockExpr | test.rs:29:17:33:17 | ExprStmt | | -| test.rs:28:13:35:13 | LoopExpr | test.rs:27:22:36:9 | BlockExpr | | -| test.rs:29:17:33:17 | ExprStmt | test.rs:29:20:29:20 | b | | -| test.rs:29:17:33:17 | IfExpr | test.rs:34:17:34:29 | ExprStmt | | -| test.rs:29:20:29:20 | b | test.rs:30:21:30:26 | ExprStmt | true | -| test.rs:29:20:29:20 | b | test.rs:31:27:31:27 | b | false | -| test.rs:30:21:30:25 | BreakExpr | test.rs:28:13:35:13 | LoopExpr | break | -| test.rs:30:21:30:26 | ExprStmt | test.rs:30:21:30:25 | BreakExpr | | -| test.rs:31:24:33:17 | IfExpr | test.rs:29:17:33:17 | IfExpr | | -| test.rs:31:27:31:27 | b | test.rs:31:24:33:17 | IfExpr | false | -| test.rs:31:27:31:27 | b | test.rs:32:21:32:33 | ExprStmt | true | -| test.rs:32:21:32:32 | BreakExpr | test.rs:27:9:36:9 | LoopExpr | break | -| test.rs:32:21:32:33 | ExprStmt | test.rs:32:21:32:32 | BreakExpr | | -| test.rs:34:17:34:28 | BreakExpr | test.rs:28:13:35:13 | LoopExpr | break | -| test.rs:34:17:34:29 | ExprStmt | test.rs:34:17:34:28 | BreakExpr | | -| test.rs:37:9:37:12 | true | test.rs:26:48:38:5 | BlockExpr | | -| test.rs:40:5:52:5 | enter test_continue_with_labels | test.rs:40:34:40:34 | b | | -| test.rs:40:34:40:34 | b | test.rs:40:34:40:40 | Param | match | -| test.rs:40:34:40:40 | Param | test.rs:42:13:42:14 | ExprStmt | | -| test.rs:42:13:42:13 | 1 | test.rs:44:17:48:17 | ExprStmt | | -| test.rs:42:13:42:14 | ExprStmt | test.rs:42:13:42:13 | 1 | | -| test.rs:44:17:48:17 | ExprStmt | test.rs:44:20:44:20 | b | | -| test.rs:44:17:48:17 | IfExpr | test.rs:49:17:49:32 | ExprStmt | | -| test.rs:44:20:44:20 | b | test.rs:45:21:45:29 | ExprStmt | true | -| test.rs:44:20:44:20 | b | test.rs:46:27:46:27 | b | false | -| test.rs:45:21:45:28 | ContinueExpr | test.rs:44:17:48:17 | ExprStmt | continue | -| test.rs:45:21:45:29 | ExprStmt | test.rs:45:21:45:28 | ContinueExpr | | -| test.rs:46:24:48:17 | IfExpr | test.rs:44:17:48:17 | IfExpr | | -| test.rs:46:27:46:27 | b | test.rs:46:24:48:17 | IfExpr | false | -| test.rs:46:27:46:27 | b | test.rs:47:21:47:36 | ExprStmt | true | -| test.rs:47:21:47:35 | ContinueExpr | test.rs:42:13:42:14 | ExprStmt | continue | -| test.rs:47:21:47:36 | ExprStmt | test.rs:47:21:47:35 | ContinueExpr | | -| test.rs:49:17:49:31 | ContinueExpr | test.rs:44:17:48:17 | ExprStmt | continue | -| test.rs:49:17:49:32 | ExprStmt | test.rs:49:17:49:31 | ContinueExpr | | -| test.rs:54:5:66:5 | enter test_loop_label_shadowing | test.rs:54:34:54:34 | b | | -| test.rs:54:34:54:34 | b | test.rs:54:34:54:40 | Param | match | -| test.rs:54:34:54:40 | Param | test.rs:56:13:56:14 | ExprStmt | | -| test.rs:56:13:56:13 | 1 | test.rs:58:17:62:17 | ExprStmt | | -| test.rs:56:13:56:14 | ExprStmt | test.rs:56:13:56:13 | 1 | | -| test.rs:58:17:62:17 | ExprStmt | test.rs:58:20:58:20 | b | | -| test.rs:58:17:62:17 | IfExpr | test.rs:63:17:63:31 | ExprStmt | | -| test.rs:58:20:58:20 | b | test.rs:59:21:59:29 | ExprStmt | true | -| test.rs:58:20:58:20 | b | test.rs:60:27:60:27 | b | false | -| test.rs:59:21:59:28 | ContinueExpr | test.rs:58:17:62:17 | ExprStmt | continue | -| test.rs:59:21:59:29 | ExprStmt | test.rs:59:21:59:28 | ContinueExpr | | -| test.rs:60:24:62:17 | IfExpr | test.rs:58:17:62:17 | IfExpr | | -| test.rs:60:27:60:27 | b | test.rs:60:24:62:17 | IfExpr | false | -| test.rs:60:27:60:27 | b | test.rs:61:21:61:35 | ExprStmt | true | -| test.rs:61:21:61:34 | ContinueExpr | test.rs:58:17:62:17 | ExprStmt | continue | -| test.rs:61:21:61:35 | ExprStmt | test.rs:61:21:61:34 | ContinueExpr | | -| test.rs:63:17:63:30 | ContinueExpr | test.rs:58:17:62:17 | ExprStmt | continue | -| test.rs:63:17:63:31 | ExprStmt | test.rs:63:17:63:30 | ContinueExpr | | -| test.rs:68:5:77:5 | enter test_while | test.rs:68:19:68:19 | i | | -| test.rs:68:5:77:5 | exit test_while (normal) | test.rs:68:5:77:5 | exit test_while | | -| test.rs:68:19:68:19 | i | test.rs:68:19:68:24 | Param | match | -| test.rs:68:19:68:24 | Param | test.rs:69:9:69:25 | LetStmt | | -| test.rs:68:27:77:5 | BlockExpr | test.rs:68:5:77:5 | exit test_while (normal) | | -| test.rs:69:9:69:25 | LetStmt | test.rs:69:21:69:24 | true | | -| test.rs:69:13:69:17 | b | test.rs:70:15:70:15 | b | match | -| test.rs:69:21:69:24 | true | test.rs:69:13:69:17 | b | | -| test.rs:70:9:76:9 | WhileExpr | test.rs:68:27:77:5 | BlockExpr | | -| test.rs:70:15:70:15 | b | test.rs:70:9:76:9 | WhileExpr | false | -| test.rs:70:15:70:15 | b | test.rs:71:13:71:14 | ExprStmt | true | -| test.rs:70:17:76:9 | BlockExpr | test.rs:70:15:70:15 | b | | -| test.rs:71:13:71:13 | 1 | test.rs:72:13:74:13 | ExprStmt | | -| test.rs:71:13:71:14 | ExprStmt | test.rs:71:13:71:13 | 1 | | -| test.rs:72:13:74:13 | ExprStmt | test.rs:72:17:72:17 | i | | -| test.rs:72:13:74:13 | IfExpr | test.rs:75:13:75:22 | ExprStmt | | -| test.rs:72:17:72:17 | i | test.rs:72:21:72:21 | 0 | | -| test.rs:72:17:72:21 | ... > ... | test.rs:72:13:74:13 | IfExpr | false | -| test.rs:72:17:72:21 | ... > ... | test.rs:73:17:73:22 | ExprStmt | true | -| test.rs:72:21:72:21 | 0 | test.rs:72:17:72:21 | ... > ... | | -| test.rs:73:17:73:21 | BreakExpr | test.rs:70:9:76:9 | WhileExpr | break | -| test.rs:73:17:73:22 | ExprStmt | test.rs:73:17:73:21 | BreakExpr | | -| test.rs:75:13:75:13 | b | test.rs:75:17:75:21 | false | | -| test.rs:75:13:75:21 | ... = ... | test.rs:70:17:76:9 | BlockExpr | | -| test.rs:75:13:75:22 | ExprStmt | test.rs:75:13:75:13 | b | | -| test.rs:75:17:75:21 | false | test.rs:75:13:75:21 | ... = ... | | -| test.rs:79:5:86:5 | enter test_while_let | test.rs:80:9:80:29 | LetStmt | | -| test.rs:79:5:86:5 | exit test_while_let (normal) | test.rs:79:5:86:5 | exit test_while_let | | -| test.rs:79:25:86:5 | BlockExpr | test.rs:79:5:86:5 | exit test_while_let (normal) | | -| test.rs:80:9:80:29 | LetStmt | test.rs:80:24:80:24 | 1 | | -| test.rs:80:13:80:20 | iter | test.rs:81:15:81:39 | LetExpr | match | -| test.rs:80:24:80:24 | 1 | test.rs:80:27:80:28 | 10 | | -| test.rs:80:24:80:28 | RangeExpr | test.rs:80:13:80:20 | iter | | -| test.rs:80:27:80:28 | 10 | test.rs:80:24:80:28 | RangeExpr | | -| test.rs:81:9:85:9 | WhileExpr | test.rs:79:25:86:5 | BlockExpr | | -| test.rs:81:15:81:39 | LetExpr | test.rs:81:29:81:32 | iter | | -| test.rs:81:19:81:25 | TupleStructPat | test.rs:81:9:85:9 | WhileExpr | no-match | -| test.rs:81:19:81:25 | TupleStructPat | test.rs:81:24:81:24 | x | match | -| test.rs:81:24:81:24 | x | test.rs:82:17:82:17 | PathExpr | match | -| test.rs:81:29:81:32 | iter | test.rs:81:29:81:39 | MethodCallExpr | | -| test.rs:81:29:81:39 | MethodCallExpr | test.rs:81:19:81:25 | TupleStructPat | | -| test.rs:81:41:85:9 | BlockExpr | test.rs:81:15:81:39 | LetExpr | | -| test.rs:82:13:84:13 | IfExpr | test.rs:81:41:85:9 | BlockExpr | | -| test.rs:82:17:82:17 | PathExpr | test.rs:82:21:82:21 | 5 | | -| test.rs:82:17:82:21 | ... = ... | test.rs:82:13:84:13 | IfExpr | false | -| test.rs:82:17:82:21 | ... = ... | test.rs:83:17:83:22 | ExprStmt | true | -| test.rs:82:21:82:21 | 5 | test.rs:82:17:82:21 | ... = ... | | -| test.rs:83:17:83:21 | BreakExpr | test.rs:81:9:85:9 | WhileExpr | break | -| test.rs:83:17:83:22 | ExprStmt | test.rs:83:17:83:21 | BreakExpr | | -| test.rs:88:5:95:5 | enter test_for | test.rs:88:17:88:17 | j | | -| test.rs:88:5:95:5 | exit test_for (normal) | test.rs:88:5:95:5 | exit test_for | | -| test.rs:88:17:88:17 | j | test.rs:88:17:88:22 | Param | match | -| test.rs:88:17:88:22 | Param | test.rs:89:18:89:18 | 0 | | -| test.rs:88:25:95:5 | BlockExpr | test.rs:88:5:95:5 | exit test_for (normal) | | -| test.rs:89:9:94:9 | ForExpr | test.rs:88:25:95:5 | BlockExpr | | -| test.rs:89:13:89:13 | i | test.rs:89:9:94:9 | ForExpr | no-match | -| test.rs:89:13:89:13 | i | test.rs:90:13:92:13 | ExprStmt | match | -| test.rs:89:18:89:18 | 0 | test.rs:89:21:89:22 | 10 | | -| test.rs:89:18:89:22 | RangeExpr | test.rs:89:13:89:13 | i | | -| test.rs:89:21:89:22 | 10 | test.rs:89:18:89:22 | RangeExpr | | -| test.rs:89:24:94:9 | BlockExpr | test.rs:89:13:89:13 | i | | -| test.rs:90:13:92:13 | ExprStmt | test.rs:90:17:90:17 | i | | -| test.rs:90:13:92:13 | IfExpr | test.rs:93:13:93:14 | ExprStmt | | -| test.rs:90:17:90:17 | i | test.rs:90:22:90:22 | j | | -| test.rs:90:17:90:22 | ... == ... | test.rs:90:13:92:13 | IfExpr | false | -| test.rs:90:17:90:22 | ... == ... | test.rs:91:17:91:22 | ExprStmt | true | -| test.rs:90:22:90:22 | j | test.rs:90:17:90:22 | ... == ... | | -| test.rs:91:17:91:21 | BreakExpr | test.rs:89:9:94:9 | ForExpr | break | -| test.rs:91:17:91:22 | ExprStmt | test.rs:91:17:91:21 | BreakExpr | | -| test.rs:93:13:93:13 | 1 | test.rs:89:24:94:9 | BlockExpr | | -| test.rs:93:13:93:14 | ExprStmt | test.rs:93:13:93:13 | 1 | | -| test.rs:98:1:101:1 | enter test_nested_function | test.rs:98:25:98:25 | n | | -| test.rs:98:1:101:1 | exit test_nested_function (normal) | test.rs:98:1:101:1 | exit test_nested_function | | -| test.rs:98:25:98:25 | n | test.rs:98:25:98:30 | Param | match | -| test.rs:98:25:98:30 | Param | test.rs:99:5:99:28 | LetStmt | | -| test.rs:98:40:101:1 | BlockExpr | test.rs:98:1:101:1 | exit test_nested_function (normal) | | -| test.rs:99:5:99:28 | LetStmt | test.rs:99:19:99:27 | ClosureExpr | | -| test.rs:99:9:99:15 | add_one | test.rs:100:5:100:11 | add_one | match | -| test.rs:99:19:99:27 | ClosureExpr | test.rs:99:9:99:15 | add_one | | -| test.rs:99:19:99:27 | enter ClosureExpr | test.rs:99:20:99:20 | i | | -| test.rs:99:19:99:27 | exit ClosureExpr (normal) | test.rs:99:19:99:27 | exit ClosureExpr | | -| test.rs:99:20:99:20 | Param | test.rs:99:23:99:23 | i | | -| test.rs:99:20:99:20 | i | test.rs:99:20:99:20 | Param | match | -| test.rs:99:23:99:23 | i | test.rs:99:27:99:27 | 1 | | -| test.rs:99:23:99:27 | ... + ... | test.rs:99:19:99:27 | exit ClosureExpr (normal) | | -| test.rs:99:27:99:27 | 1 | test.rs:99:23:99:27 | ... + ... | | -| test.rs:100:5:100:11 | add_one | test.rs:100:13:100:19 | add_one | | -| test.rs:100:5:100:23 | CallExpr | test.rs:98:40:101:1 | BlockExpr | | -| test.rs:100:13:100:19 | add_one | test.rs:100:21:100:21 | n | | -| test.rs:100:13:100:22 | CallExpr | test.rs:100:5:100:23 | CallExpr | | -| test.rs:100:21:100:21 | n | test.rs:100:13:100:22 | CallExpr | | -| test.rs:105:5:111:5 | enter test_if_else | test.rs:105:21:105:21 | n | | -| test.rs:105:5:111:5 | exit test_if_else (normal) | test.rs:105:5:111:5 | exit test_if_else | | -| test.rs:105:21:105:21 | n | test.rs:105:21:105:26 | Param | match | -| test.rs:105:21:105:26 | Param | test.rs:106:12:106:12 | n | | -| test.rs:105:36:111:5 | BlockExpr | test.rs:105:5:111:5 | exit test_if_else (normal) | | -| test.rs:106:9:110:9 | IfExpr | test.rs:105:36:111:5 | BlockExpr | | -| test.rs:106:12:106:12 | n | test.rs:106:17:106:17 | 0 | | -| test.rs:106:12:106:17 | ... <= ... | test.rs:107:13:107:13 | 0 | true | -| test.rs:106:12:106:17 | ... <= ... | test.rs:109:13:109:13 | n | false | -| test.rs:106:17:106:17 | 0 | test.rs:106:12:106:17 | ... <= ... | | -| test.rs:106:19:108:9 | BlockExpr | test.rs:106:9:110:9 | IfExpr | | -| test.rs:107:13:107:13 | 0 | test.rs:106:19:108:9 | BlockExpr | | -| test.rs:108:16:110:9 | BlockExpr | test.rs:106:9:110:9 | IfExpr | | -| test.rs:109:13:109:13 | n | test.rs:109:17:109:17 | 1 | | -| test.rs:109:13:109:17 | ... - ... | test.rs:108:16:110:9 | BlockExpr | | -| test.rs:109:17:109:17 | 1 | test.rs:109:13:109:17 | ... - ... | | -| test.rs:113:5:119:5 | enter test_if_let_else | test.rs:113:25:113:25 | a | | -| test.rs:113:5:119:5 | exit test_if_let_else (normal) | test.rs:113:5:119:5 | exit test_if_let_else | | -| test.rs:113:25:113:25 | a | test.rs:113:25:113:38 | Param | match | -| test.rs:113:25:113:38 | Param | test.rs:114:12:114:26 | LetExpr | | -| test.rs:113:48:119:5 | BlockExpr | test.rs:113:5:119:5 | exit test_if_let_else (normal) | | -| test.rs:114:9:118:9 | IfExpr | test.rs:113:48:119:5 | BlockExpr | | -| test.rs:114:12:114:26 | LetExpr | test.rs:114:26:114:26 | a | | -| test.rs:114:16:114:22 | TupleStructPat | test.rs:114:21:114:21 | n | match | -| test.rs:114:16:114:22 | TupleStructPat | test.rs:117:13:117:13 | 0 | no-match | -| test.rs:114:21:114:21 | n | test.rs:115:13:115:13 | n | match | -| test.rs:114:26:114:26 | a | test.rs:114:16:114:22 | TupleStructPat | | -| test.rs:114:28:116:9 | BlockExpr | test.rs:114:9:118:9 | IfExpr | | -| test.rs:115:13:115:13 | n | test.rs:114:28:116:9 | BlockExpr | | -| test.rs:116:16:118:9 | BlockExpr | test.rs:114:9:118:9 | IfExpr | | -| test.rs:117:13:117:13 | 0 | test.rs:116:16:118:9 | BlockExpr | | -| test.rs:121:5:126:5 | enter test_if_let | test.rs:121:20:121:20 | a | | -| test.rs:121:5:126:5 | exit test_if_let (normal) | test.rs:121:5:126:5 | exit test_if_let | | -| test.rs:121:20:121:20 | a | test.rs:121:20:121:33 | Param | match | -| test.rs:121:20:121:33 | Param | test.rs:122:9:124:9 | ExprStmt | | -| test.rs:121:43:126:5 | BlockExpr | test.rs:121:5:126:5 | exit test_if_let (normal) | | -| test.rs:122:9:124:9 | ExprStmt | test.rs:122:12:122:26 | LetExpr | | -| test.rs:122:9:124:9 | IfExpr | test.rs:125:9:125:9 | 0 | | -| test.rs:122:12:122:26 | LetExpr | test.rs:122:26:122:26 | a | | -| test.rs:122:16:122:22 | TupleStructPat | test.rs:122:9:124:9 | IfExpr | no-match | -| test.rs:122:16:122:22 | TupleStructPat | test.rs:122:21:122:21 | n | match | -| test.rs:122:21:122:21 | n | test.rs:123:13:123:13 | n | match | -| test.rs:122:26:122:26 | a | test.rs:122:16:122:22 | TupleStructPat | | -| test.rs:122:28:124:9 | BlockExpr | test.rs:122:9:124:9 | IfExpr | | -| test.rs:123:13:123:13 | n | test.rs:122:28:124:9 | BlockExpr | | -| test.rs:125:9:125:9 | 0 | test.rs:121:43:126:5 | BlockExpr | | -| test.rs:128:5:134:5 | enter test_nested_if | test.rs:128:23:128:23 | a | | -| test.rs:128:5:134:5 | exit test_nested_if (normal) | test.rs:128:5:134:5 | exit test_nested_if | | -| test.rs:128:23:128:23 | a | test.rs:128:23:128:28 | Param | match | -| test.rs:128:23:128:28 | Param | test.rs:129:16:129:16 | a | | -| test.rs:128:38:134:5 | BlockExpr | test.rs:128:5:134:5 | exit test_nested_if (normal) | | -| test.rs:129:9:133:9 | IfExpr | test.rs:128:38:134:5 | BlockExpr | | -| test.rs:129:13:129:48 | [boolean(false)] IfExpr | test.rs:132:13:132:13 | 0 | false | -| test.rs:129:13:129:48 | [boolean(true)] IfExpr | test.rs:130:13:130:13 | 1 | true | -| test.rs:129:16:129:16 | a | test.rs:129:20:129:20 | 0 | | -| test.rs:129:16:129:20 | ... < ... | test.rs:129:24:129:24 | a | true | -| test.rs:129:16:129:20 | ... < ... | test.rs:129:41:129:41 | a | false | -| test.rs:129:20:129:20 | 0 | test.rs:129:16:129:20 | ... < ... | | -| test.rs:129:22:129:32 | [boolean(false)] BlockExpr | test.rs:129:13:129:48 | [boolean(false)] IfExpr | false | -| test.rs:129:22:129:32 | [boolean(true)] BlockExpr | test.rs:129:13:129:48 | [boolean(true)] IfExpr | true | -| test.rs:129:24:129:24 | a | test.rs:129:29:129:30 | 10 | | -| test.rs:129:24:129:30 | ... < ... | test.rs:129:22:129:32 | [boolean(false)] BlockExpr | false | -| test.rs:129:24:129:30 | ... < ... | test.rs:129:22:129:32 | [boolean(true)] BlockExpr | true | -| test.rs:129:28:129:30 | - ... | test.rs:129:24:129:30 | ... < ... | | -| test.rs:129:29:129:30 | 10 | test.rs:129:28:129:30 | - ... | | -| test.rs:129:39:129:48 | [boolean(false)] BlockExpr | test.rs:129:13:129:48 | [boolean(false)] IfExpr | false | -| test.rs:129:39:129:48 | [boolean(true)] BlockExpr | test.rs:129:13:129:48 | [boolean(true)] IfExpr | true | -| test.rs:129:41:129:41 | a | test.rs:129:45:129:46 | 10 | | -| test.rs:129:41:129:46 | ... > ... | test.rs:129:39:129:48 | [boolean(false)] BlockExpr | false | -| test.rs:129:41:129:46 | ... > ... | test.rs:129:39:129:48 | [boolean(true)] BlockExpr | true | -| test.rs:129:45:129:46 | 10 | test.rs:129:41:129:46 | ... > ... | | -| test.rs:129:51:131:9 | BlockExpr | test.rs:129:9:133:9 | IfExpr | | -| test.rs:130:13:130:13 | 1 | test.rs:129:51:131:9 | BlockExpr | | -| test.rs:131:16:133:9 | BlockExpr | test.rs:129:9:133:9 | IfExpr | | -| test.rs:132:13:132:13 | 0 | test.rs:131:16:133:9 | BlockExpr | | -| test.rs:136:5:145:5 | enter test_nested_if_match | test.rs:136:29:136:29 | a | | -| test.rs:136:5:145:5 | exit test_nested_if_match (normal) | test.rs:136:5:145:5 | exit test_nested_if_match | | -| test.rs:136:29:136:29 | a | test.rs:136:29:136:34 | Param | match | -| test.rs:136:29:136:34 | Param | test.rs:137:19:137:19 | a | | -| test.rs:136:44:145:5 | BlockExpr | test.rs:136:5:145:5 | exit test_nested_if_match (normal) | | -| test.rs:137:9:144:9 | IfExpr | test.rs:136:44:145:5 | BlockExpr | | -| test.rs:137:13:140:9 | [boolean(false)] MatchExpr | test.rs:143:13:143:13 | 0 | false | -| test.rs:137:13:140:9 | [boolean(true)] MatchExpr | test.rs:141:13:141:13 | 1 | true | -| test.rs:137:19:137:19 | a | test.rs:138:13:138:13 | LiteralPat | | -| test.rs:138:13:138:13 | LiteralPat | test.rs:138:18:138:21 | true | match | -| test.rs:138:13:138:13 | LiteralPat | test.rs:139:13:139:13 | WildcardPat | no-match | -| test.rs:138:18:138:21 | true | test.rs:137:13:140:9 | [boolean(true)] MatchExpr | true | -| test.rs:139:13:139:13 | WildcardPat | test.rs:139:18:139:22 | false | match | -| test.rs:139:18:139:22 | false | test.rs:137:13:140:9 | [boolean(false)] MatchExpr | false | -| test.rs:140:12:142:9 | BlockExpr | test.rs:137:9:144:9 | IfExpr | | -| test.rs:141:13:141:13 | 1 | test.rs:140:12:142:9 | BlockExpr | | -| test.rs:142:16:144:9 | BlockExpr | test.rs:137:9:144:9 | IfExpr | | -| test.rs:143:13:143:13 | 0 | test.rs:142:16:144:9 | BlockExpr | | -| test.rs:147:5:156:5 | enter test_nested_if_block | test.rs:147:29:147:29 | a | | -| test.rs:147:5:156:5 | exit test_nested_if_block (normal) | test.rs:147:5:156:5 | exit test_nested_if_block | | -| test.rs:147:29:147:29 | a | test.rs:147:29:147:34 | Param | match | -| test.rs:147:29:147:34 | Param | test.rs:149:13:149:15 | ExprStmt | | -| test.rs:147:44:156:5 | BlockExpr | test.rs:147:5:156:5 | exit test_nested_if_block (normal) | | -| test.rs:148:9:155:9 | IfExpr | test.rs:147:44:156:5 | BlockExpr | | -| test.rs:148:12:151:9 | [boolean(false)] BlockExpr | test.rs:154:13:154:13 | 0 | false | -| test.rs:148:12:151:9 | [boolean(true)] BlockExpr | test.rs:152:13:152:13 | 1 | true | -| test.rs:149:13:149:14 | TupleExpr | test.rs:150:13:150:13 | a | | -| test.rs:149:13:149:15 | ExprStmt | test.rs:149:13:149:14 | TupleExpr | | -| test.rs:150:13:150:13 | a | test.rs:150:17:150:17 | 0 | | -| test.rs:150:13:150:17 | ... > ... | test.rs:148:12:151:9 | [boolean(false)] BlockExpr | false | -| test.rs:150:13:150:17 | ... > ... | test.rs:148:12:151:9 | [boolean(true)] BlockExpr | true | -| test.rs:150:17:150:17 | 0 | test.rs:150:13:150:17 | ... > ... | | -| test.rs:151:11:153:9 | BlockExpr | test.rs:148:9:155:9 | IfExpr | | -| test.rs:152:13:152:13 | 1 | test.rs:151:11:153:9 | BlockExpr | | -| test.rs:153:16:155:9 | BlockExpr | test.rs:148:9:155:9 | IfExpr | | -| test.rs:154:13:154:13 | 0 | test.rs:153:16:155:9 | BlockExpr | | -| test.rs:158:5:165:5 | enter test_if_assignment | test.rs:158:27:158:27 | a | | -| test.rs:158:5:165:5 | exit test_if_assignment (normal) | test.rs:158:5:165:5 | exit test_if_assignment | | -| test.rs:158:27:158:27 | a | test.rs:158:27:158:32 | Param | match | -| test.rs:158:27:158:32 | Param | test.rs:159:9:159:26 | LetStmt | | -| test.rs:158:42:165:5 | BlockExpr | test.rs:158:5:165:5 | exit test_if_assignment (normal) | | -| test.rs:159:9:159:26 | LetStmt | test.rs:159:21:159:25 | false | | -| test.rs:159:13:159:17 | x | test.rs:160:12:160:12 | x | match | -| test.rs:159:21:159:25 | false | test.rs:159:13:159:17 | x | | -| test.rs:160:9:164:9 | IfExpr | test.rs:158:42:165:5 | BlockExpr | | -| test.rs:160:12:160:12 | x | test.rs:160:16:160:19 | true | | -| test.rs:160:12:160:19 | ... = ... | test.rs:161:13:161:13 | 1 | true | -| test.rs:160:12:160:19 | ... = ... | test.rs:163:13:163:13 | 0 | false | -| test.rs:160:16:160:19 | true | test.rs:160:12:160:19 | ... = ... | | -| test.rs:160:21:162:9 | BlockExpr | test.rs:160:9:164:9 | IfExpr | | -| test.rs:161:13:161:13 | 1 | test.rs:160:21:162:9 | BlockExpr | | -| test.rs:162:16:164:9 | BlockExpr | test.rs:160:9:164:9 | IfExpr | | +| test.rs:4:5:7:5 | enter function_call | test.rs:5:9:5:45 | ExprStmt | | +| test.rs:4:5:7:5 | exit function_call (normal) | test.rs:4:5:7:5 | exit function_call | | +| test.rs:4:24:7:5 | BlockExpr | test.rs:4:5:7:5 | exit function_call (normal) | | +| test.rs:5:9:5:25 | PathExpr | test.rs:5:27:5:30 | true | | +| test.rs:5:9:5:44 | CallExpr | test.rs:6:9:6:28 | ExprStmt | | +| test.rs:5:9:5:45 | ExprStmt | test.rs:5:9:5:25 | PathExpr | | +| test.rs:5:27:5:30 | true | test.rs:5:33:5:37 | false | | +| test.rs:5:33:5:37 | false | test.rs:5:40:5:43 | true | | +| test.rs:5:40:5:43 | true | test.rs:5:9:5:44 | CallExpr | | +| test.rs:6:9:6:23 | PathExpr | test.rs:6:25:6:26 | 42 | | +| test.rs:6:9:6:27 | CallExpr | test.rs:4:24:7:5 | BlockExpr | | +| test.rs:6:9:6:28 | ExprStmt | test.rs:6:9:6:23 | PathExpr | | +| test.rs:6:25:6:26 | 42 | test.rs:6:9:6:27 | CallExpr | | +| test.rs:9:5:12:5 | enter method_call | test.rs:10:9:10:37 | LetStmt | | +| test.rs:9:5:12:5 | exit method_call (normal) | test.rs:9:5:12:5 | exit method_call | | +| test.rs:9:22:12:5 | BlockExpr | test.rs:9:5:12:5 | exit method_call (normal) | | +| test.rs:10:9:10:37 | LetStmt | test.rs:10:23:10:34 | PathExpr | | +| test.rs:10:13:10:19 | map | test.rs:11:9:11:28 | ExprStmt | match | +| test.rs:10:23:10:34 | PathExpr | test.rs:10:23:10:36 | CallExpr | | +| test.rs:10:23:10:36 | CallExpr | test.rs:10:13:10:19 | map | | +| test.rs:11:9:11:11 | map | test.rs:11:9:11:27 | MethodCallExpr | | +| test.rs:11:9:11:27 | MethodCallExpr | test.rs:9:22:12:5 | BlockExpr | | +| test.rs:11:9:11:28 | ExprStmt | test.rs:11:20:11:21 | 37 | | +| test.rs:11:20:11:21 | 37 | test.rs:11:9:11:11 | map | | +| test.rs:11:20:11:21 | 37 | test.rs:11:24:11:26 | "a" | | +| test.rs:11:24:11:26 | "a" | test.rs:11:9:11:27 | MethodCallExpr | | +| test.rs:17:5:33:5 | enter test_break_and_continue | test.rs:17:32:17:32 | n | | +| test.rs:17:5:33:5 | exit test_break_and_continue (normal) | test.rs:17:5:33:5 | exit test_break_and_continue | | +| test.rs:17:32:17:32 | n | test.rs:17:32:17:37 | Param | match | +| test.rs:17:32:17:37 | Param | test.rs:18:9:18:22 | LetStmt | | +| test.rs:18:9:18:22 | LetStmt | test.rs:18:21:18:21 | n | | +| test.rs:18:13:18:17 | i | test.rs:19:9:31:9 | ExprStmt | match | +| test.rs:18:21:18:21 | n | test.rs:18:13:18:17 | i | | +| test.rs:19:9:31:9 | ExprStmt | test.rs:20:13:20:24 | ExprStmt | | +| test.rs:19:9:31:9 | LoopExpr | test.rs:32:9:32:20 | ExprStmt | | +| test.rs:19:14:31:9 | BlockExpr | test.rs:20:13:20:24 | ExprStmt | | +| test.rs:20:13:20:13 | i | test.rs:20:17:20:20 | PathExpr | | +| test.rs:20:13:20:23 | ... = ... | test.rs:21:13:23:13 | ExprStmt | | +| test.rs:20:13:20:24 | ExprStmt | test.rs:20:13:20:13 | i | | +| test.rs:20:17:20:20 | PathExpr | test.rs:20:22:20:22 | i | | +| test.rs:20:17:20:23 | CallExpr | test.rs:20:13:20:23 | ... = ... | | +| test.rs:20:22:20:22 | i | test.rs:20:17:20:23 | CallExpr | | +| test.rs:21:13:23:13 | ExprStmt | test.rs:21:16:21:16 | i | | +| test.rs:21:13:23:13 | IfExpr | test.rs:24:13:26:13 | ExprStmt | | +| test.rs:21:16:21:16 | i | test.rs:21:20:21:24 | 10000 | | +| test.rs:21:16:21:24 | ... > ... | test.rs:21:13:23:13 | IfExpr | false | +| test.rs:21:16:21:24 | ... > ... | test.rs:22:17:22:29 | ExprStmt | true | +| test.rs:21:20:21:24 | 10000 | test.rs:21:16:21:24 | ... > ... | | +| test.rs:22:17:22:28 | ReturnExpr | test.rs:17:5:33:5 | exit test_break_and_continue (normal) | return | +| test.rs:22:17:22:29 | ExprStmt | test.rs:22:24:22:28 | false | | +| test.rs:22:24:22:28 | false | test.rs:22:17:22:28 | ReturnExpr | | +| test.rs:24:13:26:13 | ExprStmt | test.rs:24:16:24:16 | i | | +| test.rs:24:13:26:13 | IfExpr | test.rs:27:13:29:13 | ExprStmt | | +| test.rs:24:16:24:16 | i | test.rs:24:21:24:21 | 1 | | +| test.rs:24:16:24:21 | ... == ... | test.rs:24:13:26:13 | IfExpr | false | +| test.rs:24:16:24:21 | ... == ... | test.rs:25:17:25:22 | ExprStmt | true | +| test.rs:24:21:24:21 | 1 | test.rs:24:16:24:21 | ... == ... | | +| test.rs:25:17:25:21 | BreakExpr | test.rs:19:9:31:9 | LoopExpr | break | +| test.rs:25:17:25:22 | ExprStmt | test.rs:25:17:25:21 | BreakExpr | | +| test.rs:27:13:29:13 | ExprStmt | test.rs:27:16:27:16 | i | | +| test.rs:27:13:29:13 | IfExpr | test.rs:30:13:30:13 | i | | +| test.rs:27:16:27:16 | i | test.rs:27:20:27:20 | 2 | | +| test.rs:27:16:27:20 | ... % ... | test.rs:27:25:27:25 | 0 | | +| test.rs:27:16:27:25 | ... != ... | test.rs:27:13:29:13 | IfExpr | false | +| test.rs:27:16:27:25 | ... != ... | test.rs:28:17:28:25 | ExprStmt | true | +| test.rs:27:20:27:20 | 2 | test.rs:27:16:27:20 | ... % ... | | +| test.rs:27:25:27:25 | 0 | test.rs:27:16:27:25 | ... != ... | | +| test.rs:28:17:28:24 | ContinueExpr | test.rs:20:13:20:24 | ExprStmt | continue | +| test.rs:28:17:28:25 | ExprStmt | test.rs:28:17:28:24 | ContinueExpr | | +| test.rs:30:13:30:13 | i | test.rs:30:17:30:17 | i | | +| test.rs:30:13:30:21 | ... = ... | test.rs:19:14:31:9 | BlockExpr | | +| test.rs:30:17:30:17 | i | test.rs:30:21:30:21 | 2 | | +| test.rs:30:17:30:21 | ... / ... | test.rs:30:13:30:21 | ... = ... | | +| test.rs:30:21:30:21 | 2 | test.rs:30:17:30:21 | ... / ... | | +| test.rs:32:9:32:19 | ReturnExpr | test.rs:17:5:33:5 | exit test_break_and_continue (normal) | return | +| test.rs:32:9:32:20 | ExprStmt | test.rs:32:16:32:19 | true | | +| test.rs:32:16:32:19 | true | test.rs:32:9:32:19 | ReturnExpr | | +| test.rs:35:5:47:5 | enter test_break_with_labels | test.rs:35:31:35:31 | b | | +| test.rs:35:5:47:5 | exit test_break_with_labels (normal) | test.rs:35:5:47:5 | exit test_break_with_labels | | +| test.rs:35:31:35:31 | b | test.rs:35:31:35:37 | Param | match | +| test.rs:35:31:35:37 | Param | test.rs:36:9:45:9 | ExprStmt | | +| test.rs:35:48:47:5 | BlockExpr | test.rs:35:5:47:5 | exit test_break_with_labels (normal) | | +| test.rs:36:9:45:9 | ExprStmt | test.rs:38:17:42:17 | ExprStmt | | +| test.rs:36:9:45:9 | LoopExpr | test.rs:46:9:46:12 | true | | +| test.rs:36:22:45:9 | BlockExpr | test.rs:38:17:42:17 | ExprStmt | | +| test.rs:37:13:44:13 | LoopExpr | test.rs:36:22:45:9 | BlockExpr | | +| test.rs:38:17:42:17 | ExprStmt | test.rs:38:20:38:20 | b | | +| test.rs:38:17:42:17 | IfExpr | test.rs:43:17:43:29 | ExprStmt | | +| test.rs:38:20:38:20 | b | test.rs:39:21:39:26 | ExprStmt | true | +| test.rs:38:20:38:20 | b | test.rs:40:27:40:27 | b | false | +| test.rs:39:21:39:25 | BreakExpr | test.rs:37:13:44:13 | LoopExpr | break | +| test.rs:39:21:39:26 | ExprStmt | test.rs:39:21:39:25 | BreakExpr | | +| test.rs:40:24:42:17 | IfExpr | test.rs:38:17:42:17 | IfExpr | | +| test.rs:40:27:40:27 | b | test.rs:40:24:42:17 | IfExpr | false | +| test.rs:40:27:40:27 | b | test.rs:41:21:41:33 | ExprStmt | true | +| test.rs:41:21:41:32 | BreakExpr | test.rs:36:9:45:9 | LoopExpr | break | +| test.rs:41:21:41:33 | ExprStmt | test.rs:41:21:41:32 | BreakExpr | | +| test.rs:43:17:43:28 | BreakExpr | test.rs:37:13:44:13 | LoopExpr | break | +| test.rs:43:17:43:29 | ExprStmt | test.rs:43:17:43:28 | BreakExpr | | +| test.rs:46:9:46:12 | true | test.rs:35:48:47:5 | BlockExpr | | +| test.rs:49:5:61:5 | enter test_continue_with_labels | test.rs:49:34:49:34 | b | | +| test.rs:49:34:49:34 | b | test.rs:49:34:49:40 | Param | match | +| test.rs:49:34:49:40 | Param | test.rs:51:13:51:14 | ExprStmt | | +| test.rs:51:13:51:13 | 1 | test.rs:53:17:57:17 | ExprStmt | | +| test.rs:51:13:51:14 | ExprStmt | test.rs:51:13:51:13 | 1 | | +| test.rs:53:17:57:17 | ExprStmt | test.rs:53:20:53:20 | b | | +| test.rs:53:17:57:17 | IfExpr | test.rs:58:17:58:32 | ExprStmt | | +| test.rs:53:20:53:20 | b | test.rs:54:21:54:29 | ExprStmt | true | +| test.rs:53:20:53:20 | b | test.rs:55:27:55:27 | b | false | +| test.rs:54:21:54:28 | ContinueExpr | test.rs:53:17:57:17 | ExprStmt | continue | +| test.rs:54:21:54:29 | ExprStmt | test.rs:54:21:54:28 | ContinueExpr | | +| test.rs:55:24:57:17 | IfExpr | test.rs:53:17:57:17 | IfExpr | | +| test.rs:55:27:55:27 | b | test.rs:55:24:57:17 | IfExpr | false | +| test.rs:55:27:55:27 | b | test.rs:56:21:56:36 | ExprStmt | true | +| test.rs:56:21:56:35 | ContinueExpr | test.rs:51:13:51:14 | ExprStmt | continue | +| test.rs:56:21:56:36 | ExprStmt | test.rs:56:21:56:35 | ContinueExpr | | +| test.rs:58:17:58:31 | ContinueExpr | test.rs:53:17:57:17 | ExprStmt | continue | +| test.rs:58:17:58:32 | ExprStmt | test.rs:58:17:58:31 | ContinueExpr | | +| test.rs:63:5:75:5 | enter test_loop_label_shadowing | test.rs:63:34:63:34 | b | | +| test.rs:63:34:63:34 | b | test.rs:63:34:63:40 | Param | match | +| test.rs:63:34:63:40 | Param | test.rs:65:13:65:14 | ExprStmt | | +| test.rs:65:13:65:13 | 1 | test.rs:67:17:71:17 | ExprStmt | | +| test.rs:65:13:65:14 | ExprStmt | test.rs:65:13:65:13 | 1 | | +| test.rs:67:17:71:17 | ExprStmt | test.rs:67:20:67:20 | b | | +| test.rs:67:17:71:17 | IfExpr | test.rs:72:17:72:31 | ExprStmt | | +| test.rs:67:20:67:20 | b | test.rs:68:21:68:29 | ExprStmt | true | +| test.rs:67:20:67:20 | b | test.rs:69:27:69:27 | b | false | +| test.rs:68:21:68:28 | ContinueExpr | test.rs:67:17:71:17 | ExprStmt | continue | +| test.rs:68:21:68:29 | ExprStmt | test.rs:68:21:68:28 | ContinueExpr | | +| test.rs:69:24:71:17 | IfExpr | test.rs:67:17:71:17 | IfExpr | | +| test.rs:69:27:69:27 | b | test.rs:69:24:71:17 | IfExpr | false | +| test.rs:69:27:69:27 | b | test.rs:70:21:70:35 | ExprStmt | true | +| test.rs:70:21:70:34 | ContinueExpr | test.rs:67:17:71:17 | ExprStmt | continue | +| test.rs:70:21:70:35 | ExprStmt | test.rs:70:21:70:34 | ContinueExpr | | +| test.rs:72:17:72:30 | ContinueExpr | test.rs:67:17:71:17 | ExprStmt | continue | +| test.rs:72:17:72:31 | ExprStmt | test.rs:72:17:72:30 | ContinueExpr | | +| test.rs:77:5:86:5 | enter test_while | test.rs:77:19:77:19 | i | | +| test.rs:77:5:86:5 | exit test_while (normal) | test.rs:77:5:86:5 | exit test_while | | +| test.rs:77:19:77:19 | i | test.rs:77:19:77:24 | Param | match | +| test.rs:77:19:77:24 | Param | test.rs:78:9:78:25 | LetStmt | | +| test.rs:77:27:86:5 | BlockExpr | test.rs:77:5:86:5 | exit test_while (normal) | | +| test.rs:78:9:78:25 | LetStmt | test.rs:78:21:78:24 | true | | +| test.rs:78:13:78:17 | b | test.rs:79:15:79:15 | b | match | +| test.rs:78:21:78:24 | true | test.rs:78:13:78:17 | b | | +| test.rs:79:9:85:9 | WhileExpr | test.rs:77:27:86:5 | BlockExpr | | +| test.rs:79:15:79:15 | b | test.rs:79:9:85:9 | WhileExpr | false | +| test.rs:79:15:79:15 | b | test.rs:80:13:80:14 | ExprStmt | true | +| test.rs:79:17:85:9 | BlockExpr | test.rs:79:15:79:15 | b | | +| test.rs:80:13:80:13 | 1 | test.rs:81:13:83:13 | ExprStmt | | +| test.rs:80:13:80:14 | ExprStmt | test.rs:80:13:80:13 | 1 | | +| test.rs:81:13:83:13 | ExprStmt | test.rs:81:17:81:17 | i | | +| test.rs:81:13:83:13 | IfExpr | test.rs:84:13:84:22 | ExprStmt | | +| test.rs:81:17:81:17 | i | test.rs:81:21:81:21 | 0 | | +| test.rs:81:17:81:21 | ... > ... | test.rs:81:13:83:13 | IfExpr | false | +| test.rs:81:17:81:21 | ... > ... | test.rs:82:17:82:22 | ExprStmt | true | +| test.rs:81:21:81:21 | 0 | test.rs:81:17:81:21 | ... > ... | | +| test.rs:82:17:82:21 | BreakExpr | test.rs:79:9:85:9 | WhileExpr | break | +| test.rs:82:17:82:22 | ExprStmt | test.rs:82:17:82:21 | BreakExpr | | +| test.rs:84:13:84:13 | b | test.rs:84:17:84:21 | false | | +| test.rs:84:13:84:21 | ... = ... | test.rs:79:17:85:9 | BlockExpr | | +| test.rs:84:13:84:22 | ExprStmt | test.rs:84:13:84:13 | b | | +| test.rs:84:17:84:21 | false | test.rs:84:13:84:21 | ... = ... | | +| test.rs:88:5:95:5 | enter test_while_let | test.rs:89:9:89:29 | LetStmt | | +| test.rs:88:5:95:5 | exit test_while_let (normal) | test.rs:88:5:95:5 | exit test_while_let | | +| test.rs:88:25:95:5 | BlockExpr | test.rs:88:5:95:5 | exit test_while_let (normal) | | +| test.rs:89:9:89:29 | LetStmt | test.rs:89:24:89:24 | 1 | | +| test.rs:89:13:89:20 | iter | test.rs:90:15:90:39 | LetExpr | match | +| test.rs:89:24:89:24 | 1 | test.rs:89:27:89:28 | 10 | | +| test.rs:89:24:89:28 | RangeExpr | test.rs:89:13:89:20 | iter | | +| test.rs:89:27:89:28 | 10 | test.rs:89:24:89:28 | RangeExpr | | +| test.rs:90:9:94:9 | WhileExpr | test.rs:88:25:95:5 | BlockExpr | | +| test.rs:90:15:90:39 | LetExpr | test.rs:90:29:90:32 | iter | | +| test.rs:90:19:90:25 | TupleStructPat | test.rs:90:9:94:9 | WhileExpr | no-match | +| test.rs:90:19:90:25 | TupleStructPat | test.rs:90:24:90:24 | x | match | +| test.rs:90:24:90:24 | x | test.rs:91:17:91:17 | PathExpr | match | +| test.rs:90:29:90:32 | iter | test.rs:90:29:90:39 | MethodCallExpr | | +| test.rs:90:29:90:39 | MethodCallExpr | test.rs:90:19:90:25 | TupleStructPat | | +| test.rs:90:41:94:9 | BlockExpr | test.rs:90:15:90:39 | LetExpr | | +| test.rs:91:13:93:13 | IfExpr | test.rs:90:41:94:9 | BlockExpr | | +| test.rs:91:17:91:17 | PathExpr | test.rs:91:21:91:21 | 5 | | +| test.rs:91:17:91:21 | ... = ... | test.rs:91:13:93:13 | IfExpr | false | +| test.rs:91:17:91:21 | ... = ... | test.rs:92:17:92:22 | ExprStmt | true | +| test.rs:91:21:91:21 | 5 | test.rs:91:17:91:21 | ... = ... | | +| test.rs:92:17:92:21 | BreakExpr | test.rs:90:9:94:9 | WhileExpr | break | +| test.rs:92:17:92:22 | ExprStmt | test.rs:92:17:92:21 | BreakExpr | | +| test.rs:97:5:104:5 | enter test_for | test.rs:97:17:97:17 | j | | +| test.rs:97:5:104:5 | exit test_for (normal) | test.rs:97:5:104:5 | exit test_for | | +| test.rs:97:17:97:17 | j | test.rs:97:17:97:22 | Param | match | +| test.rs:97:17:97:22 | Param | test.rs:98:18:98:18 | 0 | | +| test.rs:97:25:104:5 | BlockExpr | test.rs:97:5:104:5 | exit test_for (normal) | | +| test.rs:98:9:103:9 | ForExpr | test.rs:97:25:104:5 | BlockExpr | | +| test.rs:98:13:98:13 | i | test.rs:98:9:103:9 | ForExpr | no-match | +| test.rs:98:13:98:13 | i | test.rs:99:13:101:13 | ExprStmt | match | +| test.rs:98:18:98:18 | 0 | test.rs:98:21:98:22 | 10 | | +| test.rs:98:18:98:22 | RangeExpr | test.rs:98:13:98:13 | i | | +| test.rs:98:21:98:22 | 10 | test.rs:98:18:98:22 | RangeExpr | | +| test.rs:98:24:103:9 | BlockExpr | test.rs:98:13:98:13 | i | | +| test.rs:99:13:101:13 | ExprStmt | test.rs:99:17:99:17 | i | | +| test.rs:99:13:101:13 | IfExpr | test.rs:102:13:102:14 | ExprStmt | | +| test.rs:99:17:99:17 | i | test.rs:99:22:99:22 | j | | +| test.rs:99:17:99:22 | ... == ... | test.rs:99:13:101:13 | IfExpr | false | +| test.rs:99:17:99:22 | ... == ... | test.rs:100:17:100:22 | ExprStmt | true | +| test.rs:99:22:99:22 | j | test.rs:99:17:99:22 | ... == ... | | +| test.rs:100:17:100:21 | BreakExpr | test.rs:98:9:103:9 | ForExpr | break | +| test.rs:100:17:100:22 | ExprStmt | test.rs:100:17:100:21 | BreakExpr | | +| test.rs:102:13:102:13 | 1 | test.rs:98:24:103:9 | BlockExpr | | +| test.rs:102:13:102:14 | ExprStmt | test.rs:102:13:102:13 | 1 | | +| test.rs:107:1:110:1 | enter test_nested_function | test.rs:107:25:107:25 | n | | +| test.rs:107:1:110:1 | exit test_nested_function (normal) | test.rs:107:1:110:1 | exit test_nested_function | | +| test.rs:107:25:107:25 | n | test.rs:107:25:107:30 | Param | match | +| test.rs:107:25:107:30 | Param | test.rs:108:5:108:28 | LetStmt | | +| test.rs:107:40:110:1 | BlockExpr | test.rs:107:1:110:1 | exit test_nested_function (normal) | | +| test.rs:108:5:108:28 | LetStmt | test.rs:108:19:108:27 | ClosureExpr | | +| test.rs:108:9:108:15 | add_one | test.rs:109:5:109:11 | add_one | match | +| test.rs:108:19:108:27 | ClosureExpr | test.rs:108:9:108:15 | add_one | | +| test.rs:108:19:108:27 | enter ClosureExpr | test.rs:108:20:108:20 | i | | +| test.rs:108:19:108:27 | exit ClosureExpr (normal) | test.rs:108:19:108:27 | exit ClosureExpr | | +| test.rs:108:20:108:20 | Param | test.rs:108:23:108:23 | i | | +| test.rs:108:20:108:20 | i | test.rs:108:20:108:20 | Param | match | +| test.rs:108:23:108:23 | i | test.rs:108:27:108:27 | 1 | | +| test.rs:108:23:108:27 | ... + ... | test.rs:108:19:108:27 | exit ClosureExpr (normal) | | +| test.rs:108:27:108:27 | 1 | test.rs:108:23:108:27 | ... + ... | | +| test.rs:109:5:109:11 | add_one | test.rs:109:13:109:19 | add_one | | +| test.rs:109:5:109:23 | CallExpr | test.rs:107:40:110:1 | BlockExpr | | +| test.rs:109:13:109:19 | add_one | test.rs:109:21:109:21 | n | | +| test.rs:109:13:109:22 | CallExpr | test.rs:109:5:109:23 | CallExpr | | +| test.rs:109:21:109:21 | n | test.rs:109:13:109:22 | CallExpr | | +| test.rs:114:5:120:5 | enter test_if_else | test.rs:114:21:114:21 | n | | +| test.rs:114:5:120:5 | exit test_if_else (normal) | test.rs:114:5:120:5 | exit test_if_else | | +| test.rs:114:21:114:21 | n | test.rs:114:21:114:26 | Param | match | +| test.rs:114:21:114:26 | Param | test.rs:115:12:115:12 | n | | +| test.rs:114:36:120:5 | BlockExpr | test.rs:114:5:120:5 | exit test_if_else (normal) | | +| test.rs:115:9:119:9 | IfExpr | test.rs:114:36:120:5 | BlockExpr | | +| test.rs:115:12:115:12 | n | test.rs:115:17:115:17 | 0 | | +| test.rs:115:12:115:17 | ... <= ... | test.rs:116:13:116:13 | 0 | true | +| test.rs:115:12:115:17 | ... <= ... | test.rs:118:13:118:13 | n | false | +| test.rs:115:17:115:17 | 0 | test.rs:115:12:115:17 | ... <= ... | | +| test.rs:115:19:117:9 | BlockExpr | test.rs:115:9:119:9 | IfExpr | | +| test.rs:116:13:116:13 | 0 | test.rs:115:19:117:9 | BlockExpr | | +| test.rs:117:16:119:9 | BlockExpr | test.rs:115:9:119:9 | IfExpr | | +| test.rs:118:13:118:13 | n | test.rs:118:17:118:17 | 1 | | +| test.rs:118:13:118:17 | ... - ... | test.rs:117:16:119:9 | BlockExpr | | +| test.rs:118:17:118:17 | 1 | test.rs:118:13:118:17 | ... - ... | | +| test.rs:122:5:128:5 | enter test_if_let_else | test.rs:122:25:122:25 | a | | +| test.rs:122:5:128:5 | exit test_if_let_else (normal) | test.rs:122:5:128:5 | exit test_if_let_else | | +| test.rs:122:25:122:25 | a | test.rs:122:25:122:38 | Param | match | +| test.rs:122:25:122:38 | Param | test.rs:123:12:123:26 | LetExpr | | +| test.rs:122:48:128:5 | BlockExpr | test.rs:122:5:128:5 | exit test_if_let_else (normal) | | +| test.rs:123:9:127:9 | IfExpr | test.rs:122:48:128:5 | BlockExpr | | +| test.rs:123:12:123:26 | LetExpr | test.rs:123:26:123:26 | a | | +| test.rs:123:16:123:22 | TupleStructPat | test.rs:123:21:123:21 | n | match | +| test.rs:123:16:123:22 | TupleStructPat | test.rs:126:13:126:13 | 0 | no-match | +| test.rs:123:21:123:21 | n | test.rs:124:13:124:13 | n | match | +| test.rs:123:26:123:26 | a | test.rs:123:16:123:22 | TupleStructPat | | +| test.rs:123:28:125:9 | BlockExpr | test.rs:123:9:127:9 | IfExpr | | +| test.rs:124:13:124:13 | n | test.rs:123:28:125:9 | BlockExpr | | +| test.rs:125:16:127:9 | BlockExpr | test.rs:123:9:127:9 | IfExpr | | +| test.rs:126:13:126:13 | 0 | test.rs:125:16:127:9 | BlockExpr | | +| test.rs:130:5:135:5 | enter test_if_let | test.rs:130:20:130:20 | a | | +| test.rs:130:5:135:5 | exit test_if_let (normal) | test.rs:130:5:135:5 | exit test_if_let | | +| test.rs:130:20:130:20 | a | test.rs:130:20:130:33 | Param | match | +| test.rs:130:20:130:33 | Param | test.rs:131:9:133:9 | ExprStmt | | +| test.rs:130:43:135:5 | BlockExpr | test.rs:130:5:135:5 | exit test_if_let (normal) | | +| test.rs:131:9:133:9 | ExprStmt | test.rs:131:12:131:26 | LetExpr | | +| test.rs:131:9:133:9 | IfExpr | test.rs:134:9:134:9 | 0 | | +| test.rs:131:12:131:26 | LetExpr | test.rs:131:26:131:26 | a | | +| test.rs:131:16:131:22 | TupleStructPat | test.rs:131:9:133:9 | IfExpr | no-match | +| test.rs:131:16:131:22 | TupleStructPat | test.rs:131:21:131:21 | n | match | +| test.rs:131:21:131:21 | n | test.rs:132:13:132:13 | n | match | +| test.rs:131:26:131:26 | a | test.rs:131:16:131:22 | TupleStructPat | | +| test.rs:131:28:133:9 | BlockExpr | test.rs:131:9:133:9 | IfExpr | | +| test.rs:132:13:132:13 | n | test.rs:131:28:133:9 | BlockExpr | | +| test.rs:134:9:134:9 | 0 | test.rs:130:43:135:5 | BlockExpr | | +| test.rs:137:5:143:5 | enter test_nested_if | test.rs:137:23:137:23 | a | | +| test.rs:137:5:143:5 | exit test_nested_if (normal) | test.rs:137:5:143:5 | exit test_nested_if | | +| test.rs:137:23:137:23 | a | test.rs:137:23:137:28 | Param | match | +| test.rs:137:23:137:28 | Param | test.rs:138:16:138:16 | a | | +| test.rs:137:38:143:5 | BlockExpr | test.rs:137:5:143:5 | exit test_nested_if (normal) | | +| test.rs:138:9:142:9 | IfExpr | test.rs:137:38:143:5 | BlockExpr | | +| test.rs:138:13:138:48 | [boolean(false)] IfExpr | test.rs:141:13:141:13 | 0 | false | +| test.rs:138:13:138:48 | [boolean(true)] IfExpr | test.rs:139:13:139:13 | 1 | true | +| test.rs:138:16:138:16 | a | test.rs:138:20:138:20 | 0 | | +| test.rs:138:16:138:20 | ... < ... | test.rs:138:24:138:24 | a | true | +| test.rs:138:16:138:20 | ... < ... | test.rs:138:41:138:41 | a | false | +| test.rs:138:20:138:20 | 0 | test.rs:138:16:138:20 | ... < ... | | +| test.rs:138:22:138:32 | [boolean(false)] BlockExpr | test.rs:138:13:138:48 | [boolean(false)] IfExpr | false | +| test.rs:138:22:138:32 | [boolean(true)] BlockExpr | test.rs:138:13:138:48 | [boolean(true)] IfExpr | true | +| test.rs:138:24:138:24 | a | test.rs:138:29:138:30 | 10 | | +| test.rs:138:24:138:30 | ... < ... | test.rs:138:22:138:32 | [boolean(false)] BlockExpr | false | +| test.rs:138:24:138:30 | ... < ... | test.rs:138:22:138:32 | [boolean(true)] BlockExpr | true | +| test.rs:138:28:138:30 | - ... | test.rs:138:24:138:30 | ... < ... | | +| test.rs:138:29:138:30 | 10 | test.rs:138:28:138:30 | - ... | | +| test.rs:138:39:138:48 | [boolean(false)] BlockExpr | test.rs:138:13:138:48 | [boolean(false)] IfExpr | false | +| test.rs:138:39:138:48 | [boolean(true)] BlockExpr | test.rs:138:13:138:48 | [boolean(true)] IfExpr | true | +| test.rs:138:41:138:41 | a | test.rs:138:45:138:46 | 10 | | +| test.rs:138:41:138:46 | ... > ... | test.rs:138:39:138:48 | [boolean(false)] BlockExpr | false | +| test.rs:138:41:138:46 | ... > ... | test.rs:138:39:138:48 | [boolean(true)] BlockExpr | true | +| test.rs:138:45:138:46 | 10 | test.rs:138:41:138:46 | ... > ... | | +| test.rs:138:51:140:9 | BlockExpr | test.rs:138:9:142:9 | IfExpr | | +| test.rs:139:13:139:13 | 1 | test.rs:138:51:140:9 | BlockExpr | | +| test.rs:140:16:142:9 | BlockExpr | test.rs:138:9:142:9 | IfExpr | | +| test.rs:141:13:141:13 | 0 | test.rs:140:16:142:9 | BlockExpr | | +| test.rs:145:5:154:5 | enter test_nested_if_match | test.rs:145:29:145:29 | a | | +| test.rs:145:5:154:5 | exit test_nested_if_match (normal) | test.rs:145:5:154:5 | exit test_nested_if_match | | +| test.rs:145:29:145:29 | a | test.rs:145:29:145:34 | Param | match | +| test.rs:145:29:145:34 | Param | test.rs:146:19:146:19 | a | | +| test.rs:145:44:154:5 | BlockExpr | test.rs:145:5:154:5 | exit test_nested_if_match (normal) | | +| test.rs:146:9:153:9 | IfExpr | test.rs:145:44:154:5 | BlockExpr | | +| test.rs:146:13:149:9 | [boolean(false)] MatchExpr | test.rs:152:13:152:13 | 0 | false | +| test.rs:146:13:149:9 | [boolean(true)] MatchExpr | test.rs:150:13:150:13 | 1 | true | +| test.rs:146:19:146:19 | a | test.rs:147:13:147:13 | LiteralPat | | +| test.rs:147:13:147:13 | LiteralPat | test.rs:147:18:147:21 | true | match | +| test.rs:147:13:147:13 | LiteralPat | test.rs:148:13:148:13 | WildcardPat | no-match | +| test.rs:147:18:147:21 | true | test.rs:146:13:149:9 | [boolean(true)] MatchExpr | true | +| test.rs:148:13:148:13 | WildcardPat | test.rs:148:18:148:22 | false | match | +| test.rs:148:18:148:22 | false | test.rs:146:13:149:9 | [boolean(false)] MatchExpr | false | +| test.rs:149:12:151:9 | BlockExpr | test.rs:146:9:153:9 | IfExpr | | +| test.rs:150:13:150:13 | 1 | test.rs:149:12:151:9 | BlockExpr | | +| test.rs:151:16:153:9 | BlockExpr | test.rs:146:9:153:9 | IfExpr | | +| test.rs:152:13:152:13 | 0 | test.rs:151:16:153:9 | BlockExpr | | +| test.rs:156:5:165:5 | enter test_nested_if_block | test.rs:156:29:156:29 | a | | +| test.rs:156:5:165:5 | exit test_nested_if_block (normal) | test.rs:156:5:165:5 | exit test_nested_if_block | | +| test.rs:156:29:156:29 | a | test.rs:156:29:156:34 | Param | match | +| test.rs:156:29:156:34 | Param | test.rs:158:13:158:15 | ExprStmt | | +| test.rs:156:44:165:5 | BlockExpr | test.rs:156:5:165:5 | exit test_nested_if_block (normal) | | +| test.rs:157:9:164:9 | IfExpr | test.rs:156:44:165:5 | BlockExpr | | +| test.rs:157:12:160:9 | [boolean(false)] BlockExpr | test.rs:163:13:163:13 | 0 | false | +| test.rs:157:12:160:9 | [boolean(true)] BlockExpr | test.rs:161:13:161:13 | 1 | true | +| test.rs:158:13:158:14 | TupleExpr | test.rs:159:13:159:13 | a | | +| test.rs:158:13:158:15 | ExprStmt | test.rs:158:13:158:14 | TupleExpr | | +| test.rs:159:13:159:13 | a | test.rs:159:17:159:17 | 0 | | +| test.rs:159:13:159:17 | ... > ... | test.rs:157:12:160:9 | [boolean(false)] BlockExpr | false | +| test.rs:159:13:159:17 | ... > ... | test.rs:157:12:160:9 | [boolean(true)] BlockExpr | true | +| test.rs:159:17:159:17 | 0 | test.rs:159:13:159:17 | ... > ... | | +| test.rs:160:11:162:9 | BlockExpr | test.rs:157:9:164:9 | IfExpr | | +| test.rs:161:13:161:13 | 1 | test.rs:160:11:162:9 | BlockExpr | | +| test.rs:162:16:164:9 | BlockExpr | test.rs:157:9:164:9 | IfExpr | | | test.rs:163:13:163:13 | 0 | test.rs:162:16:164:9 | BlockExpr | | -| test.rs:167:5:178:5 | enter test_if_loop1 | test.rs:167:22:167:22 | a | | -| test.rs:167:5:178:5 | exit test_if_loop1 (normal) | test.rs:167:5:178:5 | exit test_if_loop1 | | -| test.rs:167:22:167:22 | a | test.rs:167:22:167:27 | Param | match | -| test.rs:167:22:167:27 | Param | test.rs:169:13:171:14 | ExprStmt | | -| test.rs:167:37:178:5 | BlockExpr | test.rs:167:5:178:5 | exit test_if_loop1 (normal) | | -| test.rs:168:9:177:9 | IfExpr | test.rs:167:37:178:5 | BlockExpr | | -| test.rs:168:13:173:9 | [boolean(false)] LoopExpr | test.rs:176:13:176:13 | 0 | false | -| test.rs:168:13:173:9 | [boolean(true)] LoopExpr | test.rs:174:13:174:13 | 1 | true | -| test.rs:168:18:173:9 | BlockExpr | test.rs:169:13:171:14 | ExprStmt | | -| test.rs:169:13:171:13 | IfExpr | test.rs:172:13:172:19 | ExprStmt | | -| test.rs:169:13:171:14 | ExprStmt | test.rs:169:16:169:16 | a | | -| test.rs:169:16:169:16 | a | test.rs:169:20:169:20 | 0 | | -| test.rs:169:16:169:20 | ... > ... | test.rs:169:13:171:13 | IfExpr | false | -| test.rs:169:16:169:20 | ... > ... | test.rs:170:17:170:29 | ExprStmt | true | -| test.rs:169:20:169:20 | 0 | test.rs:169:16:169:20 | ... > ... | | -| test.rs:170:17:170:28 | [boolean(false)] BreakExpr | test.rs:168:13:173:9 | [boolean(false)] LoopExpr | break | -| test.rs:170:17:170:28 | [boolean(true)] BreakExpr | test.rs:168:13:173:9 | [boolean(true)] LoopExpr | break | -| test.rs:170:17:170:29 | ExprStmt | test.rs:170:23:170:23 | a | | -| test.rs:170:23:170:23 | a | test.rs:170:27:170:28 | 10 | | -| test.rs:170:23:170:28 | ... > ... | test.rs:170:17:170:28 | [boolean(false)] BreakExpr | false | -| test.rs:170:23:170:28 | ... > ... | test.rs:170:17:170:28 | [boolean(true)] BreakExpr | true | -| test.rs:170:27:170:28 | 10 | test.rs:170:23:170:28 | ... > ... | | -| test.rs:172:13:172:13 | a | test.rs:172:17:172:18 | 10 | | -| test.rs:172:13:172:18 | ... < ... | test.rs:168:18:173:9 | BlockExpr | | -| test.rs:172:13:172:19 | ExprStmt | test.rs:172:13:172:13 | a | | -| test.rs:172:17:172:18 | 10 | test.rs:172:13:172:18 | ... < ... | | -| test.rs:173:12:175:9 | BlockExpr | test.rs:168:9:177:9 | IfExpr | | -| test.rs:174:13:174:13 | 1 | test.rs:173:12:175:9 | BlockExpr | | -| test.rs:175:16:177:9 | BlockExpr | test.rs:168:9:177:9 | IfExpr | | -| test.rs:176:13:176:13 | 0 | test.rs:175:16:177:9 | BlockExpr | | -| test.rs:180:5:191:5 | enter test_if_loop2 | test.rs:180:22:180:22 | a | | -| test.rs:180:5:191:5 | exit test_if_loop2 (normal) | test.rs:180:5:191:5 | exit test_if_loop2 | | -| test.rs:180:22:180:22 | a | test.rs:180:22:180:27 | Param | match | -| test.rs:180:22:180:27 | Param | test.rs:182:13:184:14 | ExprStmt | | -| test.rs:180:37:191:5 | BlockExpr | test.rs:180:5:191:5 | exit test_if_loop2 (normal) | | -| test.rs:181:9:190:9 | IfExpr | test.rs:180:37:191:5 | BlockExpr | | -| test.rs:181:13:186:9 | [boolean(false)] LoopExpr | test.rs:189:13:189:13 | 0 | false | -| test.rs:181:13:186:9 | [boolean(true)] LoopExpr | test.rs:187:13:187:13 | 1 | true | -| test.rs:181:26:186:9 | BlockExpr | test.rs:182:13:184:14 | ExprStmt | | -| test.rs:182:13:184:13 | IfExpr | test.rs:185:13:185:19 | ExprStmt | | -| test.rs:182:13:184:14 | ExprStmt | test.rs:182:16:182:16 | a | | -| test.rs:182:16:182:16 | a | test.rs:182:20:182:20 | 0 | | -| test.rs:182:16:182:20 | ... > ... | test.rs:182:13:184:13 | IfExpr | false | -| test.rs:182:16:182:20 | ... > ... | test.rs:183:17:183:36 | ExprStmt | true | -| test.rs:182:20:182:20 | 0 | test.rs:182:16:182:20 | ... > ... | | -| test.rs:183:17:183:35 | [boolean(false)] BreakExpr | test.rs:181:13:186:9 | [boolean(false)] LoopExpr | break | -| test.rs:183:17:183:35 | [boolean(true)] BreakExpr | test.rs:181:13:186:9 | [boolean(true)] LoopExpr | break | -| test.rs:183:17:183:36 | ExprStmt | test.rs:183:30:183:30 | a | | -| test.rs:183:30:183:30 | a | test.rs:183:34:183:35 | 10 | | -| test.rs:183:30:183:35 | ... > ... | test.rs:183:17:183:35 | [boolean(false)] BreakExpr | false | -| test.rs:183:30:183:35 | ... > ... | test.rs:183:17:183:35 | [boolean(true)] BreakExpr | true | -| test.rs:183:34:183:35 | 10 | test.rs:183:30:183:35 | ... > ... | | -| test.rs:185:13:185:13 | a | test.rs:185:17:185:18 | 10 | | -| test.rs:185:13:185:18 | ... < ... | test.rs:181:26:186:9 | BlockExpr | | -| test.rs:185:13:185:19 | ExprStmt | test.rs:185:13:185:13 | a | | -| test.rs:185:17:185:18 | 10 | test.rs:185:13:185:18 | ... < ... | | -| test.rs:186:12:188:9 | BlockExpr | test.rs:181:9:190:9 | IfExpr | | -| test.rs:187:13:187:13 | 1 | test.rs:186:12:188:9 | BlockExpr | | -| test.rs:188:16:190:9 | BlockExpr | test.rs:181:9:190:9 | IfExpr | | -| test.rs:189:13:189:13 | 0 | test.rs:188:16:190:9 | BlockExpr | | -| test.rs:193:5:201:5 | enter test_labelled_block | test.rs:193:28:193:28 | a | | -| test.rs:193:5:201:5 | exit test_labelled_block (normal) | test.rs:193:5:201:5 | exit test_labelled_block | | -| test.rs:193:28:193:28 | a | test.rs:193:28:193:33 | Param | match | -| test.rs:193:28:193:33 | Param | test.rs:195:13:195:31 | ExprStmt | | -| test.rs:193:43:201:5 | BlockExpr | test.rs:193:5:201:5 | exit test_labelled_block (normal) | | -| test.rs:194:9:200:9 | IfExpr | test.rs:193:43:201:5 | BlockExpr | | -| test.rs:194:13:196:9 | [boolean(false)] BlockExpr | test.rs:199:13:199:13 | 0 | false | -| test.rs:194:13:196:9 | [boolean(true)] BlockExpr | test.rs:197:13:197:13 | 1 | true | -| test.rs:195:13:195:30 | [boolean(false)] BreakExpr | test.rs:194:13:196:9 | [boolean(false)] BlockExpr | break | -| test.rs:195:13:195:30 | [boolean(true)] BreakExpr | test.rs:194:13:196:9 | [boolean(true)] BlockExpr | break | -| test.rs:195:13:195:31 | ExprStmt | test.rs:195:26:195:26 | a | | -| test.rs:195:26:195:26 | a | test.rs:195:30:195:30 | 0 | | -| test.rs:195:26:195:30 | ... > ... | test.rs:195:13:195:30 | [boolean(false)] BreakExpr | false | -| test.rs:195:26:195:30 | ... > ... | test.rs:195:13:195:30 | [boolean(true)] BreakExpr | true | -| test.rs:195:30:195:30 | 0 | test.rs:195:26:195:30 | ... > ... | | -| test.rs:196:12:198:9 | BlockExpr | test.rs:194:9:200:9 | IfExpr | | -| test.rs:197:13:197:13 | 1 | test.rs:196:12:198:9 | BlockExpr | | -| test.rs:198:16:200:9 | BlockExpr | test.rs:194:9:200:9 | IfExpr | | -| test.rs:199:13:199:13 | 0 | test.rs:198:16:200:9 | BlockExpr | | -| test.rs:206:5:209:5 | enter test_and_operator | test.rs:206:26:206:26 | a | | -| test.rs:206:5:209:5 | exit test_and_operator (normal) | test.rs:206:5:209:5 | exit test_and_operator | | -| test.rs:206:26:206:26 | a | test.rs:206:26:206:32 | Param | match | -| test.rs:206:26:206:32 | Param | test.rs:206:35:206:35 | b | | -| test.rs:206:35:206:35 | b | test.rs:206:35:206:41 | Param | match | -| test.rs:206:35:206:41 | Param | test.rs:206:44:206:44 | c | | -| test.rs:206:44:206:44 | c | test.rs:206:44:206:50 | Param | match | -| test.rs:206:44:206:50 | Param | test.rs:207:9:207:28 | LetStmt | | -| test.rs:206:61:209:5 | BlockExpr | test.rs:206:5:209:5 | exit test_and_operator (normal) | | -| test.rs:207:9:207:28 | LetStmt | test.rs:207:17:207:17 | a | | -| test.rs:207:13:207:13 | d | test.rs:208:9:208:9 | d | match | -| test.rs:207:17:207:17 | a | test.rs:207:17:207:22 | [boolean(false)] ... && ... | false | -| test.rs:207:17:207:17 | a | test.rs:207:22:207:22 | b | true | -| test.rs:207:17:207:22 | [boolean(false)] ... && ... | test.rs:207:17:207:27 | ... && ... | false | -| test.rs:207:17:207:22 | [boolean(true)] ... && ... | test.rs:207:27:207:27 | c | true | -| test.rs:207:17:207:27 | ... && ... | test.rs:207:13:207:13 | d | | -| test.rs:207:22:207:22 | b | test.rs:207:17:207:22 | [boolean(false)] ... && ... | false | -| test.rs:207:22:207:22 | b | test.rs:207:17:207:22 | [boolean(true)] ... && ... | true | -| test.rs:207:27:207:27 | c | test.rs:207:17:207:27 | ... && ... | | -| test.rs:208:9:208:9 | d | test.rs:206:61:209:5 | BlockExpr | | -| test.rs:211:5:214:5 | enter test_or_operator | test.rs:211:25:211:25 | a | | -| test.rs:211:5:214:5 | exit test_or_operator (normal) | test.rs:211:5:214:5 | exit test_or_operator | | -| test.rs:211:25:211:25 | a | test.rs:211:25:211:31 | Param | match | -| test.rs:211:25:211:31 | Param | test.rs:211:34:211:34 | b | | -| test.rs:211:34:211:34 | b | test.rs:211:34:211:40 | Param | match | -| test.rs:211:34:211:40 | Param | test.rs:211:43:211:43 | c | | -| test.rs:211:43:211:43 | c | test.rs:211:43:211:49 | Param | match | -| test.rs:211:43:211:49 | Param | test.rs:212:9:212:28 | LetStmt | | -| test.rs:211:60:214:5 | BlockExpr | test.rs:211:5:214:5 | exit test_or_operator (normal) | | -| test.rs:212:9:212:28 | LetStmt | test.rs:212:17:212:17 | a | | -| test.rs:212:13:212:13 | d | test.rs:213:9:213:9 | d | match | -| test.rs:212:17:212:17 | a | test.rs:212:17:212:22 | [boolean(true)] ... \|\| ... | true | -| test.rs:212:17:212:17 | a | test.rs:212:22:212:22 | b | false | -| test.rs:212:17:212:22 | [boolean(false)] ... \|\| ... | test.rs:212:27:212:27 | c | false | -| test.rs:212:17:212:22 | [boolean(true)] ... \|\| ... | test.rs:212:17:212:27 | ... \|\| ... | true | -| test.rs:212:17:212:27 | ... \|\| ... | test.rs:212:13:212:13 | d | | -| test.rs:212:22:212:22 | b | test.rs:212:17:212:22 | [boolean(false)] ... \|\| ... | false | -| test.rs:212:22:212:22 | b | test.rs:212:17:212:22 | [boolean(true)] ... \|\| ... | true | -| test.rs:212:27:212:27 | c | test.rs:212:17:212:27 | ... \|\| ... | | -| test.rs:213:9:213:9 | d | test.rs:211:60:214:5 | BlockExpr | | -| test.rs:216:5:219:5 | enter test_or_operator_2 | test.rs:216:27:216:27 | a | | -| test.rs:216:5:219:5 | exit test_or_operator_2 (normal) | test.rs:216:5:219:5 | exit test_or_operator_2 | | -| test.rs:216:27:216:27 | a | test.rs:216:27:216:33 | Param | match | -| test.rs:216:27:216:33 | Param | test.rs:216:36:216:36 | b | | -| test.rs:216:36:216:36 | b | test.rs:216:36:216:41 | Param | match | -| test.rs:216:36:216:41 | Param | test.rs:216:44:216:44 | c | | -| test.rs:216:44:216:44 | c | test.rs:216:44:216:50 | Param | match | -| test.rs:216:44:216:50 | Param | test.rs:217:9:217:36 | LetStmt | | -| test.rs:216:61:219:5 | BlockExpr | test.rs:216:5:219:5 | exit test_or_operator_2 (normal) | | -| test.rs:217:9:217:36 | LetStmt | test.rs:217:17:217:17 | a | | -| test.rs:217:13:217:13 | d | test.rs:218:9:218:9 | d | match | -| test.rs:217:17:217:17 | a | test.rs:217:17:217:30 | [boolean(true)] ... \|\| ... | true | -| test.rs:217:17:217:17 | a | test.rs:217:23:217:23 | b | false | -| test.rs:217:17:217:30 | [boolean(false)] ... \|\| ... | test.rs:217:35:217:35 | c | false | -| test.rs:217:17:217:30 | [boolean(true)] ... \|\| ... | test.rs:217:17:217:35 | ... \|\| ... | true | -| test.rs:217:17:217:35 | ... \|\| ... | test.rs:217:13:217:13 | d | | -| test.rs:217:23:217:23 | b | test.rs:217:28:217:29 | 28 | | -| test.rs:217:23:217:29 | ... == ... | test.rs:217:17:217:30 | [boolean(false)] ... \|\| ... | false | -| test.rs:217:23:217:29 | ... == ... | test.rs:217:17:217:30 | [boolean(true)] ... \|\| ... | true | -| test.rs:217:28:217:29 | 28 | test.rs:217:23:217:29 | ... == ... | | -| test.rs:217:35:217:35 | c | test.rs:217:17:217:35 | ... \|\| ... | | -| test.rs:218:9:218:9 | d | test.rs:216:61:219:5 | BlockExpr | | -| test.rs:221:5:224:5 | enter test_not_operator | test.rs:221:26:221:26 | a | | -| test.rs:221:5:224:5 | exit test_not_operator (normal) | test.rs:221:5:224:5 | exit test_not_operator | | -| test.rs:221:26:221:26 | a | test.rs:221:26:221:32 | Param | match | -| test.rs:221:26:221:32 | Param | test.rs:222:9:222:19 | LetStmt | | -| test.rs:221:43:224:5 | BlockExpr | test.rs:221:5:224:5 | exit test_not_operator (normal) | | -| test.rs:222:9:222:19 | LetStmt | test.rs:222:18:222:18 | a | | -| test.rs:222:13:222:13 | d | test.rs:223:9:223:9 | d | match | -| test.rs:222:17:222:18 | ! ... | test.rs:222:13:222:13 | d | | -| test.rs:222:18:222:18 | a | test.rs:222:17:222:18 | ! ... | | -| test.rs:223:9:223:9 | d | test.rs:221:43:224:5 | BlockExpr | | -| test.rs:226:5:232:5 | enter test_if_and_operator | test.rs:226:29:226:29 | a | | -| test.rs:226:5:232:5 | exit test_if_and_operator (normal) | test.rs:226:5:232:5 | exit test_if_and_operator | | -| test.rs:226:29:226:29 | a | test.rs:226:29:226:35 | Param | match | -| test.rs:226:29:226:35 | Param | test.rs:226:38:226:38 | b | | -| test.rs:226:38:226:38 | b | test.rs:226:38:226:43 | Param | match | -| test.rs:226:38:226:43 | Param | test.rs:226:46:226:46 | c | | -| test.rs:226:46:226:46 | c | test.rs:226:46:226:52 | Param | match | -| test.rs:226:46:226:52 | Param | test.rs:227:12:227:12 | a | | -| test.rs:226:63:232:5 | BlockExpr | test.rs:226:5:232:5 | exit test_if_and_operator (normal) | | -| test.rs:227:9:231:9 | IfExpr | test.rs:226:63:232:5 | BlockExpr | | -| test.rs:227:12:227:12 | a | test.rs:227:12:227:17 | [boolean(false)] ... && ... | false | -| test.rs:227:12:227:12 | a | test.rs:227:17:227:17 | b | true | -| test.rs:227:12:227:17 | [boolean(false)] ... && ... | test.rs:227:12:227:22 | [boolean(false)] ... && ... | false | -| test.rs:227:12:227:17 | [boolean(true)] ... && ... | test.rs:227:22:227:22 | c | true | -| test.rs:227:12:227:22 | [boolean(false)] ... && ... | test.rs:230:13:230:17 | false | false | -| test.rs:227:12:227:22 | [boolean(true)] ... && ... | test.rs:228:13:228:16 | true | true | -| test.rs:227:17:227:17 | b | test.rs:227:12:227:17 | [boolean(false)] ... && ... | false | -| test.rs:227:17:227:17 | b | test.rs:227:12:227:17 | [boolean(true)] ... && ... | true | -| test.rs:227:22:227:22 | c | test.rs:227:12:227:22 | [boolean(false)] ... && ... | false | -| test.rs:227:22:227:22 | c | test.rs:227:12:227:22 | [boolean(true)] ... && ... | true | -| test.rs:227:24:229:9 | BlockExpr | test.rs:227:9:231:9 | IfExpr | | -| test.rs:228:13:228:16 | true | test.rs:227:24:229:9 | BlockExpr | | -| test.rs:229:16:231:9 | BlockExpr | test.rs:227:9:231:9 | IfExpr | | -| test.rs:230:13:230:17 | false | test.rs:229:16:231:9 | BlockExpr | | -| test.rs:234:5:240:5 | enter test_if_or_operator | test.rs:234:28:234:28 | a | | -| test.rs:234:5:240:5 | exit test_if_or_operator (normal) | test.rs:234:5:240:5 | exit test_if_or_operator | | -| test.rs:234:28:234:28 | a | test.rs:234:28:234:34 | Param | match | -| test.rs:234:28:234:34 | Param | test.rs:234:37:234:37 | b | | -| test.rs:234:37:234:37 | b | test.rs:234:37:234:42 | Param | match | -| test.rs:234:37:234:42 | Param | test.rs:234:45:234:45 | c | | -| test.rs:234:45:234:45 | c | test.rs:234:45:234:51 | Param | match | -| test.rs:234:45:234:51 | Param | test.rs:235:12:235:12 | a | | -| test.rs:234:62:240:5 | BlockExpr | test.rs:234:5:240:5 | exit test_if_or_operator (normal) | | -| test.rs:235:9:239:9 | IfExpr | test.rs:234:62:240:5 | BlockExpr | | -| test.rs:235:12:235:12 | a | test.rs:235:12:235:17 | [boolean(true)] ... \|\| ... | true | -| test.rs:235:12:235:12 | a | test.rs:235:17:235:17 | b | false | -| test.rs:235:12:235:17 | [boolean(false)] ... \|\| ... | test.rs:235:22:235:22 | c | false | -| test.rs:235:12:235:17 | [boolean(true)] ... \|\| ... | test.rs:235:12:235:22 | [boolean(true)] ... \|\| ... | true | -| test.rs:235:12:235:22 | [boolean(false)] ... \|\| ... | test.rs:238:13:238:17 | false | false | -| test.rs:235:12:235:22 | [boolean(true)] ... \|\| ... | test.rs:236:13:236:16 | true | true | -| test.rs:235:17:235:17 | b | test.rs:235:12:235:17 | [boolean(false)] ... \|\| ... | false | -| test.rs:235:17:235:17 | b | test.rs:235:12:235:17 | [boolean(true)] ... \|\| ... | true | -| test.rs:235:22:235:22 | c | test.rs:235:12:235:22 | [boolean(false)] ... \|\| ... | false | -| test.rs:235:22:235:22 | c | test.rs:235:12:235:22 | [boolean(true)] ... \|\| ... | true | -| test.rs:235:24:237:9 | BlockExpr | test.rs:235:9:239:9 | IfExpr | | -| test.rs:236:13:236:16 | true | test.rs:235:24:237:9 | BlockExpr | | -| test.rs:237:16:239:9 | BlockExpr | test.rs:235:9:239:9 | IfExpr | | -| test.rs:238:13:238:17 | false | test.rs:237:16:239:9 | BlockExpr | | -| test.rs:242:5:248:5 | enter test_if_not_operator | test.rs:242:29:242:29 | a | | -| test.rs:242:5:248:5 | exit test_if_not_operator (normal) | test.rs:242:5:248:5 | exit test_if_not_operator | | -| test.rs:242:29:242:29 | a | test.rs:242:29:242:35 | Param | match | -| test.rs:242:29:242:35 | Param | test.rs:243:13:243:13 | a | | -| test.rs:242:46:248:5 | BlockExpr | test.rs:242:5:248:5 | exit test_if_not_operator (normal) | | -| test.rs:243:9:247:9 | IfExpr | test.rs:242:46:248:5 | BlockExpr | | -| test.rs:243:12:243:13 | [boolean(false)] ! ... | test.rs:246:13:246:17 | false | false | -| test.rs:243:12:243:13 | [boolean(true)] ! ... | test.rs:244:13:244:16 | true | true | -| test.rs:243:13:243:13 | a | test.rs:243:12:243:13 | [boolean(false)] ! ... | true | -| test.rs:243:13:243:13 | a | test.rs:243:12:243:13 | [boolean(true)] ! ... | false | -| test.rs:243:15:245:9 | BlockExpr | test.rs:243:9:247:9 | IfExpr | | -| test.rs:244:13:244:16 | true | test.rs:243:15:245:9 | BlockExpr | | -| test.rs:245:16:247:9 | BlockExpr | test.rs:243:9:247:9 | IfExpr | | -| test.rs:246:13:246:17 | false | test.rs:245:16:247:9 | BlockExpr | | -| test.rs:253:5:255:5 | enter test_question_mark_operator_1 | test.rs:253:38:253:38 | s | | -| test.rs:253:5:255:5 | exit test_question_mark_operator_1 (normal) | test.rs:253:5:255:5 | exit test_question_mark_operator_1 | | -| test.rs:253:38:253:38 | s | test.rs:253:38:253:44 | Param | match | -| test.rs:253:38:253:44 | Param | test.rs:254:9:254:11 | PathExpr | | -| test.rs:253:62:255:5 | BlockExpr | test.rs:253:5:255:5 | exit test_question_mark_operator_1 (normal) | | -| test.rs:254:9:254:11 | PathExpr | test.rs:254:9:254:26 | MethodCallExpr | | -| test.rs:254:9:254:26 | MethodCallExpr | test.rs:254:9:254:27 | TryExpr | | -| test.rs:254:9:254:27 | TryExpr | test.rs:253:5:255:5 | exit test_question_mark_operator_1 (normal) | return | -| test.rs:254:9:254:27 | TryExpr | test.rs:254:31:254:31 | 4 | | -| test.rs:254:9:254:31 | ... + ... | test.rs:253:62:255:5 | BlockExpr | | -| test.rs:254:31:254:31 | 4 | test.rs:254:9:254:31 | ... + ... | | -| test.rs:257:5:262:5 | enter test_question_mark_operator_2 | test.rs:257:38:257:38 | b | | -| test.rs:257:5:262:5 | exit test_question_mark_operator_2 (normal) | test.rs:257:5:262:5 | exit test_question_mark_operator_2 | | -| test.rs:257:38:257:38 | b | test.rs:257:38:257:52 | Param | match | -| test.rs:257:38:257:52 | Param | test.rs:258:15:258:15 | b | | -| test.rs:257:71:262:5 | BlockExpr | test.rs:257:5:262:5 | exit test_question_mark_operator_2 (normal) | | -| test.rs:258:9:261:9 | MatchExpr | test.rs:257:71:262:5 | BlockExpr | | -| test.rs:258:15:258:15 | b | test.rs:258:15:258:16 | TryExpr | | -| test.rs:258:15:258:16 | TryExpr | test.rs:257:5:262:5 | exit test_question_mark_operator_2 (normal) | return | -| test.rs:258:15:258:16 | TryExpr | test.rs:259:13:259:16 | LiteralPat | | -| test.rs:259:13:259:16 | LiteralPat | test.rs:259:21:259:24 | PathExpr | match | -| test.rs:259:13:259:16 | LiteralPat | test.rs:260:13:260:17 | LiteralPat | no-match | -| test.rs:259:21:259:24 | PathExpr | test.rs:259:26:259:30 | false | | -| test.rs:259:21:259:31 | CallExpr | test.rs:258:9:261:9 | MatchExpr | | -| test.rs:259:26:259:30 | false | test.rs:259:21:259:31 | CallExpr | | -| test.rs:260:13:260:17 | LiteralPat | test.rs:260:22:260:25 | PathExpr | match | -| test.rs:260:22:260:25 | PathExpr | test.rs:260:27:260:30 | true | | -| test.rs:260:22:260:31 | CallExpr | test.rs:258:9:261:9 | MatchExpr | | -| test.rs:260:27:260:30 | true | test.rs:260:22:260:31 | CallExpr | | -| test.rs:267:5:273:5 | enter test_match | test.rs:267:19:267:29 | maybe_digit | | -| test.rs:267:5:273:5 | exit test_match (normal) | test.rs:267:5:273:5 | exit test_match | | -| test.rs:267:19:267:29 | maybe_digit | test.rs:267:19:267:42 | Param | match | -| test.rs:267:19:267:42 | Param | test.rs:268:15:268:25 | maybe_digit | | -| test.rs:267:52:273:5 | BlockExpr | test.rs:267:5:273:5 | exit test_match (normal) | | -| test.rs:268:9:272:9 | MatchExpr | test.rs:267:52:273:5 | BlockExpr | | -| test.rs:268:15:268:25 | maybe_digit | test.rs:269:13:269:27 | TupleStructPat | | -| test.rs:269:13:269:27 | TupleStructPat | test.rs:269:26:269:26 | x | match | -| test.rs:269:13:269:27 | TupleStructPat | test.rs:270:13:270:27 | TupleStructPat | no-match | -| test.rs:269:26:269:26 | x | test.rs:269:32:269:32 | x | match | -| test.rs:269:32:269:32 | x | test.rs:269:36:269:37 | 10 | | -| test.rs:269:32:269:37 | ... < ... | test.rs:269:42:269:42 | x | true | -| test.rs:269:32:269:37 | ... < ... | test.rs:270:13:270:27 | TupleStructPat | false | -| test.rs:269:36:269:37 | 10 | test.rs:269:32:269:37 | ... < ... | | -| test.rs:269:42:269:42 | x | test.rs:269:46:269:46 | 5 | | -| test.rs:269:42:269:46 | ... + ... | test.rs:268:9:272:9 | MatchExpr | | -| test.rs:269:46:269:46 | 5 | test.rs:269:42:269:46 | ... + ... | | -| test.rs:270:13:270:27 | TupleStructPat | test.rs:270:26:270:26 | x | match | -| test.rs:270:13:270:27 | TupleStructPat | test.rs:271:13:271:24 | PathPat | no-match | -| test.rs:270:26:270:26 | x | test.rs:270:32:270:32 | x | match | -| test.rs:270:32:270:32 | x | test.rs:268:9:272:9 | MatchExpr | | -| test.rs:271:13:271:24 | PathPat | test.rs:271:29:271:29 | 5 | match | -| test.rs:271:29:271:29 | 5 | test.rs:268:9:272:9 | MatchExpr | | -| test.rs:275:5:284:5 | enter test_match_with_return_in_scrutinee | test.rs:275:44:275:54 | maybe_digit | | -| test.rs:275:5:284:5 | exit test_match_with_return_in_scrutinee (normal) | test.rs:275:5:284:5 | exit test_match_with_return_in_scrutinee | | -| test.rs:275:44:275:54 | maybe_digit | test.rs:275:44:275:67 | Param | match | -| test.rs:275:44:275:67 | Param | test.rs:276:19:276:29 | maybe_digit | | -| test.rs:275:77:284:5 | BlockExpr | test.rs:275:5:284:5 | exit test_match_with_return_in_scrutinee (normal) | | -| test.rs:276:9:283:9 | MatchExpr | test.rs:275:77:284:5 | BlockExpr | | -| test.rs:276:16:280:9 | IfExpr | test.rs:281:13:281:27 | TupleStructPat | | -| test.rs:276:19:276:29 | maybe_digit | test.rs:276:34:276:37 | PathExpr | | -| test.rs:276:19:276:40 | ... == ... | test.rs:277:13:277:21 | ExprStmt | true | -| test.rs:276:19:276:40 | ... == ... | test.rs:279:13:279:23 | maybe_digit | false | -| test.rs:276:34:276:37 | PathExpr | test.rs:276:39:276:39 | 3 | | -| test.rs:276:34:276:40 | CallExpr | test.rs:276:19:276:40 | ... == ... | | -| test.rs:276:39:276:39 | 3 | test.rs:276:34:276:40 | CallExpr | | -| test.rs:277:13:277:20 | ReturnExpr | test.rs:275:5:284:5 | exit test_match_with_return_in_scrutinee (normal) | return | -| test.rs:277:13:277:21 | ExprStmt | test.rs:277:20:277:20 | 3 | | -| test.rs:277:20:277:20 | 3 | test.rs:277:13:277:20 | ReturnExpr | | -| test.rs:278:16:280:9 | BlockExpr | test.rs:276:16:280:9 | IfExpr | | -| test.rs:279:13:279:23 | maybe_digit | test.rs:278:16:280:9 | BlockExpr | | -| test.rs:281:13:281:27 | TupleStructPat | test.rs:281:26:281:26 | x | match | -| test.rs:281:13:281:27 | TupleStructPat | test.rs:282:13:282:24 | PathPat | no-match | -| test.rs:281:26:281:26 | x | test.rs:281:32:281:32 | x | match | -| test.rs:281:32:281:32 | x | test.rs:281:36:281:36 | 5 | | -| test.rs:281:32:281:36 | ... + ... | test.rs:276:9:283:9 | MatchExpr | | -| test.rs:281:36:281:36 | 5 | test.rs:281:32:281:36 | ... + ... | | -| test.rs:282:13:282:24 | PathPat | test.rs:282:29:282:29 | 5 | match | -| test.rs:282:29:282:29 | 5 | test.rs:276:9:283:9 | MatchExpr | | -| test.rs:289:5:292:5 | enter empty_tuple_pattern | test.rs:289:28:289:31 | unit | | -| test.rs:289:5:292:5 | exit empty_tuple_pattern (normal) | test.rs:289:5:292:5 | exit empty_tuple_pattern | | -| test.rs:289:28:289:31 | unit | test.rs:289:28:289:35 | Param | match | -| test.rs:289:28:289:35 | Param | test.rs:290:9:290:22 | LetStmt | | -| test.rs:290:9:290:22 | LetStmt | test.rs:290:18:290:21 | unit | | -| test.rs:290:13:290:14 | TuplePat | test.rs:291:9:291:15 | ExprStmt | match | -| test.rs:290:18:290:21 | unit | test.rs:290:13:290:14 | TuplePat | | -| test.rs:291:9:291:14 | ReturnExpr | test.rs:289:5:292:5 | exit empty_tuple_pattern (normal) | return | -| test.rs:291:9:291:15 | ExprStmt | test.rs:291:9:291:14 | ReturnExpr | | -| test.rs:296:5:300:5 | enter empty_struct_pattern | test.rs:296:29:296:30 | st | | -| test.rs:296:5:300:5 | exit empty_struct_pattern (normal) | test.rs:296:5:300:5 | exit empty_struct_pattern | | -| test.rs:296:29:296:30 | st | test.rs:296:29:296:40 | Param | match | -| test.rs:296:29:296:40 | Param | test.rs:297:15:297:16 | st | | -| test.rs:296:50:300:5 | BlockExpr | test.rs:296:5:300:5 | exit empty_struct_pattern (normal) | | -| test.rs:297:9:299:9 | MatchExpr | test.rs:296:50:300:5 | BlockExpr | | -| test.rs:297:15:297:16 | st | test.rs:298:13:298:23 | RecordPat | | -| test.rs:298:13:298:23 | RecordPat | test.rs:298:28:298:28 | 1 | match | -| test.rs:298:28:298:28 | 1 | test.rs:297:9:299:9 | MatchExpr | | -| test.rs:304:5:309:5 | enter test_infinite_loop | test.rs:305:9:307:9 | ExprStmt | | -| test.rs:305:9:307:9 | ExprStmt | test.rs:306:13:306:13 | 1 | | -| test.rs:305:14:307:9 | BlockExpr | test.rs:306:13:306:13 | 1 | | -| test.rs:306:13:306:13 | 1 | test.rs:305:14:307:9 | BlockExpr | | -| test.rs:311:5:314:5 | enter test_let_match | test.rs:311:23:311:23 | a | | -| test.rs:311:5:314:5 | exit test_let_match (normal) | test.rs:311:5:314:5 | exit test_let_match | | -| test.rs:311:23:311:23 | a | test.rs:311:23:311:36 | Param | match | -| test.rs:311:23:311:36 | Param | test.rs:312:9:312:49 | LetStmt | | -| test.rs:311:39:314:5 | BlockExpr | test.rs:311:5:314:5 | exit test_let_match (normal) | | -| test.rs:312:9:312:49 | LetStmt | test.rs:312:23:312:23 | a | | -| test.rs:312:13:312:19 | TupleStructPat | test.rs:312:18:312:18 | n | match | -| test.rs:312:13:312:19 | TupleStructPat | test.rs:312:32:312:46 | "Expected some" | no-match | -| test.rs:312:18:312:18 | n | test.rs:313:9:313:9 | n | match | -| test.rs:312:23:312:23 | a | test.rs:312:13:312:19 | TupleStructPat | | -| test.rs:312:32:312:46 | "Expected some" | test.rs:312:30:312:48 | BlockExpr | | -| test.rs:313:9:313:9 | n | test.rs:311:39:314:5 | BlockExpr | | -| test.rs:317:1:322:1 | enter dead_code | test.rs:318:5:320:5 | ExprStmt | | -| test.rs:317:1:322:1 | exit dead_code (normal) | test.rs:317:1:322:1 | exit dead_code | | -| test.rs:318:5:320:5 | ExprStmt | test.rs:318:9:318:12 | true | | -| test.rs:318:9:318:12 | true | test.rs:319:9:319:17 | ExprStmt | true | -| test.rs:319:9:319:16 | ReturnExpr | test.rs:317:1:322:1 | exit dead_code (normal) | return | -| test.rs:319:9:319:17 | ExprStmt | test.rs:319:16:319:16 | 0 | | -| test.rs:319:16:319:16 | 0 | test.rs:319:9:319:16 | ReturnExpr | | -| test.rs:324:1:337:1 | enter labelled_block1 | test.rs:325:5:336:6 | LetStmt | | -| test.rs:324:1:337:1 | exit labelled_block1 (normal) | test.rs:324:1:337:1 | exit labelled_block1 | | -| test.rs:324:29:337:1 | BlockExpr | test.rs:324:1:337:1 | exit labelled_block1 (normal) | | -| test.rs:325:5:336:6 | LetStmt | test.rs:326:9:326:19 | ExprStmt | | -| test.rs:325:9:325:14 | result | test.rs:324:29:337:1 | BlockExpr | match | -| test.rs:325:18:336:5 | BlockExpr | test.rs:325:9:325:14 | result | | -| test.rs:326:9:326:16 | PathExpr | test.rs:326:9:326:18 | CallExpr | | -| test.rs:326:9:326:18 | CallExpr | test.rs:327:9:329:9 | ExprStmt | | -| test.rs:326:9:326:19 | ExprStmt | test.rs:326:9:326:16 | PathExpr | | -| test.rs:327:9:329:9 | ExprStmt | test.rs:327:12:327:28 | PathExpr | | -| test.rs:327:9:329:9 | IfExpr | test.rs:330:9:330:24 | ExprStmt | | -| test.rs:327:12:327:28 | PathExpr | test.rs:327:12:327:30 | CallExpr | | -| test.rs:327:12:327:30 | CallExpr | test.rs:327:9:329:9 | IfExpr | false | -| test.rs:327:12:327:30 | CallExpr | test.rs:328:13:328:27 | ExprStmt | true | -| test.rs:328:13:328:26 | BreakExpr | test.rs:325:18:336:5 | BlockExpr | break | -| test.rs:328:13:328:27 | ExprStmt | test.rs:328:26:328:26 | 1 | | -| test.rs:328:26:328:26 | 1 | test.rs:328:13:328:26 | BreakExpr | | -| test.rs:330:9:330:21 | PathExpr | test.rs:330:9:330:23 | CallExpr | | -| test.rs:330:9:330:23 | CallExpr | test.rs:331:9:333:9 | ExprStmt | | -| test.rs:330:9:330:24 | ExprStmt | test.rs:330:9:330:21 | PathExpr | | -| test.rs:331:9:333:9 | ExprStmt | test.rs:331:12:331:28 | PathExpr | | -| test.rs:331:9:333:9 | IfExpr | test.rs:334:9:334:24 | ExprStmt | | -| test.rs:331:12:331:28 | PathExpr | test.rs:331:12:331:30 | CallExpr | | -| test.rs:331:12:331:30 | CallExpr | test.rs:331:9:333:9 | IfExpr | false | -| test.rs:331:12:331:30 | CallExpr | test.rs:332:13:332:27 | ExprStmt | true | -| test.rs:332:13:332:26 | BreakExpr | test.rs:325:18:336:5 | BlockExpr | break | -| test.rs:332:13:332:27 | ExprStmt | test.rs:332:26:332:26 | 2 | | -| test.rs:332:26:332:26 | 2 | test.rs:332:13:332:26 | BreakExpr | | -| test.rs:334:9:334:21 | PathExpr | test.rs:334:9:334:23 | CallExpr | | -| test.rs:334:9:334:23 | CallExpr | test.rs:335:9:335:9 | 3 | | -| test.rs:334:9:334:24 | ExprStmt | test.rs:334:9:334:21 | PathExpr | | -| test.rs:335:9:335:9 | 3 | test.rs:325:18:336:5 | BlockExpr | | -| test.rs:339:1:347:1 | enter labelled_block2 | test.rs:340:5:346:6 | LetStmt | | -| test.rs:339:1:347:1 | exit labelled_block2 (normal) | test.rs:339:1:347:1 | exit labelled_block2 | | -| test.rs:339:29:347:1 | BlockExpr | test.rs:339:1:347:1 | exit labelled_block2 (normal) | | -| test.rs:340:5:346:6 | LetStmt | test.rs:341:9:341:34 | LetStmt | | -| test.rs:340:9:340:14 | result | test.rs:339:29:347:1 | BlockExpr | match | -| test.rs:340:18:346:5 | BlockExpr | test.rs:340:9:340:14 | result | | -| test.rs:341:9:341:34 | LetStmt | test.rs:341:30:341:33 | PathExpr | | -| test.rs:341:13:341:13 | x | test.rs:342:9:344:10 | LetStmt | match | -| test.rs:341:30:341:33 | PathExpr | test.rs:341:13:341:13 | x | | -| test.rs:342:9:344:10 | LetStmt | test.rs:342:23:342:23 | x | | -| test.rs:342:13:342:19 | TupleStructPat | test.rs:342:18:342:18 | y | match | -| test.rs:342:13:342:19 | TupleStructPat | test.rs:343:13:343:27 | ExprStmt | no-match | -| test.rs:342:18:342:18 | y | test.rs:345:9:345:9 | x | match | -| test.rs:342:23:342:23 | x | test.rs:342:13:342:19 | TupleStructPat | | -| test.rs:343:13:343:26 | BreakExpr | test.rs:340:18:346:5 | BlockExpr | break | -| test.rs:343:13:343:27 | ExprStmt | test.rs:343:26:343:26 | 1 | | -| test.rs:343:26:343:26 | 1 | test.rs:343:13:343:26 | BreakExpr | | -| test.rs:345:9:345:9 | x | test.rs:340:18:346:5 | BlockExpr | | -| test.rs:349:1:355:1 | enter test_nested_function | test.rs:350:5:350:18 | LetStmt | | -| test.rs:349:1:355:1 | exit test_nested_function (normal) | test.rs:349:1:355:1 | exit test_nested_function | | -| test.rs:349:27:355:1 | BlockExpr | test.rs:349:1:355:1 | exit test_nested_function (normal) | | -| test.rs:350:5:350:18 | LetStmt | test.rs:350:17:350:17 | 0 | | -| test.rs:350:9:350:13 | x | test.rs:351:5:353:5 | nested | match | -| test.rs:350:17:350:17 | 0 | test.rs:350:9:350:13 | x | | -| test.rs:351:5:353:5 | enter nested | test.rs:351:15:351:15 | x | | -| test.rs:351:5:353:5 | exit nested (normal) | test.rs:351:5:353:5 | exit nested | | -| test.rs:351:5:353:5 | nested | test.rs:354:5:354:19 | ExprStmt | | -| test.rs:351:15:351:15 | x | test.rs:351:15:351:25 | Param | match | -| test.rs:351:15:351:25 | Param | test.rs:352:9:352:16 | ExprStmt | | -| test.rs:351:28:353:5 | BlockExpr | test.rs:351:5:353:5 | exit nested (normal) | | -| test.rs:352:9:352:10 | * ... | test.rs:352:15:352:15 | 1 | | -| test.rs:352:9:352:15 | ... += ... | test.rs:351:28:353:5 | BlockExpr | | -| test.rs:352:9:352:16 | ExprStmt | test.rs:352:10:352:10 | x | | -| test.rs:352:10:352:10 | x | test.rs:352:9:352:10 | * ... | | -| test.rs:352:15:352:15 | 1 | test.rs:352:9:352:15 | ... += ... | | -| test.rs:354:5:354:10 | PathExpr | test.rs:354:17:354:17 | x | | -| test.rs:354:5:354:18 | CallExpr | test.rs:349:27:355:1 | BlockExpr | | -| test.rs:354:5:354:19 | ExprStmt | test.rs:354:5:354:10 | PathExpr | | -| test.rs:354:12:354:17 | RefExpr | test.rs:354:5:354:18 | CallExpr | | -| test.rs:354:17:354:17 | x | test.rs:354:12:354:17 | RefExpr | | +| test.rs:167:5:174:5 | enter test_if_assignment | test.rs:167:27:167:27 | a | | +| test.rs:167:5:174:5 | exit test_if_assignment (normal) | test.rs:167:5:174:5 | exit test_if_assignment | | +| test.rs:167:27:167:27 | a | test.rs:167:27:167:32 | Param | match | +| test.rs:167:27:167:32 | Param | test.rs:168:9:168:26 | LetStmt | | +| test.rs:167:42:174:5 | BlockExpr | test.rs:167:5:174:5 | exit test_if_assignment (normal) | | +| test.rs:168:9:168:26 | LetStmt | test.rs:168:21:168:25 | false | | +| test.rs:168:13:168:17 | x | test.rs:169:12:169:12 | x | match | +| test.rs:168:21:168:25 | false | test.rs:168:13:168:17 | x | | +| test.rs:169:9:173:9 | IfExpr | test.rs:167:42:174:5 | BlockExpr | | +| test.rs:169:12:169:12 | x | test.rs:169:16:169:19 | true | | +| test.rs:169:12:169:19 | ... = ... | test.rs:170:13:170:13 | 1 | true | +| test.rs:169:12:169:19 | ... = ... | test.rs:172:13:172:13 | 0 | false | +| test.rs:169:16:169:19 | true | test.rs:169:12:169:19 | ... = ... | | +| test.rs:169:21:171:9 | BlockExpr | test.rs:169:9:173:9 | IfExpr | | +| test.rs:170:13:170:13 | 1 | test.rs:169:21:171:9 | BlockExpr | | +| test.rs:171:16:173:9 | BlockExpr | test.rs:169:9:173:9 | IfExpr | | +| test.rs:172:13:172:13 | 0 | test.rs:171:16:173:9 | BlockExpr | | +| test.rs:176:5:187:5 | enter test_if_loop1 | test.rs:176:22:176:22 | a | | +| test.rs:176:5:187:5 | exit test_if_loop1 (normal) | test.rs:176:5:187:5 | exit test_if_loop1 | | +| test.rs:176:22:176:22 | a | test.rs:176:22:176:27 | Param | match | +| test.rs:176:22:176:27 | Param | test.rs:178:13:180:14 | ExprStmt | | +| test.rs:176:37:187:5 | BlockExpr | test.rs:176:5:187:5 | exit test_if_loop1 (normal) | | +| test.rs:177:9:186:9 | IfExpr | test.rs:176:37:187:5 | BlockExpr | | +| test.rs:177:13:182:9 | [boolean(false)] LoopExpr | test.rs:185:13:185:13 | 0 | false | +| test.rs:177:13:182:9 | [boolean(true)] LoopExpr | test.rs:183:13:183:13 | 1 | true | +| test.rs:177:18:182:9 | BlockExpr | test.rs:178:13:180:14 | ExprStmt | | +| test.rs:178:13:180:13 | IfExpr | test.rs:181:13:181:19 | ExprStmt | | +| test.rs:178:13:180:14 | ExprStmt | test.rs:178:16:178:16 | a | | +| test.rs:178:16:178:16 | a | test.rs:178:20:178:20 | 0 | | +| test.rs:178:16:178:20 | ... > ... | test.rs:178:13:180:13 | IfExpr | false | +| test.rs:178:16:178:20 | ... > ... | test.rs:179:17:179:29 | ExprStmt | true | +| test.rs:178:20:178:20 | 0 | test.rs:178:16:178:20 | ... > ... | | +| test.rs:179:17:179:28 | [boolean(false)] BreakExpr | test.rs:177:13:182:9 | [boolean(false)] LoopExpr | break | +| test.rs:179:17:179:28 | [boolean(true)] BreakExpr | test.rs:177:13:182:9 | [boolean(true)] LoopExpr | break | +| test.rs:179:17:179:29 | ExprStmt | test.rs:179:23:179:23 | a | | +| test.rs:179:23:179:23 | a | test.rs:179:27:179:28 | 10 | | +| test.rs:179:23:179:28 | ... > ... | test.rs:179:17:179:28 | [boolean(false)] BreakExpr | false | +| test.rs:179:23:179:28 | ... > ... | test.rs:179:17:179:28 | [boolean(true)] BreakExpr | true | +| test.rs:179:27:179:28 | 10 | test.rs:179:23:179:28 | ... > ... | | +| test.rs:181:13:181:13 | a | test.rs:181:17:181:18 | 10 | | +| test.rs:181:13:181:18 | ... < ... | test.rs:177:18:182:9 | BlockExpr | | +| test.rs:181:13:181:19 | ExprStmt | test.rs:181:13:181:13 | a | | +| test.rs:181:17:181:18 | 10 | test.rs:181:13:181:18 | ... < ... | | +| test.rs:182:12:184:9 | BlockExpr | test.rs:177:9:186:9 | IfExpr | | +| test.rs:183:13:183:13 | 1 | test.rs:182:12:184:9 | BlockExpr | | +| test.rs:184:16:186:9 | BlockExpr | test.rs:177:9:186:9 | IfExpr | | +| test.rs:185:13:185:13 | 0 | test.rs:184:16:186:9 | BlockExpr | | +| test.rs:189:5:200:5 | enter test_if_loop2 | test.rs:189:22:189:22 | a | | +| test.rs:189:5:200:5 | exit test_if_loop2 (normal) | test.rs:189:5:200:5 | exit test_if_loop2 | | +| test.rs:189:22:189:22 | a | test.rs:189:22:189:27 | Param | match | +| test.rs:189:22:189:27 | Param | test.rs:191:13:193:14 | ExprStmt | | +| test.rs:189:37:200:5 | BlockExpr | test.rs:189:5:200:5 | exit test_if_loop2 (normal) | | +| test.rs:190:9:199:9 | IfExpr | test.rs:189:37:200:5 | BlockExpr | | +| test.rs:190:13:195:9 | [boolean(false)] LoopExpr | test.rs:198:13:198:13 | 0 | false | +| test.rs:190:13:195:9 | [boolean(true)] LoopExpr | test.rs:196:13:196:13 | 1 | true | +| test.rs:190:26:195:9 | BlockExpr | test.rs:191:13:193:14 | ExprStmt | | +| test.rs:191:13:193:13 | IfExpr | test.rs:194:13:194:19 | ExprStmt | | +| test.rs:191:13:193:14 | ExprStmt | test.rs:191:16:191:16 | a | | +| test.rs:191:16:191:16 | a | test.rs:191:20:191:20 | 0 | | +| test.rs:191:16:191:20 | ... > ... | test.rs:191:13:193:13 | IfExpr | false | +| test.rs:191:16:191:20 | ... > ... | test.rs:192:17:192:36 | ExprStmt | true | +| test.rs:191:20:191:20 | 0 | test.rs:191:16:191:20 | ... > ... | | +| test.rs:192:17:192:35 | [boolean(false)] BreakExpr | test.rs:190:13:195:9 | [boolean(false)] LoopExpr | break | +| test.rs:192:17:192:35 | [boolean(true)] BreakExpr | test.rs:190:13:195:9 | [boolean(true)] LoopExpr | break | +| test.rs:192:17:192:36 | ExprStmt | test.rs:192:30:192:30 | a | | +| test.rs:192:30:192:30 | a | test.rs:192:34:192:35 | 10 | | +| test.rs:192:30:192:35 | ... > ... | test.rs:192:17:192:35 | [boolean(false)] BreakExpr | false | +| test.rs:192:30:192:35 | ... > ... | test.rs:192:17:192:35 | [boolean(true)] BreakExpr | true | +| test.rs:192:34:192:35 | 10 | test.rs:192:30:192:35 | ... > ... | | +| test.rs:194:13:194:13 | a | test.rs:194:17:194:18 | 10 | | +| test.rs:194:13:194:18 | ... < ... | test.rs:190:26:195:9 | BlockExpr | | +| test.rs:194:13:194:19 | ExprStmt | test.rs:194:13:194:13 | a | | +| test.rs:194:17:194:18 | 10 | test.rs:194:13:194:18 | ... < ... | | +| test.rs:195:12:197:9 | BlockExpr | test.rs:190:9:199:9 | IfExpr | | +| test.rs:196:13:196:13 | 1 | test.rs:195:12:197:9 | BlockExpr | | +| test.rs:197:16:199:9 | BlockExpr | test.rs:190:9:199:9 | IfExpr | | +| test.rs:198:13:198:13 | 0 | test.rs:197:16:199:9 | BlockExpr | | +| test.rs:202:5:210:5 | enter test_labelled_block | test.rs:202:28:202:28 | a | | +| test.rs:202:5:210:5 | exit test_labelled_block (normal) | test.rs:202:5:210:5 | exit test_labelled_block | | +| test.rs:202:28:202:28 | a | test.rs:202:28:202:33 | Param | match | +| test.rs:202:28:202:33 | Param | test.rs:204:13:204:31 | ExprStmt | | +| test.rs:202:43:210:5 | BlockExpr | test.rs:202:5:210:5 | exit test_labelled_block (normal) | | +| test.rs:203:9:209:9 | IfExpr | test.rs:202:43:210:5 | BlockExpr | | +| test.rs:203:13:205:9 | [boolean(false)] BlockExpr | test.rs:208:13:208:13 | 0 | false | +| test.rs:203:13:205:9 | [boolean(true)] BlockExpr | test.rs:206:13:206:13 | 1 | true | +| test.rs:204:13:204:30 | [boolean(false)] BreakExpr | test.rs:203:13:205:9 | [boolean(false)] BlockExpr | break | +| test.rs:204:13:204:30 | [boolean(true)] BreakExpr | test.rs:203:13:205:9 | [boolean(true)] BlockExpr | break | +| test.rs:204:13:204:31 | ExprStmt | test.rs:204:26:204:26 | a | | +| test.rs:204:26:204:26 | a | test.rs:204:30:204:30 | 0 | | +| test.rs:204:26:204:30 | ... > ... | test.rs:204:13:204:30 | [boolean(false)] BreakExpr | false | +| test.rs:204:26:204:30 | ... > ... | test.rs:204:13:204:30 | [boolean(true)] BreakExpr | true | +| test.rs:204:30:204:30 | 0 | test.rs:204:26:204:30 | ... > ... | | +| test.rs:205:12:207:9 | BlockExpr | test.rs:203:9:209:9 | IfExpr | | +| test.rs:206:13:206:13 | 1 | test.rs:205:12:207:9 | BlockExpr | | +| test.rs:207:16:209:9 | BlockExpr | test.rs:203:9:209:9 | IfExpr | | +| test.rs:208:13:208:13 | 0 | test.rs:207:16:209:9 | BlockExpr | | +| test.rs:215:5:218:5 | enter test_and_operator | test.rs:215:26:215:26 | a | | +| test.rs:215:5:218:5 | exit test_and_operator (normal) | test.rs:215:5:218:5 | exit test_and_operator | | +| test.rs:215:26:215:26 | a | test.rs:215:26:215:32 | Param | match | +| test.rs:215:26:215:32 | Param | test.rs:215:35:215:35 | b | | +| test.rs:215:35:215:35 | b | test.rs:215:35:215:41 | Param | match | +| test.rs:215:35:215:41 | Param | test.rs:215:44:215:44 | c | | +| test.rs:215:44:215:44 | c | test.rs:215:44:215:50 | Param | match | +| test.rs:215:44:215:50 | Param | test.rs:216:9:216:28 | LetStmt | | +| test.rs:215:61:218:5 | BlockExpr | test.rs:215:5:218:5 | exit test_and_operator (normal) | | +| test.rs:216:9:216:28 | LetStmt | test.rs:216:17:216:17 | a | | +| test.rs:216:13:216:13 | d | test.rs:217:9:217:9 | d | match | +| test.rs:216:17:216:17 | a | test.rs:216:17:216:22 | [boolean(false)] ... && ... | false | +| test.rs:216:17:216:17 | a | test.rs:216:22:216:22 | b | true | +| test.rs:216:17:216:22 | [boolean(false)] ... && ... | test.rs:216:17:216:27 | ... && ... | false | +| test.rs:216:17:216:22 | [boolean(true)] ... && ... | test.rs:216:27:216:27 | c | true | +| test.rs:216:17:216:27 | ... && ... | test.rs:216:13:216:13 | d | | +| test.rs:216:22:216:22 | b | test.rs:216:17:216:22 | [boolean(false)] ... && ... | false | +| test.rs:216:22:216:22 | b | test.rs:216:17:216:22 | [boolean(true)] ... && ... | true | +| test.rs:216:27:216:27 | c | test.rs:216:17:216:27 | ... && ... | | +| test.rs:217:9:217:9 | d | test.rs:215:61:218:5 | BlockExpr | | +| test.rs:220:5:223:5 | enter test_or_operator | test.rs:220:25:220:25 | a | | +| test.rs:220:5:223:5 | exit test_or_operator (normal) | test.rs:220:5:223:5 | exit test_or_operator | | +| test.rs:220:25:220:25 | a | test.rs:220:25:220:31 | Param | match | +| test.rs:220:25:220:31 | Param | test.rs:220:34:220:34 | b | | +| test.rs:220:34:220:34 | b | test.rs:220:34:220:40 | Param | match | +| test.rs:220:34:220:40 | Param | test.rs:220:43:220:43 | c | | +| test.rs:220:43:220:43 | c | test.rs:220:43:220:49 | Param | match | +| test.rs:220:43:220:49 | Param | test.rs:221:9:221:28 | LetStmt | | +| test.rs:220:60:223:5 | BlockExpr | test.rs:220:5:223:5 | exit test_or_operator (normal) | | +| test.rs:221:9:221:28 | LetStmt | test.rs:221:17:221:17 | a | | +| test.rs:221:13:221:13 | d | test.rs:222:9:222:9 | d | match | +| test.rs:221:17:221:17 | a | test.rs:221:17:221:22 | [boolean(true)] ... \|\| ... | true | +| test.rs:221:17:221:17 | a | test.rs:221:22:221:22 | b | false | +| test.rs:221:17:221:22 | [boolean(false)] ... \|\| ... | test.rs:221:27:221:27 | c | false | +| test.rs:221:17:221:22 | [boolean(true)] ... \|\| ... | test.rs:221:17:221:27 | ... \|\| ... | true | +| test.rs:221:17:221:27 | ... \|\| ... | test.rs:221:13:221:13 | d | | +| test.rs:221:22:221:22 | b | test.rs:221:17:221:22 | [boolean(false)] ... \|\| ... | false | +| test.rs:221:22:221:22 | b | test.rs:221:17:221:22 | [boolean(true)] ... \|\| ... | true | +| test.rs:221:27:221:27 | c | test.rs:221:17:221:27 | ... \|\| ... | | +| test.rs:222:9:222:9 | d | test.rs:220:60:223:5 | BlockExpr | | +| test.rs:225:5:228:5 | enter test_or_operator_2 | test.rs:225:27:225:27 | a | | +| test.rs:225:5:228:5 | exit test_or_operator_2 (normal) | test.rs:225:5:228:5 | exit test_or_operator_2 | | +| test.rs:225:27:225:27 | a | test.rs:225:27:225:33 | Param | match | +| test.rs:225:27:225:33 | Param | test.rs:225:36:225:36 | b | | +| test.rs:225:36:225:36 | b | test.rs:225:36:225:41 | Param | match | +| test.rs:225:36:225:41 | Param | test.rs:225:44:225:44 | c | | +| test.rs:225:44:225:44 | c | test.rs:225:44:225:50 | Param | match | +| test.rs:225:44:225:50 | Param | test.rs:226:9:226:36 | LetStmt | | +| test.rs:225:61:228:5 | BlockExpr | test.rs:225:5:228:5 | exit test_or_operator_2 (normal) | | +| test.rs:226:9:226:36 | LetStmt | test.rs:226:17:226:17 | a | | +| test.rs:226:13:226:13 | d | test.rs:227:9:227:9 | d | match | +| test.rs:226:17:226:17 | a | test.rs:226:17:226:30 | [boolean(true)] ... \|\| ... | true | +| test.rs:226:17:226:17 | a | test.rs:226:23:226:23 | b | false | +| test.rs:226:17:226:30 | [boolean(false)] ... \|\| ... | test.rs:226:35:226:35 | c | false | +| test.rs:226:17:226:30 | [boolean(true)] ... \|\| ... | test.rs:226:17:226:35 | ... \|\| ... | true | +| test.rs:226:17:226:35 | ... \|\| ... | test.rs:226:13:226:13 | d | | +| test.rs:226:23:226:23 | b | test.rs:226:28:226:29 | 28 | | +| test.rs:226:23:226:29 | ... == ... | test.rs:226:17:226:30 | [boolean(false)] ... \|\| ... | false | +| test.rs:226:23:226:29 | ... == ... | test.rs:226:17:226:30 | [boolean(true)] ... \|\| ... | true | +| test.rs:226:28:226:29 | 28 | test.rs:226:23:226:29 | ... == ... | | +| test.rs:226:35:226:35 | c | test.rs:226:17:226:35 | ... \|\| ... | | +| test.rs:227:9:227:9 | d | test.rs:225:61:228:5 | BlockExpr | | +| test.rs:230:5:233:5 | enter test_not_operator | test.rs:230:26:230:26 | a | | +| test.rs:230:5:233:5 | exit test_not_operator (normal) | test.rs:230:5:233:5 | exit test_not_operator | | +| test.rs:230:26:230:26 | a | test.rs:230:26:230:32 | Param | match | +| test.rs:230:26:230:32 | Param | test.rs:231:9:231:19 | LetStmt | | +| test.rs:230:43:233:5 | BlockExpr | test.rs:230:5:233:5 | exit test_not_operator (normal) | | +| test.rs:231:9:231:19 | LetStmt | test.rs:231:18:231:18 | a | | +| test.rs:231:13:231:13 | d | test.rs:232:9:232:9 | d | match | +| test.rs:231:17:231:18 | ! ... | test.rs:231:13:231:13 | d | | +| test.rs:231:18:231:18 | a | test.rs:231:17:231:18 | ! ... | | +| test.rs:232:9:232:9 | d | test.rs:230:43:233:5 | BlockExpr | | +| test.rs:235:5:241:5 | enter test_if_and_operator | test.rs:235:29:235:29 | a | | +| test.rs:235:5:241:5 | exit test_if_and_operator (normal) | test.rs:235:5:241:5 | exit test_if_and_operator | | +| test.rs:235:29:235:29 | a | test.rs:235:29:235:35 | Param | match | +| test.rs:235:29:235:35 | Param | test.rs:235:38:235:38 | b | | +| test.rs:235:38:235:38 | b | test.rs:235:38:235:43 | Param | match | +| test.rs:235:38:235:43 | Param | test.rs:235:46:235:46 | c | | +| test.rs:235:46:235:46 | c | test.rs:235:46:235:52 | Param | match | +| test.rs:235:46:235:52 | Param | test.rs:236:12:236:12 | a | | +| test.rs:235:63:241:5 | BlockExpr | test.rs:235:5:241:5 | exit test_if_and_operator (normal) | | +| test.rs:236:9:240:9 | IfExpr | test.rs:235:63:241:5 | BlockExpr | | +| test.rs:236:12:236:12 | a | test.rs:236:12:236:17 | [boolean(false)] ... && ... | false | +| test.rs:236:12:236:12 | a | test.rs:236:17:236:17 | b | true | +| test.rs:236:12:236:17 | [boolean(false)] ... && ... | test.rs:236:12:236:22 | [boolean(false)] ... && ... | false | +| test.rs:236:12:236:17 | [boolean(true)] ... && ... | test.rs:236:22:236:22 | c | true | +| test.rs:236:12:236:22 | [boolean(false)] ... && ... | test.rs:239:13:239:17 | false | false | +| test.rs:236:12:236:22 | [boolean(true)] ... && ... | test.rs:237:13:237:16 | true | true | +| test.rs:236:17:236:17 | b | test.rs:236:12:236:17 | [boolean(false)] ... && ... | false | +| test.rs:236:17:236:17 | b | test.rs:236:12:236:17 | [boolean(true)] ... && ... | true | +| test.rs:236:22:236:22 | c | test.rs:236:12:236:22 | [boolean(false)] ... && ... | false | +| test.rs:236:22:236:22 | c | test.rs:236:12:236:22 | [boolean(true)] ... && ... | true | +| test.rs:236:24:238:9 | BlockExpr | test.rs:236:9:240:9 | IfExpr | | +| test.rs:237:13:237:16 | true | test.rs:236:24:238:9 | BlockExpr | | +| test.rs:238:16:240:9 | BlockExpr | test.rs:236:9:240:9 | IfExpr | | +| test.rs:239:13:239:17 | false | test.rs:238:16:240:9 | BlockExpr | | +| test.rs:243:5:249:5 | enter test_if_or_operator | test.rs:243:28:243:28 | a | | +| test.rs:243:5:249:5 | exit test_if_or_operator (normal) | test.rs:243:5:249:5 | exit test_if_or_operator | | +| test.rs:243:28:243:28 | a | test.rs:243:28:243:34 | Param | match | +| test.rs:243:28:243:34 | Param | test.rs:243:37:243:37 | b | | +| test.rs:243:37:243:37 | b | test.rs:243:37:243:42 | Param | match | +| test.rs:243:37:243:42 | Param | test.rs:243:45:243:45 | c | | +| test.rs:243:45:243:45 | c | test.rs:243:45:243:51 | Param | match | +| test.rs:243:45:243:51 | Param | test.rs:244:12:244:12 | a | | +| test.rs:243:62:249:5 | BlockExpr | test.rs:243:5:249:5 | exit test_if_or_operator (normal) | | +| test.rs:244:9:248:9 | IfExpr | test.rs:243:62:249:5 | BlockExpr | | +| test.rs:244:12:244:12 | a | test.rs:244:12:244:17 | [boolean(true)] ... \|\| ... | true | +| test.rs:244:12:244:12 | a | test.rs:244:17:244:17 | b | false | +| test.rs:244:12:244:17 | [boolean(false)] ... \|\| ... | test.rs:244:22:244:22 | c | false | +| test.rs:244:12:244:17 | [boolean(true)] ... \|\| ... | test.rs:244:12:244:22 | [boolean(true)] ... \|\| ... | true | +| test.rs:244:12:244:22 | [boolean(false)] ... \|\| ... | test.rs:247:13:247:17 | false | false | +| test.rs:244:12:244:22 | [boolean(true)] ... \|\| ... | test.rs:245:13:245:16 | true | true | +| test.rs:244:17:244:17 | b | test.rs:244:12:244:17 | [boolean(false)] ... \|\| ... | false | +| test.rs:244:17:244:17 | b | test.rs:244:12:244:17 | [boolean(true)] ... \|\| ... | true | +| test.rs:244:22:244:22 | c | test.rs:244:12:244:22 | [boolean(false)] ... \|\| ... | false | +| test.rs:244:22:244:22 | c | test.rs:244:12:244:22 | [boolean(true)] ... \|\| ... | true | +| test.rs:244:24:246:9 | BlockExpr | test.rs:244:9:248:9 | IfExpr | | +| test.rs:245:13:245:16 | true | test.rs:244:24:246:9 | BlockExpr | | +| test.rs:246:16:248:9 | BlockExpr | test.rs:244:9:248:9 | IfExpr | | +| test.rs:247:13:247:17 | false | test.rs:246:16:248:9 | BlockExpr | | +| test.rs:251:5:257:5 | enter test_if_not_operator | test.rs:251:29:251:29 | a | | +| test.rs:251:5:257:5 | exit test_if_not_operator (normal) | test.rs:251:5:257:5 | exit test_if_not_operator | | +| test.rs:251:29:251:29 | a | test.rs:251:29:251:35 | Param | match | +| test.rs:251:29:251:35 | Param | test.rs:252:13:252:13 | a | | +| test.rs:251:46:257:5 | BlockExpr | test.rs:251:5:257:5 | exit test_if_not_operator (normal) | | +| test.rs:252:9:256:9 | IfExpr | test.rs:251:46:257:5 | BlockExpr | | +| test.rs:252:12:252:13 | [boolean(false)] ! ... | test.rs:255:13:255:17 | false | false | +| test.rs:252:12:252:13 | [boolean(true)] ! ... | test.rs:253:13:253:16 | true | true | +| test.rs:252:13:252:13 | a | test.rs:252:12:252:13 | [boolean(false)] ! ... | true | +| test.rs:252:13:252:13 | a | test.rs:252:12:252:13 | [boolean(true)] ! ... | false | +| test.rs:252:15:254:9 | BlockExpr | test.rs:252:9:256:9 | IfExpr | | +| test.rs:253:13:253:16 | true | test.rs:252:15:254:9 | BlockExpr | | +| test.rs:254:16:256:9 | BlockExpr | test.rs:252:9:256:9 | IfExpr | | +| test.rs:255:13:255:17 | false | test.rs:254:16:256:9 | BlockExpr | | +| test.rs:262:5:264:5 | enter test_question_mark_operator_1 | test.rs:262:38:262:38 | s | | +| test.rs:262:5:264:5 | exit test_question_mark_operator_1 (normal) | test.rs:262:5:264:5 | exit test_question_mark_operator_1 | | +| test.rs:262:38:262:38 | s | test.rs:262:38:262:44 | Param | match | +| test.rs:262:38:262:44 | Param | test.rs:263:9:263:11 | PathExpr | | +| test.rs:262:62:264:5 | BlockExpr | test.rs:262:5:264:5 | exit test_question_mark_operator_1 (normal) | | +| test.rs:263:9:263:11 | PathExpr | test.rs:263:9:263:26 | MethodCallExpr | | +| test.rs:263:9:263:26 | MethodCallExpr | test.rs:263:9:263:27 | TryExpr | | +| test.rs:263:9:263:27 | TryExpr | test.rs:262:5:264:5 | exit test_question_mark_operator_1 (normal) | return | +| test.rs:263:9:263:27 | TryExpr | test.rs:263:31:263:31 | 4 | | +| test.rs:263:9:263:31 | ... + ... | test.rs:262:62:264:5 | BlockExpr | | +| test.rs:263:31:263:31 | 4 | test.rs:263:9:263:31 | ... + ... | | +| test.rs:266:5:271:5 | enter test_question_mark_operator_2 | test.rs:266:38:266:38 | b | | +| test.rs:266:5:271:5 | exit test_question_mark_operator_2 (normal) | test.rs:266:5:271:5 | exit test_question_mark_operator_2 | | +| test.rs:266:38:266:38 | b | test.rs:266:38:266:52 | Param | match | +| test.rs:266:38:266:52 | Param | test.rs:267:15:267:15 | b | | +| test.rs:266:71:271:5 | BlockExpr | test.rs:266:5:271:5 | exit test_question_mark_operator_2 (normal) | | +| test.rs:267:9:270:9 | MatchExpr | test.rs:266:71:271:5 | BlockExpr | | +| test.rs:267:15:267:15 | b | test.rs:267:15:267:16 | TryExpr | | +| test.rs:267:15:267:16 | TryExpr | test.rs:266:5:271:5 | exit test_question_mark_operator_2 (normal) | return | +| test.rs:267:15:267:16 | TryExpr | test.rs:268:13:268:16 | LiteralPat | | +| test.rs:268:13:268:16 | LiteralPat | test.rs:268:21:268:24 | PathExpr | match | +| test.rs:268:13:268:16 | LiteralPat | test.rs:269:13:269:17 | LiteralPat | no-match | +| test.rs:268:21:268:24 | PathExpr | test.rs:268:26:268:30 | false | | +| test.rs:268:21:268:31 | CallExpr | test.rs:267:9:270:9 | MatchExpr | | +| test.rs:268:26:268:30 | false | test.rs:268:21:268:31 | CallExpr | | +| test.rs:269:13:269:17 | LiteralPat | test.rs:269:22:269:25 | PathExpr | match | +| test.rs:269:22:269:25 | PathExpr | test.rs:269:27:269:30 | true | | +| test.rs:269:22:269:31 | CallExpr | test.rs:267:9:270:9 | MatchExpr | | +| test.rs:269:27:269:30 | true | test.rs:269:22:269:31 | CallExpr | | +| test.rs:276:5:282:5 | enter test_match | test.rs:276:19:276:29 | maybe_digit | | +| test.rs:276:5:282:5 | exit test_match (normal) | test.rs:276:5:282:5 | exit test_match | | +| test.rs:276:19:276:29 | maybe_digit | test.rs:276:19:276:42 | Param | match | +| test.rs:276:19:276:42 | Param | test.rs:277:15:277:25 | maybe_digit | | +| test.rs:276:52:282:5 | BlockExpr | test.rs:276:5:282:5 | exit test_match (normal) | | +| test.rs:277:9:281:9 | MatchExpr | test.rs:276:52:282:5 | BlockExpr | | +| test.rs:277:15:277:25 | maybe_digit | test.rs:278:13:278:27 | TupleStructPat | | +| test.rs:278:13:278:27 | TupleStructPat | test.rs:278:26:278:26 | x | match | +| test.rs:278:13:278:27 | TupleStructPat | test.rs:279:13:279:27 | TupleStructPat | no-match | +| test.rs:278:26:278:26 | x | test.rs:278:32:278:32 | x | match | +| test.rs:278:32:278:32 | x | test.rs:278:36:278:37 | 10 | | +| test.rs:278:32:278:37 | ... < ... | test.rs:278:42:278:42 | x | true | +| test.rs:278:32:278:37 | ... < ... | test.rs:279:13:279:27 | TupleStructPat | false | +| test.rs:278:36:278:37 | 10 | test.rs:278:32:278:37 | ... < ... | | +| test.rs:278:42:278:42 | x | test.rs:278:46:278:46 | 5 | | +| test.rs:278:42:278:46 | ... + ... | test.rs:277:9:281:9 | MatchExpr | | +| test.rs:278:46:278:46 | 5 | test.rs:278:42:278:46 | ... + ... | | +| test.rs:279:13:279:27 | TupleStructPat | test.rs:279:26:279:26 | x | match | +| test.rs:279:13:279:27 | TupleStructPat | test.rs:280:13:280:24 | PathPat | no-match | +| test.rs:279:26:279:26 | x | test.rs:279:32:279:32 | x | match | +| test.rs:279:32:279:32 | x | test.rs:277:9:281:9 | MatchExpr | | +| test.rs:280:13:280:24 | PathPat | test.rs:280:29:280:29 | 5 | match | +| test.rs:280:29:280:29 | 5 | test.rs:277:9:281:9 | MatchExpr | | +| test.rs:284:5:293:5 | enter test_match_with_return_in_scrutinee | test.rs:284:44:284:54 | maybe_digit | | +| test.rs:284:5:293:5 | exit test_match_with_return_in_scrutinee (normal) | test.rs:284:5:293:5 | exit test_match_with_return_in_scrutinee | | +| test.rs:284:44:284:54 | maybe_digit | test.rs:284:44:284:67 | Param | match | +| test.rs:284:44:284:67 | Param | test.rs:285:19:285:29 | maybe_digit | | +| test.rs:284:77:293:5 | BlockExpr | test.rs:284:5:293:5 | exit test_match_with_return_in_scrutinee (normal) | | +| test.rs:285:9:292:9 | MatchExpr | test.rs:284:77:293:5 | BlockExpr | | +| test.rs:285:16:289:9 | IfExpr | test.rs:290:13:290:27 | TupleStructPat | | +| test.rs:285:19:285:29 | maybe_digit | test.rs:285:34:285:37 | PathExpr | | +| test.rs:285:19:285:40 | ... == ... | test.rs:286:13:286:21 | ExprStmt | true | +| test.rs:285:19:285:40 | ... == ... | test.rs:288:13:288:23 | maybe_digit | false | +| test.rs:285:34:285:37 | PathExpr | test.rs:285:39:285:39 | 3 | | +| test.rs:285:34:285:40 | CallExpr | test.rs:285:19:285:40 | ... == ... | | +| test.rs:285:39:285:39 | 3 | test.rs:285:34:285:40 | CallExpr | | +| test.rs:286:13:286:20 | ReturnExpr | test.rs:284:5:293:5 | exit test_match_with_return_in_scrutinee (normal) | return | +| test.rs:286:13:286:21 | ExprStmt | test.rs:286:20:286:20 | 3 | | +| test.rs:286:20:286:20 | 3 | test.rs:286:13:286:20 | ReturnExpr | | +| test.rs:287:16:289:9 | BlockExpr | test.rs:285:16:289:9 | IfExpr | | +| test.rs:288:13:288:23 | maybe_digit | test.rs:287:16:289:9 | BlockExpr | | +| test.rs:290:13:290:27 | TupleStructPat | test.rs:290:26:290:26 | x | match | +| test.rs:290:13:290:27 | TupleStructPat | test.rs:291:13:291:24 | PathPat | no-match | +| test.rs:290:26:290:26 | x | test.rs:290:32:290:32 | x | match | +| test.rs:290:32:290:32 | x | test.rs:290:36:290:36 | 5 | | +| test.rs:290:32:290:36 | ... + ... | test.rs:285:9:292:9 | MatchExpr | | +| test.rs:290:36:290:36 | 5 | test.rs:290:32:290:36 | ... + ... | | +| test.rs:291:13:291:24 | PathPat | test.rs:291:29:291:29 | 5 | match | +| test.rs:291:29:291:29 | 5 | test.rs:285:9:292:9 | MatchExpr | | +| test.rs:295:5:300:5 | enter test_match_and | test.rs:295:23:295:26 | cond | | +| test.rs:295:5:300:5 | exit test_match_and (normal) | test.rs:295:5:300:5 | exit test_match_and | | +| test.rs:295:23:295:26 | cond | test.rs:295:23:295:32 | Param | match | +| test.rs:295:23:295:32 | Param | test.rs:295:35:295:35 | r | | +| test.rs:295:35:295:35 | r | test.rs:295:35:295:48 | Param | match | +| test.rs:295:35:295:48 | Param | test.rs:296:16:296:16 | r | | +| test.rs:295:59:300:5 | BlockExpr | test.rs:295:5:300:5 | exit test_match_and (normal) | | +| test.rs:296:9:299:18 | ... && ... | test.rs:295:59:300:5 | BlockExpr | | +| test.rs:296:10:299:9 | [boolean(false)] MatchExpr | test.rs:296:9:299:18 | ... && ... | false | +| test.rs:296:10:299:9 | [boolean(true)] MatchExpr | test.rs:299:15:299:18 | cond | true | +| test.rs:296:16:296:16 | r | test.rs:297:13:297:19 | TupleStructPat | | +| test.rs:297:13:297:19 | TupleStructPat | test.rs:297:18:297:18 | a | match | +| test.rs:297:13:297:19 | TupleStructPat | test.rs:298:13:298:13 | WildcardPat | no-match | +| test.rs:297:18:297:18 | a | test.rs:297:24:297:24 | a | match | +| test.rs:297:24:297:24 | a | test.rs:296:10:299:9 | [boolean(false)] MatchExpr | false | +| test.rs:297:24:297:24 | a | test.rs:296:10:299:9 | [boolean(true)] MatchExpr | true | +| test.rs:297:24:297:24 | a | test.rs:298:13:298:13 | WildcardPat | false | +| test.rs:298:13:298:13 | WildcardPat | test.rs:298:18:298:22 | false | match | +| test.rs:298:18:298:22 | false | test.rs:296:10:299:9 | [boolean(false)] MatchExpr | false | +| test.rs:299:15:299:18 | cond | test.rs:296:9:299:18 | ... && ... | | +| test.rs:305:5:308:5 | enter test_let_match | test.rs:305:23:305:23 | a | | +| test.rs:305:5:308:5 | exit test_let_match (normal) | test.rs:305:5:308:5 | exit test_let_match | | +| test.rs:305:23:305:23 | a | test.rs:305:23:305:36 | Param | match | +| test.rs:305:23:305:36 | Param | test.rs:306:9:306:49 | LetStmt | | +| test.rs:305:39:308:5 | BlockExpr | test.rs:305:5:308:5 | exit test_let_match (normal) | | +| test.rs:306:9:306:49 | LetStmt | test.rs:306:23:306:23 | a | | +| test.rs:306:13:306:19 | TupleStructPat | test.rs:306:18:306:18 | n | match | +| test.rs:306:13:306:19 | TupleStructPat | test.rs:306:32:306:46 | "Expected some" | no-match | +| test.rs:306:18:306:18 | n | test.rs:307:9:307:9 | n | match | +| test.rs:306:23:306:23 | a | test.rs:306:13:306:19 | TupleStructPat | | +| test.rs:306:32:306:46 | "Expected some" | test.rs:306:30:306:48 | BlockExpr | | +| test.rs:307:9:307:9 | n | test.rs:305:39:308:5 | BlockExpr | | +| test.rs:310:5:316:5 | enter test_let_with_return | test.rs:310:29:310:29 | m | | +| test.rs:310:5:316:5 | exit test_let_with_return (normal) | test.rs:310:5:316:5 | exit test_let_with_return | | +| test.rs:310:29:310:29 | m | test.rs:310:29:310:42 | Param | match | +| test.rs:310:29:310:42 | Param | test.rs:311:9:314:10 | LetStmt | | +| test.rs:310:45:316:5 | BlockExpr | test.rs:310:5:316:5 | exit test_let_with_return (normal) | | +| test.rs:311:9:314:10 | LetStmt | test.rs:311:25:311:25 | m | | +| test.rs:311:13:311:15 | ret | test.rs:315:9:315:12 | true | match | +| test.rs:311:19:314:9 | MatchExpr | test.rs:311:13:311:15 | ret | | +| test.rs:311:25:311:25 | m | test.rs:312:13:312:21 | TupleStructPat | | +| test.rs:312:13:312:21 | TupleStructPat | test.rs:312:18:312:20 | ret | match | +| test.rs:312:13:312:21 | TupleStructPat | test.rs:313:13:313:16 | None | no-match | +| test.rs:312:18:312:20 | ret | test.rs:312:26:312:28 | ret | match | +| test.rs:312:26:312:28 | ret | test.rs:311:19:314:9 | MatchExpr | | +| test.rs:313:13:313:16 | None | test.rs:313:28:313:32 | false | match | +| test.rs:313:21:313:32 | ReturnExpr | test.rs:310:5:316:5 | exit test_let_with_return (normal) | return | +| test.rs:313:21:313:32 | ReturnExpr | test.rs:311:13:311:15 | ret | return | +| test.rs:313:28:313:32 | false | test.rs:313:21:313:32 | ReturnExpr | | +| test.rs:315:9:315:12 | true | test.rs:310:45:316:5 | BlockExpr | | +| test.rs:321:5:324:5 | enter empty_tuple_pattern | test.rs:321:28:321:31 | unit | | +| test.rs:321:5:324:5 | exit empty_tuple_pattern (normal) | test.rs:321:5:324:5 | exit empty_tuple_pattern | | +| test.rs:321:28:321:31 | unit | test.rs:321:28:321:35 | Param | match | +| test.rs:321:28:321:35 | Param | test.rs:322:9:322:22 | LetStmt | | +| test.rs:322:9:322:22 | LetStmt | test.rs:322:18:322:21 | unit | | +| test.rs:322:13:322:14 | TuplePat | test.rs:323:9:323:15 | ExprStmt | match | +| test.rs:322:18:322:21 | unit | test.rs:322:13:322:14 | TuplePat | | +| test.rs:323:9:323:14 | ReturnExpr | test.rs:321:5:324:5 | exit empty_tuple_pattern (normal) | return | +| test.rs:323:9:323:15 | ExprStmt | test.rs:323:9:323:14 | ReturnExpr | | +| test.rs:328:5:332:5 | enter empty_struct_pattern | test.rs:328:29:328:30 | st | | +| test.rs:328:5:332:5 | exit empty_struct_pattern (normal) | test.rs:328:5:332:5 | exit empty_struct_pattern | | +| test.rs:328:29:328:30 | st | test.rs:328:29:328:40 | Param | match | +| test.rs:328:29:328:40 | Param | test.rs:329:15:329:16 | st | | +| test.rs:328:50:332:5 | BlockExpr | test.rs:328:5:332:5 | exit empty_struct_pattern (normal) | | +| test.rs:329:9:331:9 | MatchExpr | test.rs:328:50:332:5 | BlockExpr | | +| test.rs:329:15:329:16 | st | test.rs:330:13:330:23 | RecordPat | | +| test.rs:330:13:330:23 | RecordPat | test.rs:330:28:330:28 | 1 | match | +| test.rs:330:28:330:28 | 1 | test.rs:329:9:331:9 | MatchExpr | | +| test.rs:336:5:341:5 | enter test_infinite_loop | test.rs:337:9:339:9 | ExprStmt | | +| test.rs:337:9:339:9 | ExprStmt | test.rs:338:13:338:13 | 1 | | +| test.rs:337:14:339:9 | BlockExpr | test.rs:338:13:338:13 | 1 | | +| test.rs:338:13:338:13 | 1 | test.rs:337:14:339:9 | BlockExpr | | +| test.rs:344:1:349:1 | enter dead_code | test.rs:345:5:347:5 | ExprStmt | | +| test.rs:344:1:349:1 | exit dead_code (normal) | test.rs:344:1:349:1 | exit dead_code | | +| test.rs:345:5:347:5 | ExprStmt | test.rs:345:9:345:12 | true | | +| test.rs:345:9:345:12 | true | test.rs:346:9:346:17 | ExprStmt | true | +| test.rs:346:9:346:16 | ReturnExpr | test.rs:344:1:349:1 | exit dead_code (normal) | return | +| test.rs:346:9:346:17 | ExprStmt | test.rs:346:16:346:16 | 0 | | +| test.rs:346:16:346:16 | 0 | test.rs:346:9:346:16 | ReturnExpr | | +| test.rs:351:1:364:1 | enter labelled_block1 | test.rs:352:5:363:6 | LetStmt | | +| test.rs:351:1:364:1 | exit labelled_block1 (normal) | test.rs:351:1:364:1 | exit labelled_block1 | | +| test.rs:351:29:364:1 | BlockExpr | test.rs:351:1:364:1 | exit labelled_block1 (normal) | | +| test.rs:352:5:363:6 | LetStmt | test.rs:353:9:353:19 | ExprStmt | | +| test.rs:352:9:352:14 | result | test.rs:351:29:364:1 | BlockExpr | match | +| test.rs:352:18:363:5 | BlockExpr | test.rs:352:9:352:14 | result | | +| test.rs:353:9:353:16 | PathExpr | test.rs:353:9:353:18 | CallExpr | | +| test.rs:353:9:353:18 | CallExpr | test.rs:354:9:356:9 | ExprStmt | | +| test.rs:353:9:353:19 | ExprStmt | test.rs:353:9:353:16 | PathExpr | | +| test.rs:354:9:356:9 | ExprStmt | test.rs:354:12:354:28 | PathExpr | | +| test.rs:354:9:356:9 | IfExpr | test.rs:357:9:357:24 | ExprStmt | | +| test.rs:354:12:354:28 | PathExpr | test.rs:354:12:354:30 | CallExpr | | +| test.rs:354:12:354:30 | CallExpr | test.rs:354:9:356:9 | IfExpr | false | +| test.rs:354:12:354:30 | CallExpr | test.rs:355:13:355:27 | ExprStmt | true | +| test.rs:355:13:355:26 | BreakExpr | test.rs:352:18:363:5 | BlockExpr | break | +| test.rs:355:13:355:27 | ExprStmt | test.rs:355:26:355:26 | 1 | | +| test.rs:355:26:355:26 | 1 | test.rs:355:13:355:26 | BreakExpr | | +| test.rs:357:9:357:21 | PathExpr | test.rs:357:9:357:23 | CallExpr | | +| test.rs:357:9:357:23 | CallExpr | test.rs:358:9:360:9 | ExprStmt | | +| test.rs:357:9:357:24 | ExprStmt | test.rs:357:9:357:21 | PathExpr | | +| test.rs:358:9:360:9 | ExprStmt | test.rs:358:12:358:28 | PathExpr | | +| test.rs:358:9:360:9 | IfExpr | test.rs:361:9:361:24 | ExprStmt | | +| test.rs:358:12:358:28 | PathExpr | test.rs:358:12:358:30 | CallExpr | | +| test.rs:358:12:358:30 | CallExpr | test.rs:358:9:360:9 | IfExpr | false | +| test.rs:358:12:358:30 | CallExpr | test.rs:359:13:359:27 | ExprStmt | true | +| test.rs:359:13:359:26 | BreakExpr | test.rs:352:18:363:5 | BlockExpr | break | +| test.rs:359:13:359:27 | ExprStmt | test.rs:359:26:359:26 | 2 | | +| test.rs:359:26:359:26 | 2 | test.rs:359:13:359:26 | BreakExpr | | +| test.rs:361:9:361:21 | PathExpr | test.rs:361:9:361:23 | CallExpr | | +| test.rs:361:9:361:23 | CallExpr | test.rs:362:9:362:9 | 3 | | +| test.rs:361:9:361:24 | ExprStmt | test.rs:361:9:361:21 | PathExpr | | +| test.rs:362:9:362:9 | 3 | test.rs:352:18:363:5 | BlockExpr | | +| test.rs:366:1:374:1 | enter labelled_block2 | test.rs:367:5:373:6 | LetStmt | | +| test.rs:366:1:374:1 | exit labelled_block2 (normal) | test.rs:366:1:374:1 | exit labelled_block2 | | +| test.rs:366:29:374:1 | BlockExpr | test.rs:366:1:374:1 | exit labelled_block2 (normal) | | +| test.rs:367:5:373:6 | LetStmt | test.rs:368:9:368:34 | LetStmt | | +| test.rs:367:9:367:14 | result | test.rs:366:29:374:1 | BlockExpr | match | +| test.rs:367:18:373:5 | BlockExpr | test.rs:367:9:367:14 | result | | +| test.rs:368:9:368:34 | LetStmt | test.rs:368:30:368:33 | PathExpr | | +| test.rs:368:13:368:13 | x | test.rs:369:9:371:10 | LetStmt | match | +| test.rs:368:30:368:33 | PathExpr | test.rs:368:13:368:13 | x | | +| test.rs:369:9:371:10 | LetStmt | test.rs:369:23:369:23 | x | | +| test.rs:369:13:369:19 | TupleStructPat | test.rs:369:18:369:18 | y | match | +| test.rs:369:13:369:19 | TupleStructPat | test.rs:370:13:370:27 | ExprStmt | no-match | +| test.rs:369:18:369:18 | y | test.rs:372:9:372:9 | x | match | +| test.rs:369:23:369:23 | x | test.rs:369:13:369:19 | TupleStructPat | | +| test.rs:370:13:370:26 | BreakExpr | test.rs:367:18:373:5 | BlockExpr | break | +| test.rs:370:13:370:27 | ExprStmt | test.rs:370:26:370:26 | 1 | | +| test.rs:370:26:370:26 | 1 | test.rs:370:13:370:26 | BreakExpr | | +| test.rs:372:9:372:9 | x | test.rs:367:18:373:5 | BlockExpr | | +| test.rs:376:1:382:1 | enter test_nested_function | test.rs:377:5:377:18 | LetStmt | | +| test.rs:376:1:382:1 | exit test_nested_function (normal) | test.rs:376:1:382:1 | exit test_nested_function | | +| test.rs:376:27:382:1 | BlockExpr | test.rs:376:1:382:1 | exit test_nested_function (normal) | | +| test.rs:377:5:377:18 | LetStmt | test.rs:377:17:377:17 | 0 | | +| test.rs:377:9:377:13 | x | test.rs:378:5:380:5 | nested | match | +| test.rs:377:17:377:17 | 0 | test.rs:377:9:377:13 | x | | +| test.rs:378:5:380:5 | enter nested | test.rs:378:15:378:15 | x | | +| test.rs:378:5:380:5 | exit nested (normal) | test.rs:378:5:380:5 | exit nested | | +| test.rs:378:5:380:5 | nested | test.rs:381:5:381:19 | ExprStmt | | +| test.rs:378:15:378:15 | x | test.rs:378:15:378:25 | Param | match | +| test.rs:378:15:378:25 | Param | test.rs:379:9:379:16 | ExprStmt | | +| test.rs:378:28:380:5 | BlockExpr | test.rs:378:5:380:5 | exit nested (normal) | | +| test.rs:379:9:379:10 | * ... | test.rs:379:15:379:15 | 1 | | +| test.rs:379:9:379:15 | ... += ... | test.rs:378:28:380:5 | BlockExpr | | +| test.rs:379:9:379:16 | ExprStmt | test.rs:379:10:379:10 | x | | +| test.rs:379:10:379:10 | x | test.rs:379:9:379:10 | * ... | | +| test.rs:379:15:379:15 | 1 | test.rs:379:9:379:15 | ... += ... | | +| test.rs:381:5:381:10 | PathExpr | test.rs:381:17:381:17 | x | | +| test.rs:381:5:381:18 | CallExpr | test.rs:376:27:382:1 | BlockExpr | | +| test.rs:381:5:381:19 | ExprStmt | test.rs:381:5:381:10 | PathExpr | | +| test.rs:381:12:381:17 | RefExpr | test.rs:381:5:381:18 | CallExpr | | +| test.rs:381:17:381:17 | x | test.rs:381:12:381:17 | RefExpr | | +| test.rs:385:5:385:29 | enter my_from | test.rs:385:16:385:16 | x | | +| test.rs:385:16:385:16 | x | test.rs:385:16:385:19 | Param | match | breakTarget -| test.rs:16:17:16:21 | BreakExpr | test.rs:10:9:22:9 | LoopExpr | -| test.rs:30:21:30:25 | BreakExpr | test.rs:28:13:35:13 | LoopExpr | -| test.rs:32:21:32:32 | BreakExpr | test.rs:27:9:36:9 | LoopExpr | -| test.rs:34:17:34:28 | BreakExpr | test.rs:28:13:35:13 | LoopExpr | -| test.rs:73:17:73:21 | BreakExpr | test.rs:70:9:76:9 | WhileExpr | -| test.rs:83:17:83:21 | BreakExpr | test.rs:81:9:85:9 | WhileExpr | -| test.rs:91:17:91:21 | BreakExpr | test.rs:89:9:94:9 | ForExpr | -| test.rs:170:17:170:28 | BreakExpr | test.rs:168:13:173:9 | LoopExpr | -| test.rs:183:17:183:35 | BreakExpr | test.rs:181:13:186:9 | LoopExpr | -| test.rs:195:13:195:30 | BreakExpr | test.rs:194:13:196:9 | BlockExpr | -| test.rs:328:13:328:26 | BreakExpr | test.rs:325:18:336:5 | BlockExpr | -| test.rs:332:13:332:26 | BreakExpr | test.rs:325:18:336:5 | BlockExpr | -| test.rs:343:13:343:26 | BreakExpr | test.rs:340:18:346:5 | BlockExpr | +| test.rs:25:17:25:21 | BreakExpr | test.rs:19:9:31:9 | LoopExpr | +| test.rs:39:21:39:25 | BreakExpr | test.rs:37:13:44:13 | LoopExpr | +| test.rs:41:21:41:32 | BreakExpr | test.rs:36:9:45:9 | LoopExpr | +| test.rs:43:17:43:28 | BreakExpr | test.rs:37:13:44:13 | LoopExpr | +| test.rs:82:17:82:21 | BreakExpr | test.rs:79:9:85:9 | WhileExpr | +| test.rs:92:17:92:21 | BreakExpr | test.rs:90:9:94:9 | WhileExpr | +| test.rs:100:17:100:21 | BreakExpr | test.rs:98:9:103:9 | ForExpr | +| test.rs:179:17:179:28 | BreakExpr | test.rs:177:13:182:9 | LoopExpr | +| test.rs:192:17:192:35 | BreakExpr | test.rs:190:13:195:9 | LoopExpr | +| test.rs:204:13:204:30 | BreakExpr | test.rs:203:13:205:9 | BlockExpr | +| test.rs:355:13:355:26 | BreakExpr | test.rs:352:18:363:5 | BlockExpr | +| test.rs:359:13:359:26 | BreakExpr | test.rs:352:18:363:5 | BlockExpr | +| test.rs:370:13:370:26 | BreakExpr | test.rs:367:18:373:5 | BlockExpr | continueTarget -| test.rs:19:17:19:24 | ContinueExpr | test.rs:10:9:22:9 | LoopExpr | -| test.rs:45:21:45:28 | ContinueExpr | test.rs:43:13:50:13 | LoopExpr | -| test.rs:47:21:47:35 | ContinueExpr | test.rs:41:9:51:9 | LoopExpr | -| test.rs:49:17:49:31 | ContinueExpr | test.rs:43:13:50:13 | LoopExpr | -| test.rs:59:21:59:28 | ContinueExpr | test.rs:57:13:64:13 | LoopExpr | -| test.rs:61:21:61:34 | ContinueExpr | test.rs:57:13:64:13 | LoopExpr | -| test.rs:63:17:63:30 | ContinueExpr | test.rs:57:13:64:13 | LoopExpr | +| test.rs:28:17:28:24 | ContinueExpr | test.rs:19:9:31:9 | LoopExpr | +| test.rs:54:21:54:28 | ContinueExpr | test.rs:52:13:59:13 | LoopExpr | +| test.rs:56:21:56:35 | ContinueExpr | test.rs:50:9:60:9 | LoopExpr | +| test.rs:58:17:58:31 | ContinueExpr | test.rs:52:13:59:13 | LoopExpr | +| test.rs:68:21:68:28 | ContinueExpr | test.rs:66:13:73:13 | LoopExpr | +| test.rs:70:21:70:34 | ContinueExpr | test.rs:66:13:73:13 | LoopExpr | +| test.rs:72:17:72:30 | ContinueExpr | test.rs:66:13:73:13 | LoopExpr | diff --git a/rust/ql/test/library-tests/controlflow/test.rs b/rust/ql/test/library-tests/controlflow/test.rs index 162f472861f4..571e4c69fd2e 100644 --- a/rust/ql/test/library-tests/controlflow/test.rs +++ b/rust/ql/test/library-tests/controlflow/test.rs @@ -1,6 +1,15 @@ -fn test_call() -> bool { - test_and_operator(true, false, true); - foo::(42); +use std::collections::HashMap; + +mod calls { + fn function_call() { + test_and_operator(true, false, true); + foo::(42); + } + + fn method_call() { + let mut map = HashMap::new(); + map.insert(37, "a"); + } } mod loop_expression { @@ -282,6 +291,29 @@ mod match_expression { Option::None => 5, } } + + fn test_match_and(cond: bool, r: Opton) -> bool { + (match r { + Some(a) => a, + _ => false, + }) && cond + } +} + +mod let_statement { + + fn test_let_match(a: Option) { + let Some(n) = a else { "Expected some" }; + n + } + + fn test_let_with_return(m: Option) { + let ret = match m { + Some(ret) => ret, + None => return false, + }; + true + } } mod patterns { @@ -307,11 +339,6 @@ mod divergence { } "never reached" } - - fn test_let_match(a: Option) { - let Some(n) = a else { "Expected some" }; - n - } } fn dead_code() -> i64 { @@ -353,3 +380,7 @@ fn test_nested_function() { } nested(&mut x); } + +trait MyFrom { + fn my_from(x: T) -> Self; +} From fd5d6255c1b7d7435bdb27f8aff60a672d25ede1 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 17 Oct 2024 16:20:30 +0200 Subject: [PATCH 179/217] Rust: Avoid creating CFG scopes for trait signatures without implementations --- rust/ql/lib/codeql/rust/controlflow/internal/Scope.qll | 6 ++++++ rust/ql/test/library-tests/controlflow/Cfg.expected | 2 -- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/Scope.qll b/rust/ql/lib/codeql/rust/controlflow/internal/Scope.qll index da4e153597d0..d85539ad9261 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/Scope.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/Scope.qll @@ -12,6 +12,12 @@ abstract class CfgScope extends AstNode { } final class FunctionScope extends CfgScope, Function { + FunctionScope() { + // A function without a body corresponds to a trait method signature and + // should not have a CFG scope. + this.hasBody() + } + override predicate scopeFirst(AstNode node) { first(this.(FunctionTree).getFirstChildNode(), node) } diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 9184f86461ec..4517d02dbffc 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -796,8 +796,6 @@ edges | test.rs:381:5:381:19 | ExprStmt | test.rs:381:5:381:10 | PathExpr | | | test.rs:381:12:381:17 | RefExpr | test.rs:381:5:381:18 | CallExpr | | | test.rs:381:17:381:17 | x | test.rs:381:12:381:17 | RefExpr | | -| test.rs:385:5:385:29 | enter my_from | test.rs:385:16:385:16 | x | | -| test.rs:385:16:385:16 | x | test.rs:385:16:385:19 | Param | match | breakTarget | test.rs:25:17:25:21 | BreakExpr | test.rs:19:9:31:9 | LoopExpr | | test.rs:39:21:39:25 | BreakExpr | test.rs:37:13:44:13 | LoopExpr | From 04f2062942f2c22e7d010326b1b6e06c01f70422 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 17 Oct 2024 16:22:07 +0200 Subject: [PATCH 180/217] Rust: Label the non-return CFG edge out of question mark as match --- .../codeql/rust/controlflow/internal/Completion.qll | 10 +++------- rust/ql/test/library-tests/controlflow/Cfg.expected | 4 ++-- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll b/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll index a72b904dcf1b..55bd269087dc 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll @@ -36,13 +36,7 @@ class SimpleCompletion extends NormalCompletion, TSimpleCompletion { // `SimpleCompletion` is the "default" completion type, thus it is valid for // any node where there isn't another more specific completion type. - override predicate isValidFor(AstNode e) { - not any(Completion c).isValidForSpecific(e) - or - // A `?` expression can both proceed normally or cause an early return, so - // we explicitly allow the former here. - e instanceof TryExpr - } + override predicate isValidFor(AstNode e) { not any(Completion c).isValidForSpecific(e) } override string toString() { result = "simple" } } @@ -177,6 +171,8 @@ class MatchCompletion extends TMatchCompletion, ConditionalCompletion { override predicate isValidForSpecific(AstNode e) { e instanceof Pat and if isExhaustiveMatch(e) then value = true else any() + or + e instanceof TryExpr and value = true } override MatchSuccessor getAMatchingSuccessorType() { result.getValue() = value } diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 4517d02dbffc..728fd5c6be0b 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -575,7 +575,7 @@ edges | test.rs:263:9:263:11 | PathExpr | test.rs:263:9:263:26 | MethodCallExpr | | | test.rs:263:9:263:26 | MethodCallExpr | test.rs:263:9:263:27 | TryExpr | | | test.rs:263:9:263:27 | TryExpr | test.rs:262:5:264:5 | exit test_question_mark_operator_1 (normal) | return | -| test.rs:263:9:263:27 | TryExpr | test.rs:263:31:263:31 | 4 | | +| test.rs:263:9:263:27 | TryExpr | test.rs:263:31:263:31 | 4 | match | | test.rs:263:9:263:31 | ... + ... | test.rs:262:62:264:5 | BlockExpr | | | test.rs:263:31:263:31 | 4 | test.rs:263:9:263:31 | ... + ... | | | test.rs:266:5:271:5 | enter test_question_mark_operator_2 | test.rs:266:38:266:38 | b | | @@ -586,7 +586,7 @@ edges | test.rs:267:9:270:9 | MatchExpr | test.rs:266:71:271:5 | BlockExpr | | | test.rs:267:15:267:15 | b | test.rs:267:15:267:16 | TryExpr | | | test.rs:267:15:267:16 | TryExpr | test.rs:266:5:271:5 | exit test_question_mark_operator_2 (normal) | return | -| test.rs:267:15:267:16 | TryExpr | test.rs:268:13:268:16 | LiteralPat | | +| test.rs:267:15:267:16 | TryExpr | test.rs:268:13:268:16 | LiteralPat | match | | test.rs:268:13:268:16 | LiteralPat | test.rs:268:21:268:24 | PathExpr | match | | test.rs:268:13:268:16 | LiteralPat | test.rs:269:13:269:17 | LiteralPat | no-match | | test.rs:268:21:268:24 | PathExpr | test.rs:268:26:268:30 | false | | From e6f1edcbb5d78138c4ffac154dfc5aad2163fa70 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 17 Oct 2024 16:25:19 +0200 Subject: [PATCH 181/217] Rust: Conditional completion of match arm expression should now flow to next arm --- .../rust/controlflow/internal/ControlFlowGraphImpl.qll | 7 +++++-- rust/ql/test/library-tests/controlflow/Cfg.expected | 1 - 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index 4366610bb9c0..ea50a95c875a 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -507,9 +507,12 @@ class MatchExprTree extends PostOrderTree instanceof MatchExpr { first(super.getArm(0).getPat(), succ) and completionIsNormal(c) or - // Edge from a failed match/guard in one arm to the beginning of the next arm. + // Edge from a failed pattern or guard in one arm to the beginning of the next arm. exists(int i | - last(super.getArm(i), pred, c) and + ( + last(super.getArm(i).getPat(), pred, c) or + last(super.getArm(i).getGuard().getCondition(), pred, c) + ) and first(super.getArm(i + 1), succ) and c.(ConditionalCompletion).failed() ) diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 728fd5c6be0b..086ed4b14ae7 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -661,7 +661,6 @@ edges | test.rs:297:18:297:18 | a | test.rs:297:24:297:24 | a | match | | test.rs:297:24:297:24 | a | test.rs:296:10:299:9 | [boolean(false)] MatchExpr | false | | test.rs:297:24:297:24 | a | test.rs:296:10:299:9 | [boolean(true)] MatchExpr | true | -| test.rs:297:24:297:24 | a | test.rs:298:13:298:13 | WildcardPat | false | | test.rs:298:13:298:13 | WildcardPat | test.rs:298:18:298:22 | false | match | | test.rs:298:18:298:22 | false | test.rs:296:10:299:9 | [boolean(false)] MatchExpr | false | | test.rs:299:15:299:18 | cond | test.rs:296:9:299:18 | ... && ... | | From b2032fc6fd6ad2538e992f23567571bbf72a3690 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 17 Oct 2024 16:28:57 +0200 Subject: [PATCH 182/217] Rust: Only normal completion of a let statement initializer steps to the pattern --- .../codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll | 2 +- rust/ql/test/library-tests/controlflow/Cfg.expected | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index ea50a95c875a..44f6ec8775ea 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -325,7 +325,7 @@ class LetStmtTree extends PreOrderTree, LetStmt { not this.hasInitializer() or // Edge from end of initializer to pattern. - last(this.getInitializer(), pred, c) and first(this.getPat(), succ) + last(this.getInitializer(), pred, c) and first(this.getPat(), succ) and completionIsNormal(c) or // Edge from failed pattern to `else` branch. last(this.getPat(), pred, c) and diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 086ed4b14ae7..2df3563cf3f5 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -691,7 +691,6 @@ edges | test.rs:312:26:312:28 | ret | test.rs:311:19:314:9 | MatchExpr | | | test.rs:313:13:313:16 | None | test.rs:313:28:313:32 | false | match | | test.rs:313:21:313:32 | ReturnExpr | test.rs:310:5:316:5 | exit test_let_with_return (normal) | return | -| test.rs:313:21:313:32 | ReturnExpr | test.rs:311:13:311:15 | ret | return | | test.rs:313:28:313:32 | false | test.rs:313:21:313:32 | ReturnExpr | | | test.rs:315:9:315:12 | true | test.rs:310:45:316:5 | BlockExpr | | | test.rs:321:5:324:5 | enter empty_tuple_pattern | test.rs:321:28:321:31 | unit | | From 3d0c86e17686202137579f98be9c8917743bb4be Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 17 Oct 2024 15:32:35 +0100 Subject: [PATCH 183/217] Rust: Test spacing. --- .../unusedentities/UnreachableCode.expected | 40 +++++++++---------- .../query-tests/unusedentities/unreachable.rs | 27 ++++++++++--- 2 files changed, 42 insertions(+), 25 deletions(-) diff --git a/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected b/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected index 169dba5c739e..6e9442da659d 100644 --- a/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected +++ b/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected @@ -1,20 +1,20 @@ -| unreachable.rs:12:3:12:17 | ExprStmt | This code is never reached. | -| unreachable.rs:20:3:20:17 | ExprStmt | This code is never reached. | -| unreachable.rs:32:3:32:17 | ExprStmt | This code is never reached. | -| unreachable.rs:39:3:39:17 | ExprStmt | This code is never reached. | -| unreachable.rs:60:2:60:16 | ExprStmt | This code is never reached. | -| unreachable.rs:106:16:106:23 | ExprStmt | This code is never reached. | -| unreachable.rs:114:15:114:22 | ExprStmt | This code is never reached. | -| unreachable.rs:130:2:130:16 | ExprStmt | This code is never reached. | -| unreachable.rs:140:2:140:16 | ExprStmt | This code is never reached. | -| unreachable.rs:147:3:147:17 | ExprStmt | This code is never reached. | -| unreachable.rs:156:4:156:18 | ExprStmt | This code is never reached. | -| unreachable.rs:162:3:162:17 | ExprStmt | This code is never reached. | -| unreachable.rs:168:4:168:18 | ExprStmt | This code is never reached. | -| unreachable.rs:176:4:176:18 | ExprStmt | This code is never reached. | -| unreachable.rs:179:2:179:16 | ExprStmt | This code is never reached. | -| unreachable.rs:193:3:193:17 | ExprStmt | This code is never reached. | -| unreachable.rs:196:2:196:16 | ExprStmt | This code is never reached. | -| unreachable.rs:201:3:201:17 | ExprStmt | This code is never reached. | -| unreachable.rs:216:2:216:16 | ExprStmt | This code is never reached. | -| unreachable.rs:225:2:225:16 | ExprStmt | This code is never reached. | +| unreachable.rs:13:3:13:17 | ExprStmt | This code is never reached. | +| unreachable.rs:21:3:21:17 | ExprStmt | This code is never reached. | +| unreachable.rs:33:3:33:17 | ExprStmt | This code is never reached. | +| unreachable.rs:40:3:40:17 | ExprStmt | This code is never reached. | +| unreachable.rs:61:2:61:16 | ExprStmt | This code is never reached. | +| unreachable.rs:107:16:107:23 | ExprStmt | This code is never reached. | +| unreachable.rs:115:15:115:22 | ExprStmt | This code is never reached. | +| unreachable.rs:131:2:131:16 | ExprStmt | This code is never reached. | +| unreachable.rs:141:2:141:16 | ExprStmt | This code is never reached. | +| unreachable.rs:148:3:148:17 | ExprStmt | This code is never reached. | +| unreachable.rs:157:4:157:18 | ExprStmt | This code is never reached. | +| unreachable.rs:163:3:163:17 | ExprStmt | This code is never reached. | +| unreachable.rs:169:4:169:18 | ExprStmt | This code is never reached. | +| unreachable.rs:177:4:177:18 | ExprStmt | This code is never reached. | +| unreachable.rs:180:2:180:16 | ExprStmt | This code is never reached. | +| unreachable.rs:203:3:203:17 | ExprStmt | This code is never reached. | +| unreachable.rs:206:2:206:16 | ExprStmt | This code is never reached. | +| unreachable.rs:218:3:218:17 | ExprStmt | This code is never reached. | +| unreachable.rs:233:2:233:16 | ExprStmt | This code is never reached. | +| unreachable.rs:242:2:242:16 | ExprStmt | This code is never reached. | diff --git a/rust/ql/test/query-tests/unusedentities/unreachable.rs b/rust/ql/test/query-tests/unusedentities/unreachable.rs index fc784979928a..c0af3b8592a5 100644 --- a/rust/ql/test/query-tests/unusedentities/unreachable.rs +++ b/rust/ql/test/query-tests/unusedentities/unreachable.rs @@ -1,6 +1,7 @@ //fn cond() -> bool; //fn get_a_number() -> i32; +//fn maybe_get_a_number() -> Option; // --- unreachable code -- @@ -186,19 +187,35 @@ fn unreachable_paren() { } fn unreachable_let_1() { - if let a = get_a_number() { + + + + + + + + + + if let a = get_a_number() { // (always succeeds) do_something(); return; } else { - do_something(); // SPURIOUS: unreachable code + do_something(); // BAD: unreachable code } - do_something(); // SPURIOUS: unreachable code + do_something(); // BAD: unreachable code } fn unreachable_let_2() { - let a = get_a_number() else { - do_something(); // SPURIOUS: unreachable code + + + + + + + + let a = maybe_get_a_number() else { // (always succeeds) + do_something(); // BAD: unreachable code return; }; From b8ea8400d136731abb481b2aa9bc17a7e001705a Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 17 Oct 2024 15:37:31 +0100 Subject: [PATCH 184/217] Add type param decls to PrintAST tests --- .../semmle/go/PrintAst/PrintAst.expected | 35 +++++++++++++++++++ .../PrintAst/PrintAstExcludeComments.expected | 35 +++++++++++++++++++ .../PrintAst/PrintAstNestedFunction.expected | 21 +++++++++++ .../go/PrintAst/PrintAstRestrictFile.expected | 34 ++++++++++++++++++ .../PrintAstRestrictFunction.expected | 21 +++++++++++ .../library-tests/semmle/go/PrintAst/go.mod | 3 +- .../library-tests/semmle/go/PrintAst/other.go | 6 +++- 7 files changed, 152 insertions(+), 3 deletions(-) diff --git a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAst.expected b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAst.expected index 41815e473a03..0c71ba870e4a 100644 --- a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAst.expected +++ b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAst.expected @@ -1,3 +1,16 @@ +other.go: +# 8| [TypeParamDecl] type parameter declaration +# 8| 0: [Ident, TypeName] int +# 8| Type = int +# 8| 1: [Ident, TypeName] U +# 8| Type = U +# 17| [TypeParamDecl] type parameter declaration +# 17| 0: [TypeSetLiteralExpr] type set literal +# 17| Type = ~string +# 17| 0: [Ident, TypeName] string +# 17| Type = string +# 17| 1: [Ident, TypeName] T +# 17| Type = T go.mod: # 0| [GoModFile] go.mod # 1| 0: [GoModModuleLine] go.mod module line @@ -648,3 +661,25 @@ other.go: # 15| 2: [IntLit] 0 # 15| Type = int # 15| Value = [IntLit] 0 +# 17| 6: [TypeDecl] type declaration +# 17| 0: [TypeSpec] type declaration specifier +# 17| 0: [Ident, TypeName] myType +# 17| Type = myType +# 17| 1: [ArrayTypeExpr] array type +# 17| Type = []T +# 17| 0: [Ident, TypeName] T +# 17| Type = T +# 19| 7: [MethodDecl] function declaration +# 19| 0: [FunctionName, Ident] f +# 19| Type = func() +# 19| 1: [FuncTypeExpr] function type +# 19| 2: [ReceiverDecl] receiver declaration +# 19| 0: [GenericTypeInstantiationExpr] generic type instantiation expression +# 19| Type = myType +# 19| 0: [Ident, TypeName] myType +# 19| Type = myType +# 19| 1: [Ident, TypeName] U +# 19| Type = U +# 19| 1: [Ident, VariableName] m +# 19| Type = myType +# 19| 3: [BlockStmt] block statement diff --git a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstExcludeComments.expected b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstExcludeComments.expected index 570ce08f2394..1592cc4ca751 100644 --- a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstExcludeComments.expected +++ b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstExcludeComments.expected @@ -1,3 +1,16 @@ +other.go: +# 8| [TypeParamDecl] type parameter declaration +# 8| 0: [Ident, TypeName] int +# 8| Type = int +# 8| 1: [Ident, TypeName] U +# 8| Type = U +# 17| [TypeParamDecl] type parameter declaration +# 17| 0: [TypeSetLiteralExpr] type set literal +# 17| Type = ~string +# 17| 0: [Ident, TypeName] string +# 17| Type = string +# 17| 1: [Ident, TypeName] T +# 17| Type = T go.mod: # 0| [GoModFile] go.mod # 1| 0: [GoModModuleLine] go.mod module line @@ -628,3 +641,25 @@ other.go: # 15| 2: [IntLit] 0 # 15| Type = int # 15| Value = [IntLit] 0 +# 17| 6: [TypeDecl] type declaration +# 17| 0: [TypeSpec] type declaration specifier +# 17| 0: [Ident, TypeName] myType +# 17| Type = myType +# 17| 1: [ArrayTypeExpr] array type +# 17| Type = []T +# 17| 0: [Ident, TypeName] T +# 17| Type = T +# 19| 7: [MethodDecl] function declaration +# 19| 0: [FunctionName, Ident] f +# 19| Type = func() +# 19| 1: [FuncTypeExpr] function type +# 19| 2: [ReceiverDecl] receiver declaration +# 19| 0: [GenericTypeInstantiationExpr] generic type instantiation expression +# 19| Type = myType +# 19| 0: [Ident, TypeName] myType +# 19| Type = myType +# 19| 1: [Ident, TypeName] U +# 19| Type = U +# 19| 1: [Ident, VariableName] m +# 19| Type = myType +# 19| 3: [BlockStmt] block statement diff --git a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstNestedFunction.expected b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstNestedFunction.expected index c8a01b1ba97a..36f054fbe1aa 100644 --- a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstNestedFunction.expected +++ b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstNestedFunction.expected @@ -1,3 +1,16 @@ +other.go: +# 8| [TypeParamDecl] type parameter declaration +# 8| 0: [Ident, TypeName] int +# 8| Type = int +# 8| 1: [Ident, TypeName] U +# 8| Type = U +# 17| [TypeParamDecl] type parameter declaration +# 17| 0: [TypeSetLiteralExpr] type set literal +# 17| Type = ~string +# 17| 0: [Ident, TypeName] string +# 17| Type = string +# 17| 1: [Ident, TypeName] T +# 17| Type = T go.mod: # 0| [GoModFile] go.mod # 1| 0: [GoModModuleLine] go.mod module line @@ -65,3 +78,11 @@ other.go: # 15| 2: [IntLit] 0 # 15| Type = int # 15| Value = [IntLit] 0 +# 17| 3: [TypeDecl] type declaration +# 17| 0: [TypeSpec] type declaration specifier +# 17| 0: [Ident, TypeName] myType +# 17| Type = myType +# 17| 1: [ArrayTypeExpr] array type +# 17| Type = []T +# 17| 0: [Ident, TypeName] T +# 17| Type = T diff --git a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFile.expected b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFile.expected index 1981fde0357e..3d313a087b48 100644 --- a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFile.expected +++ b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFile.expected @@ -1,4 +1,16 @@ other.go: +# 8| [TypeParamDecl] type parameter declaration +# 8| 0: [Ident, TypeName] int +# 8| Type = int +# 8| 1: [Ident, TypeName] U +# 8| Type = U +# 17| [TypeParamDecl] type parameter declaration +# 17| 0: [TypeSetLiteralExpr] type set literal +# 17| Type = ~string +# 17| 0: [Ident, TypeName] string +# 17| Type = string +# 17| 1: [Ident, TypeName] T +# 17| Type = T # 0| [GoFile] other.go # 1| package: [Ident] main # 3| 1: [FuncDecl] function declaration @@ -50,3 +62,25 @@ other.go: # 15| 2: [IntLit] 0 # 15| Type = int # 15| Value = [IntLit] 0 +# 17| 6: [TypeDecl] type declaration +# 17| 0: [TypeSpec] type declaration specifier +# 17| 0: [Ident, TypeName] myType +# 17| Type = myType +# 17| 1: [ArrayTypeExpr] array type +# 17| Type = []T +# 17| 0: [Ident, TypeName] T +# 17| Type = T +# 19| 7: [MethodDecl] function declaration +# 19| 0: [FunctionName, Ident] f +# 19| Type = func() +# 19| 1: [FuncTypeExpr] function type +# 19| 2: [ReceiverDecl] receiver declaration +# 19| 0: [GenericTypeInstantiationExpr] generic type instantiation expression +# 19| Type = myType +# 19| 0: [Ident, TypeName] myType +# 19| Type = myType +# 19| 1: [Ident, TypeName] U +# 19| Type = U +# 19| 1: [Ident, VariableName] m +# 19| Type = myType +# 19| 3: [BlockStmt] block statement diff --git a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFunction.expected b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFunction.expected index 5783960cedc2..4ba6522d3267 100644 --- a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFunction.expected +++ b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFunction.expected @@ -1,3 +1,16 @@ +other.go: +# 8| [TypeParamDecl] type parameter declaration +# 8| 0: [Ident, TypeName] int +# 8| Type = int +# 8| 1: [Ident, TypeName] U +# 8| Type = U +# 17| [TypeParamDecl] type parameter declaration +# 17| 0: [TypeSetLiteralExpr] type set literal +# 17| Type = ~string +# 17| 0: [Ident, TypeName] string +# 17| Type = string +# 17| 1: [Ident, TypeName] T +# 17| Type = T go.mod: # 0| [GoModFile] go.mod # 1| 0: [GoModModuleLine] go.mod module line @@ -45,3 +58,11 @@ other.go: # 15| 2: [IntLit] 0 # 15| Type = int # 15| Value = [IntLit] 0 +# 17| 3: [TypeDecl] type declaration +# 17| 0: [TypeSpec] type declaration specifier +# 17| 0: [Ident, TypeName] myType +# 17| Type = myType +# 17| 1: [ArrayTypeExpr] array type +# 17| Type = []T +# 17| 0: [Ident, TypeName] T +# 17| Type = T diff --git a/go/ql/test/library-tests/semmle/go/PrintAst/go.mod b/go/ql/test/library-tests/semmle/go/PrintAst/go.mod index c3149650c4c1..a443fbece394 100644 --- a/go/ql/test/library-tests/semmle/go/PrintAst/go.mod +++ b/go/ql/test/library-tests/semmle/go/PrintAst/go.mod @@ -1,4 +1,3 @@ module codeql-go-tests/printast -go 1.14 - +go 1.18 diff --git a/go/ql/test/library-tests/semmle/go/PrintAst/other.go b/go/ql/test/library-tests/semmle/go/PrintAst/other.go index 9d60eff98bdc..caf66812d601 100644 --- a/go/ql/test/library-tests/semmle/go/PrintAst/other.go +++ b/go/ql/test/library-tests/semmle/go/PrintAst/other.go @@ -5,7 +5,7 @@ func main() {} func f() {} func g() {} -func hasNested() { +func hasNested[U int]() { myNested := func() int { return 1 } myNested() @@ -13,3 +13,7 @@ func hasNested() { } var x int = 0 + +type myType[T ~string] []T + +func (m myType[U]) f() {} From bf920605b2d32479c09cd76a2fe8683b626856fb Mon Sep 17 00:00:00 2001 From: Taus Date: Thu, 17 Oct 2024 16:38:10 +0200 Subject: [PATCH 185/217] Python: Update supported-versions-compilers.rst Adds Python 3.13 to the list. We might want to consider shortening the list to something like "3.5 - 3.13" at some point. Also, once we're finally rid of standard library extraction, we should update footnote 8 accordingly. --- docs/codeql/reusables/supported-versions-compilers.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/reusables/supported-versions-compilers.rst b/docs/codeql/reusables/supported-versions-compilers.rst index d9869c35100b..4cdb97ace1b4 100644 --- a/docs/codeql/reusables/supported-versions-compilers.rst +++ b/docs/codeql/reusables/supported-versions-compilers.rst @@ -22,7 +22,7 @@ Eclipse compiler for Java (ECJ) [6]_",``.java`` Kotlin,"Kotlin 1.5.0 to 2.1.0\ *x*","kotlinc",``.kt`` JavaScript,ECMAScript 2022 or lower,Not applicable,"``.js``, ``.jsx``, ``.mjs``, ``.es``, ``.es6``, ``.htm``, ``.html``, ``.xhtm``, ``.xhtml``, ``.vue``, ``.hbs``, ``.ejs``, ``.njk``, ``.json``, ``.yaml``, ``.yml``, ``.raml``, ``.xml`` [7]_" - Python [8]_,"2.7, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12",Not applicable,``.py`` + Python [8]_,"2.7, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13",Not applicable,``.py`` Ruby [9]_,"up to 3.3",Not applicable,"``.rb``, ``.erb``, ``.gemspec``, ``Gemfile``" Swift [10]_,"Swift 5.4-5.10","Swift compiler","``.swift``" TypeScript [11]_,"2.6-5.6",Standard TypeScript compiler,"``.ts``, ``.tsx``, ``.mts``, ``.cts``" From e1aaa136b25f3a3cd727c844f4a6d828b712e864 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 17 Oct 2024 15:38:03 +0100 Subject: [PATCH 186/217] Rust: Add variants with pattern matching for unreachable_let_1 and 2. --- .../unusedentities/UnreachableCode.expected | 1 + .../query-tests/unusedentities/unreachable.rs | 24 +++++++++---------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected b/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected index 6e9442da659d..b7766fa6f1ac 100644 --- a/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected +++ b/rust/ql/test/query-tests/unusedentities/UnreachableCode.expected @@ -13,6 +13,7 @@ | unreachable.rs:169:4:169:18 | ExprStmt | This code is never reached. | | unreachable.rs:177:4:177:18 | ExprStmt | This code is never reached. | | unreachable.rs:180:2:180:16 | ExprStmt | This code is never reached. | +| unreachable.rs:197:2:197:16 | ExprStmt | This code is never reached. | | unreachable.rs:203:3:203:17 | ExprStmt | This code is never reached. | | unreachable.rs:206:2:206:16 | ExprStmt | This code is never reached. | | unreachable.rs:218:3:218:17 | ExprStmt | This code is never reached. | diff --git a/rust/ql/test/query-tests/unusedentities/unreachable.rs b/rust/ql/test/query-tests/unusedentities/unreachable.rs index c0af3b8592a5..24c2d4d762ac 100644 --- a/rust/ql/test/query-tests/unusedentities/unreachable.rs +++ b/rust/ql/test/query-tests/unusedentities/unreachable.rs @@ -187,14 +187,14 @@ fn unreachable_paren() { } fn unreachable_let_1() { + if let Some(a) = maybe_get_a_number() { + do_something(); + return; + } else { + do_something(); + } - - - - - - - + do_something(); // SPURIOUS: unreachable code if let a = get_a_number() { // (always succeeds) do_something(); @@ -207,12 +207,12 @@ fn unreachable_let_1() { } fn unreachable_let_2() { + let Some(a) = maybe_get_a_number() else { + do_something(); + return; + }; - - - - - + do_something(); let a = maybe_get_a_number() else { // (always succeeds) do_something(); // BAD: unreachable code From 7ed82068ef90966e86879f6d906c771438578f0f Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 17 Oct 2024 15:39:16 +0100 Subject: [PATCH 187/217] Add type param decls to AST viewer hierarchy --- go/ql/lib/semmle/go/AST.qll | 2 ++ .../semmle/go/PrintAst/PrintAst.expected | 25 +++++++++---------- .../PrintAst/PrintAstExcludeComments.expected | 25 +++++++++---------- .../PrintAst/PrintAstNestedFunction.expected | 25 +++++++++---------- .../go/PrintAst/PrintAstRestrictFile.expected | 24 +++++++++--------- .../PrintAstRestrictFunction.expected | 14 +++++------ 6 files changed, 57 insertions(+), 58 deletions(-) diff --git a/go/ql/lib/semmle/go/AST.qll b/go/ql/lib/semmle/go/AST.qll index 64c6231d1054..c5e388ba000f 100644 --- a/go/ql/lib/semmle/go/AST.qll +++ b/go/ql/lib/semmle/go/AST.qll @@ -55,6 +55,8 @@ class AstNode extends @node, Locatable { kind = "commentgroup" and result = this.(File).getCommentGroup(i) or kind = "comment" and result = this.(CommentGroup).getComment(i) + or + kind = "typeparamdecl" and result = this.(TypeParamDeclParent).getTypeParameterDecl(i) } /** diff --git a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAst.expected b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAst.expected index 0c71ba870e4a..66aa26430633 100644 --- a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAst.expected +++ b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAst.expected @@ -1,16 +1,3 @@ -other.go: -# 8| [TypeParamDecl] type parameter declaration -# 8| 0: [Ident, TypeName] int -# 8| Type = int -# 8| 1: [Ident, TypeName] U -# 8| Type = U -# 17| [TypeParamDecl] type parameter declaration -# 17| 0: [TypeSetLiteralExpr] type set literal -# 17| Type = ~string -# 17| 0: [Ident, TypeName] string -# 17| Type = string -# 17| 1: [Ident, TypeName] T -# 17| Type = T go.mod: # 0| [GoModFile] go.mod # 1| 0: [GoModModuleLine] go.mod module line @@ -652,6 +639,11 @@ other.go: # 11| Type = int # 11| 0: [Ident, VariableName] myNested # 11| Type = func() int +# 8| 3: [TypeParamDecl] type parameter declaration +# 8| 0: [Ident, TypeName] int +# 8| Type = int +# 8| 1: [Ident, TypeName] U +# 8| Type = U # 15| 5: [VarDecl] variable declaration # 15| 0: [ValueSpec] value declaration specifier # 15| 0: [Ident, VariableName] x @@ -669,6 +661,13 @@ other.go: # 17| Type = []T # 17| 0: [Ident, TypeName] T # 17| Type = T +# 17| 2: [TypeParamDecl] type parameter declaration +# 17| 0: [TypeSetLiteralExpr] type set literal +# 17| Type = ~string +# 17| 0: [Ident, TypeName] string +# 17| Type = string +# 17| 1: [Ident, TypeName] T +# 17| Type = T # 19| 7: [MethodDecl] function declaration # 19| 0: [FunctionName, Ident] f # 19| Type = func() diff --git a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstExcludeComments.expected b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstExcludeComments.expected index 1592cc4ca751..099aa4e6144f 100644 --- a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstExcludeComments.expected +++ b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstExcludeComments.expected @@ -1,16 +1,3 @@ -other.go: -# 8| [TypeParamDecl] type parameter declaration -# 8| 0: [Ident, TypeName] int -# 8| Type = int -# 8| 1: [Ident, TypeName] U -# 8| Type = U -# 17| [TypeParamDecl] type parameter declaration -# 17| 0: [TypeSetLiteralExpr] type set literal -# 17| Type = ~string -# 17| 0: [Ident, TypeName] string -# 17| Type = string -# 17| 1: [Ident, TypeName] T -# 17| Type = T go.mod: # 0| [GoModFile] go.mod # 1| 0: [GoModModuleLine] go.mod module line @@ -632,6 +619,11 @@ other.go: # 11| Type = int # 11| 0: [Ident, VariableName] myNested # 11| Type = func() int +# 8| 3: [TypeParamDecl] type parameter declaration +# 8| 0: [Ident, TypeName] int +# 8| Type = int +# 8| 1: [Ident, TypeName] U +# 8| Type = U # 15| 5: [VarDecl] variable declaration # 15| 0: [ValueSpec] value declaration specifier # 15| 0: [Ident, VariableName] x @@ -649,6 +641,13 @@ other.go: # 17| Type = []T # 17| 0: [Ident, TypeName] T # 17| Type = T +# 17| 2: [TypeParamDecl] type parameter declaration +# 17| 0: [TypeSetLiteralExpr] type set literal +# 17| Type = ~string +# 17| 0: [Ident, TypeName] string +# 17| Type = string +# 17| 1: [Ident, TypeName] T +# 17| Type = T # 19| 7: [MethodDecl] function declaration # 19| 0: [FunctionName, Ident] f # 19| Type = func() diff --git a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstNestedFunction.expected b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstNestedFunction.expected index 36f054fbe1aa..9be02352b2b7 100644 --- a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstNestedFunction.expected +++ b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstNestedFunction.expected @@ -1,16 +1,3 @@ -other.go: -# 8| [TypeParamDecl] type parameter declaration -# 8| 0: [Ident, TypeName] int -# 8| Type = int -# 8| 1: [Ident, TypeName] U -# 8| Type = U -# 17| [TypeParamDecl] type parameter declaration -# 17| 0: [TypeSetLiteralExpr] type set literal -# 17| Type = ~string -# 17| 0: [Ident, TypeName] string -# 17| Type = string -# 17| 1: [Ident, TypeName] T -# 17| Type = T go.mod: # 0| [GoModFile] go.mod # 1| 0: [GoModModuleLine] go.mod module line @@ -69,6 +56,11 @@ other.go: # 11| Type = int # 11| 0: [Ident, VariableName] myNested # 11| Type = func() int +# 8| 3: [TypeParamDecl] type parameter declaration +# 8| 0: [Ident, TypeName] int +# 8| Type = int +# 8| 1: [Ident, TypeName] U +# 8| Type = U # 15| 2: [VarDecl] variable declaration # 15| 0: [ValueSpec] value declaration specifier # 15| 0: [Ident, VariableName] x @@ -86,3 +78,10 @@ other.go: # 17| Type = []T # 17| 0: [Ident, TypeName] T # 17| Type = T +# 17| 2: [TypeParamDecl] type parameter declaration +# 17| 0: [TypeSetLiteralExpr] type set literal +# 17| Type = ~string +# 17| 0: [Ident, TypeName] string +# 17| Type = string +# 17| 1: [Ident, TypeName] T +# 17| Type = T diff --git a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFile.expected b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFile.expected index 3d313a087b48..45e6789e0139 100644 --- a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFile.expected +++ b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFile.expected @@ -1,16 +1,4 @@ other.go: -# 8| [TypeParamDecl] type parameter declaration -# 8| 0: [Ident, TypeName] int -# 8| Type = int -# 8| 1: [Ident, TypeName] U -# 8| Type = U -# 17| [TypeParamDecl] type parameter declaration -# 17| 0: [TypeSetLiteralExpr] type set literal -# 17| Type = ~string -# 17| 0: [Ident, TypeName] string -# 17| Type = string -# 17| 1: [Ident, TypeName] T -# 17| Type = T # 0| [GoFile] other.go # 1| package: [Ident] main # 3| 1: [FuncDecl] function declaration @@ -53,6 +41,11 @@ other.go: # 11| Type = int # 11| 0: [Ident, VariableName] myNested # 11| Type = func() int +# 8| 3: [TypeParamDecl] type parameter declaration +# 8| 0: [Ident, TypeName] int +# 8| Type = int +# 8| 1: [Ident, TypeName] U +# 8| Type = U # 15| 5: [VarDecl] variable declaration # 15| 0: [ValueSpec] value declaration specifier # 15| 0: [Ident, VariableName] x @@ -70,6 +63,13 @@ other.go: # 17| Type = []T # 17| 0: [Ident, TypeName] T # 17| Type = T +# 17| 2: [TypeParamDecl] type parameter declaration +# 17| 0: [TypeSetLiteralExpr] type set literal +# 17| Type = ~string +# 17| 0: [Ident, TypeName] string +# 17| Type = string +# 17| 1: [Ident, TypeName] T +# 17| Type = T # 19| 7: [MethodDecl] function declaration # 19| 0: [FunctionName, Ident] f # 19| Type = func() diff --git a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFunction.expected b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFunction.expected index 4ba6522d3267..3073a43383a3 100644 --- a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFunction.expected +++ b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFunction.expected @@ -4,13 +4,6 @@ other.go: # 8| Type = int # 8| 1: [Ident, TypeName] U # 8| Type = U -# 17| [TypeParamDecl] type parameter declaration -# 17| 0: [TypeSetLiteralExpr] type set literal -# 17| Type = ~string -# 17| 0: [Ident, TypeName] string -# 17| Type = string -# 17| 1: [Ident, TypeName] T -# 17| Type = T go.mod: # 0| [GoModFile] go.mod # 1| 0: [GoModModuleLine] go.mod module line @@ -66,3 +59,10 @@ other.go: # 17| Type = []T # 17| 0: [Ident, TypeName] T # 17| Type = T +# 17| 2: [TypeParamDecl] type parameter declaration +# 17| 0: [TypeSetLiteralExpr] type set literal +# 17| Type = ~string +# 17| 0: [Ident, TypeName] string +# 17| Type = string +# 17| 1: [Ident, TypeName] T +# 17| Type = T From 1aa3eb527fa6e58a833ae7b0884f07841f1dc126 Mon Sep 17 00:00:00 2001 From: Chuan-kai Lin Date: Thu, 17 Oct 2024 10:23:38 -0700 Subject: [PATCH 188/217] Dataflow: apply diff-informed filtering consistently --- .../codeql/dataflow/internal/DataFlowImpl.qll | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 1bebea93c486..483cf1315a45 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -224,6 +224,13 @@ module MakeImpl Lang> { hasFilteredSource() ) } + + bindingset[source, sink] + pragma[inline_late] + predicate isRelevantSourceSinkPair(Node source, Node sink) { + isFilteredSource(source) or + isFilteredSink(sink) + } } private import SourceSinkFiltering @@ -3511,6 +3518,17 @@ module MakeImpl Lang> { * included in the module `PathGraph`. */ predicate flowPath(PathNode source, PathNode sink) { + ( + // When there are both sources and sinks in the diff range, + // diff-informed dataflow falls back to computing all paths without + // any filtering. To prevent significant alert flip-flopping due to + // minor code changes triggering the fallback, we consistently apply + // source-or-sink filtering here to ensure that we return the same + // paths regardless of whether the fallback is triggered. + if Config::observeDiffInformedIncrementalMode() + then isRelevantSourceSinkPair(source.getNode(), sink.getNode()) + else any() + ) and exists(PathNodeImpl flowsource, PathNodeImpl flowsink | source = flowsource and sink = flowsink | From 13f19481db01592bdd489e09c0cdd829c80ee428 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 15 Oct 2024 16:28:36 +0100 Subject: [PATCH 189/217] Add tests checking Maven retrieves the depgraph plugin from our shipped repo, and produces the expected settings.xml file in the process --- .../buildless-fetches.expected | 26 ++++ .../diagnostics.expected | 70 +++++++++++ .../.m2/settings.xml | 18 +++ .../maven-fetches.expected | 77 ++++++++++++ .../pom.xml | 114 ++++++++++++++++++ .../settings-xml.expected | 45 +++++++ .../source_archive.expected | 9 ++ .../src/main/java/com/example/App.java | 30 +++++ .../src/main/resources/my-app.properties | 1 + .../src/main/resources/page.xml | 8 ++ .../src/main/resources/struts.xml | 4 + .../src/test/java/com/example/AppTest.java | 20 +++ .../test.py | 9 ++ .../buildless-maven/maven-fetches.expected | 77 ++++++++++++ .../buildless-maven/settings-xml.expected | 18 +++ .../buildless-maven/source_archive.expected | 1 + .../java/buildless-maven/test.py | 8 +- 17 files changed, 532 insertions(+), 3 deletions(-) create mode 100644 java/ql/integration-tests/java/buildless-maven-existing-settings-xml/buildless-fetches.expected create mode 100644 java/ql/integration-tests/java/buildless-maven-existing-settings-xml/diagnostics.expected create mode 100644 java/ql/integration-tests/java/buildless-maven-existing-settings-xml/home-dir-with-maven-settings/.m2/settings.xml create mode 100644 java/ql/integration-tests/java/buildless-maven-existing-settings-xml/maven-fetches.expected create mode 100644 java/ql/integration-tests/java/buildless-maven-existing-settings-xml/pom.xml create mode 100644 java/ql/integration-tests/java/buildless-maven-existing-settings-xml/settings-xml.expected create mode 100644 java/ql/integration-tests/java/buildless-maven-existing-settings-xml/source_archive.expected create mode 100644 java/ql/integration-tests/java/buildless-maven-existing-settings-xml/src/main/java/com/example/App.java create mode 100644 java/ql/integration-tests/java/buildless-maven-existing-settings-xml/src/main/resources/my-app.properties create mode 100644 java/ql/integration-tests/java/buildless-maven-existing-settings-xml/src/main/resources/page.xml create mode 100644 java/ql/integration-tests/java/buildless-maven-existing-settings-xml/src/main/resources/struts.xml create mode 100644 java/ql/integration-tests/java/buildless-maven-existing-settings-xml/src/test/java/com/example/AppTest.java create mode 100644 java/ql/integration-tests/java/buildless-maven-existing-settings-xml/test.py create mode 100644 java/ql/integration-tests/java/buildless-maven/maven-fetches.expected create mode 100644 java/ql/integration-tests/java/buildless-maven/settings-xml.expected diff --git a/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/buildless-fetches.expected b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/buildless-fetches.expected new file mode 100644 index 000000000000..49120865e8de --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/buildless-fetches.expected @@ -0,0 +1,26 @@ +https://repo.maven.apache.org/maven2/com/feiniaojin/naaf/naaf-graceful-response-example/1.0/naaf-graceful-response-example-1.0.jar +https://repo.maven.apache.org/maven2/com/github/MoebiusSolutions/avro-registry-in-source/avro-registry-in-source-tests/1.8/avro-registry-in-source-tests-1.8.jar +https://repo.maven.apache.org/maven2/com/github/MoebiusSolutions/avro-registry-in-source/example-project/1.5/example-project-1.5.jar +https://repo.maven.apache.org/maven2/com/intuit/benten/benten-examples/0.1.5/benten-examples-0.1.5.jar +https://repo.maven.apache.org/maven2/com/jakewharton/twirl/sample-runtime/1.2.0/sample-runtime-1.2.0.jar +https://repo.maven.apache.org/maven2/com/mattunderscore/code/generation/specky/plugin-example/0.8.0/plugin-example-0.8.0.jar +https://repo.maven.apache.org/maven2/com/microsoft/tang/tang-test-jarAB/0.9/tang-test-jarAB-0.9.jar +https://repo.maven.apache.org/maven2/de/knutwalker/rx-redis-example_2.11/0.1.2/rx-redis-example_2.11-0.1.2.jar +https://repo.maven.apache.org/maven2/de/knutwalker/rx-redis-java-example_2.11/0.1.2/rx-redis-java-example_2.11-0.1.2.jar +https://repo.maven.apache.org/maven2/io/github/scrollsyou/example-spring-boot-starter/1.0.0/example-spring-boot-starter-1.0.0.jar +https://repo.maven.apache.org/maven2/io/streamnative/com/example/maven-central-template/server/3.0.0/server-3.0.0.jar +https://repo.maven.apache.org/maven2/junit/junit/4.11/junit-4.11.jar +https://repo.maven.apache.org/maven2/no/nav/security/token-validation-ktor-demo/3.1.0/token-validation-ktor-demo-3.1.0.jar +https://repo.maven.apache.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-fileupload/0.5.10/minijax-example-fileupload-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-inject/0.5.10/minijax-example-inject-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-json/0.5.10/minijax-example-json-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-mustache/0.5.10/minijax-example-mustache-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-petclinic/0.5.10/minijax-example-petclinic-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-security/0.5.10/minijax-example-security-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-ssl/0.5.10/minijax-example-ssl-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-todo-backend/0.5.10/minijax-example-todo-backend-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-websocket/0.5.10/minijax-example-websocket-0.5.10.jar +https://repo.maven.apache.org/maven2/org/scalamock/scalamock-examples_2.10/3.6.0/scalamock-examples_2.10-3.6.0.jar +https://repo.maven.apache.org/maven2/org/somda/sdc/glue-examples/4.0.0/glue-examples-4.0.0.jar +https://repo.maven.apache.org/maven2/us/fatehi/schemacrawler-examplecode/16.20.2/schemacrawler-examplecode-16.20.2.jar diff --git a/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/diagnostics.expected b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/diagnostics.expected new file mode 100644 index 000000000000..f3c89bb842a0 --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/diagnostics.expected @@ -0,0 +1,70 @@ +{ + "markdownMessage": "Java analysis used build tool Maven to pick a JDK version and/or to recommend external dependencies.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/using-build-tool-advice", + "name": "Java analysis used build tool Maven to pick a JDK version and/or to recommend external dependencies" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java analysis used the system default JDK.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/jdk-system-default", + "name": "Java analysis used the system default JDK" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java analysis with build-mode 'none' completed.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/complete", + "name": "Java analysis with build-mode 'none' completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java was extracted with build-mode set to 'none'. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", + "severity": "note", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/mode-active", + "name": "Java was extracted with build-mode set to 'none'" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} +{ + "markdownMessage": "Reading the dependency graph from build files provided 2 classpath entries", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/depgraph-provided-by-maven", + "name": "Java analysis extracted precise dependency graph information from tool Maven" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} diff --git a/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/home-dir-with-maven-settings/.m2/settings.xml b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/home-dir-with-maven-settings/.m2/settings.xml new file mode 100644 index 000000000000..5200a15410eb --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/home-dir-with-maven-settings/.m2/settings.xml @@ -0,0 +1,18 @@ + + + + + preexisting-profile + + + preexisting-repository + A pre-existing repository + https://nonesuch.example + + + + + + preexisting-profile + + diff --git a/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/maven-fetches.expected b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/maven-fetches.expected new file mode 100644 index 000000000000..e4bddddc3e5d --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/maven-fetches.expected @@ -0,0 +1,77 @@ +Downloaded from central: https://repo.maven.apache.org/maven2/junit/junit/4.11/junit-4.11.pom +Downloaded from central: https://repo.maven.apache.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.pom +Downloaded from central: https://repo.maven.apache.org/maven2/org/hamcrest/hamcrest-parent/1.3/hamcrest-parent-1.3.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/core/jackson-annotations/2.14.1/jackson-annotations-2.14.1.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/core/jackson-annotations/2.14.1/jackson-annotations-2.14.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/core/jackson-core/2.14.1/jackson-core-2.14.1.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/core/jackson-core/2.14.1/jackson-core-2.14.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/core/jackson-databind/2.14.1/jackson-databind-2.14.1.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/core/jackson-databind/2.14.1/jackson-databind-2.14.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/jackson-base/2.14.1/jackson-base-2.14.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/jackson-bom/2.14.1/jackson-bom-2.14.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/jackson-parent/2.14/jackson-parent-2.14.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/oss-parent/48/oss-parent-48.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/github/ferstl/depgraph-maven-plugin/4.0.3/depgraph-maven-plugin-4.0.3.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/github/ferstl/depgraph-maven-plugin/4.0.3/depgraph-maven-plugin-4.0.3.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/errorprone/error_prone_annotations/2.11.0/error_prone_annotations-2.11.0.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/errorprone/error_prone_annotations/2.11.0/error_prone_annotations-2.11.0.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/errorprone/error_prone_parent/2.11.0/error_prone_parent-2.11.0.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/guava-parent/26.0-android/guava-parent-26.0-android.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/guava-parent/31.1-jre/guava-parent-31.1-jre.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/guava/31.1-jre/guava-31.1-jre.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/guava/31.1-jre/guava-31.1-jre.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/javax/annotation/javax.annotation-api/1.2/javax.annotation-api-1.2.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/javax/annotation/javax.annotation-api/1.2/javax.annotation-api-1.2.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/net/java/jvnet-parent/3/jvnet-parent-3.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/apache/19/apache-19.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/apache/25/apache-25.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/apache/27/apache-27.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/commons/commons-parent/47/commons-parent-47.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-artifact/3.8.6/maven-artifact-3.8.6.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-artifact/3.8.6/maven-artifact-3.8.6.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-model/3.8.6/maven-model-3.8.6.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-model/3.8.6/maven-model-3.8.6.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-parent/35/maven-parent-35.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-parent/37/maven-parent-37.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-plugin-api/3.8.6/maven-plugin-api-3.8.6.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-plugin-api/3.8.6/maven-plugin-api-3.8.6.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven/3.8.6/maven-3.8.6.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/shared/maven-common-artifact-filters/3.3.2/maven-common-artifact-filters-3.3.2.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/shared/maven-common-artifact-filters/3.3.2/maven-common-artifact-filters-3.3.2.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/shared/maven-shared-components/37/maven-shared-components-37.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/checkerframework/checker-qual/3.12.0/checker-qual-3.12.0.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/checkerframework/checker-qual/3.12.0/checker-qual-3.12.0.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-classworlds/2.6.0/plexus-classworlds-2.6.0.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-classworlds/2.6.0/plexus-classworlds-2.6.0.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-containers/1.5.5/plexus-containers-1.5.5.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-utils/3.0.24/plexus-utils-3.0.24.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-utils/3.3.1/plexus-utils-3.3.1.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-utils/3.3.1/plexus-utils-3.3.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus/2.0.7/plexus-2.0.7.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus/3.3.1/plexus-3.3.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus/4.0/plexus-4.0.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus/5.1/plexus-5.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.5/org.eclipse.sisu.inject-0.3.5.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.5/org.eclipse.sisu.inject-0.3.5.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.5/org.eclipse.sisu.plexus-0.3.5.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.5/org.eclipse.sisu.plexus-0.3.5.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/eclipse/sisu/sisu-inject/0.3.5/sisu-inject-0.3.5.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/eclipse/sisu/sisu-plexus/0.3.5/sisu-plexus-0.3.5.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/junit/junit-bom/5.9.1/junit-bom-5.9.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/sonatype/forge/forge-parent/10/forge-parent-10.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/sonatype/oss/oss-parent/7/oss-parent-7.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/sonatype/oss/oss-parent/9/oss-parent-9.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/sonatype/spice/spice-parent/17/spice-parent-17.pom diff --git a/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/pom.xml b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/pom.xml new file mode 100644 index 000000000000..ec4aaf128c18 --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/pom.xml @@ -0,0 +1,114 @@ + + + + 4.0.0 + + com.example + maven-sample + 1.0-SNAPSHOT + + maven-sample + + http://www.example.com + + + UTF-8 + 1.7 + 1.7 + + + + + junit + junit + 4.11 + test + + + + + + + exec-maven-plugin + org.codehaus.mojo + 1.1.1 + + + check-maven-version + package + + java + + + + + com.example.App + + + + com.diffplug.spotless + spotless-maven-plugin + 2.19.1 + + + + check + + compile + + + + + + /* FAIL ME */ + + + + + + + + + + + maven-clean-plugin + 3.1.0 + + + + maven-resources-plugin + 3.0.2 + + + maven-compiler-plugin + 3.8.0 + + + maven-surefire-plugin + 2.22.1 + + + maven-jar-plugin + 3.0.2 + + + maven-install-plugin + 2.5.2 + + + maven-deploy-plugin + 2.8.2 + + + + maven-site-plugin + 3.7.1 + + + maven-project-info-reports-plugin + 3.0.0 + + + + + \ No newline at end of file diff --git a/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/settings-xml.expected b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/settings-xml.expected new file mode 100644 index 000000000000..96c3675dc5f0 --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/settings-xml.expected @@ -0,0 +1,45 @@ + + + + + + + + preexisting-profile + + + + + + preexisting-repository + + A pre-existing repository + + https://nonesuch.example + + + + + + + + + codeql-depgraph-plugin-repo + + + codeql-depgraph-plugin-repo + CodeQL Dependency Graph Plugin Repository + file://[dist-root]/java/tools/ferstl-depgraph-dependencies/ + + + + + + + + preexisting-profile + + codeql-depgraph-plugin-repo + + + diff --git a/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/source_archive.expected b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/source_archive.expected new file mode 100644 index 000000000000..ea42987308b3 --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/source_archive.expected @@ -0,0 +1,9 @@ +home-dir-with-maven-settings/.m2/settings.xml +pom.xml +src/main/java/com/example/App.java +src/main/resources/my-app.properties +src/main/resources/page.xml +src/main/resources/struts.xml +src/test/java/com/example/AppTest.java +test-db/log/ext/javac.properties +test-db/working/settings.xml diff --git a/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/src/main/java/com/example/App.java b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/src/main/java/com/example/App.java new file mode 100644 index 000000000000..c9eec918587c --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/src/main/java/com/example/App.java @@ -0,0 +1,30 @@ +package com.example; + +import java.util.regex.Pattern; +import java.nio.file.Path; +import java.nio.file.Paths; + +/** + * Hello world! + * + */ +public class App +{ + public static void main( String[] args ) + { + System.out.println( "Hello World!" ); + String expectedVersion = System.getenv("EXPECT_MAVEN"); + Path mavenHome = Paths.get(System.getProperty("maven.home")).normalize(); + String observedVersion = mavenHome.getFileName().toString(); + if (expectedVersion != null && !expectedVersion.equals(observedVersion)) { + System.err.println("Wrong maven version, expected '" + expectedVersion + "' but got '" + observedVersion + "'" + mavenHome); + System.exit(1); + } + String commandMatcher = System.getenv("EXPECT_COMMAND_REGEX"); + String command = System.getProperty("sun.java.command"); + if (commandMatcher != null && !Pattern.matches(commandMatcher, command)) { + System.err.println("Wrong command line, '" + command + "' does not match '" + commandMatcher + "'"); + System.exit(1); + } + } +} diff --git a/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/src/main/resources/my-app.properties b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/src/main/resources/my-app.properties new file mode 100644 index 000000000000..e566b49a29a8 --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/src/main/resources/my-app.properties @@ -0,0 +1 @@ +version=1.0 diff --git a/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/src/main/resources/page.xml b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/src/main/resources/page.xml new file mode 100644 index 000000000000..2bab459cb031 --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/src/main/resources/page.xml @@ -0,0 +1,8 @@ + + +A sample + + +

Hello world!

+ + diff --git a/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/src/main/resources/struts.xml b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/src/main/resources/struts.xml new file mode 100644 index 000000000000..73fc0c6b9cb6 --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/src/main/resources/struts.xml @@ -0,0 +1,4 @@ + + +This is a sample file + diff --git a/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/src/test/java/com/example/AppTest.java new file mode 100644 index 000000000000..22a94ca6f01c --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/src/test/java/com/example/AppTest.java @@ -0,0 +1,20 @@ +package com.example; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +/** + * Unit test for simple App. + */ +public class AppTest +{ + /** + * Rigorous Test :-) + */ + @Test + public void shouldAnswerWithTrue() + { + assertTrue( true ); + } +} diff --git a/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/test.py b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/test.py new file mode 100644 index 000000000000..fc10b066d0bf --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-existing-settings-xml/test.py @@ -0,0 +1,9 @@ +import os +import os.path + +def test(codeql, java): + codeql.database.create(build_mode = "none", + _env={ + "_JAVA_OPTIONS": "-Duser.home=" + os.path.join(os.getcwd(), "home-dir-with-maven-settings") + } + ) diff --git a/java/ql/integration-tests/java/buildless-maven/maven-fetches.expected b/java/ql/integration-tests/java/buildless-maven/maven-fetches.expected new file mode 100644 index 000000000000..e4bddddc3e5d --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven/maven-fetches.expected @@ -0,0 +1,77 @@ +Downloaded from central: https://repo.maven.apache.org/maven2/junit/junit/4.11/junit-4.11.pom +Downloaded from central: https://repo.maven.apache.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.pom +Downloaded from central: https://repo.maven.apache.org/maven2/org/hamcrest/hamcrest-parent/1.3/hamcrest-parent-1.3.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/core/jackson-annotations/2.14.1/jackson-annotations-2.14.1.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/core/jackson-annotations/2.14.1/jackson-annotations-2.14.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/core/jackson-core/2.14.1/jackson-core-2.14.1.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/core/jackson-core/2.14.1/jackson-core-2.14.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/core/jackson-databind/2.14.1/jackson-databind-2.14.1.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/core/jackson-databind/2.14.1/jackson-databind-2.14.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/jackson-base/2.14.1/jackson-base-2.14.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/jackson-bom/2.14.1/jackson-bom-2.14.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/jackson-parent/2.14/jackson-parent-2.14.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/oss-parent/48/oss-parent-48.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/github/ferstl/depgraph-maven-plugin/4.0.3/depgraph-maven-plugin-4.0.3.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/github/ferstl/depgraph-maven-plugin/4.0.3/depgraph-maven-plugin-4.0.3.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/errorprone/error_prone_annotations/2.11.0/error_prone_annotations-2.11.0.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/errorprone/error_prone_annotations/2.11.0/error_prone_annotations-2.11.0.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/errorprone/error_prone_parent/2.11.0/error_prone_parent-2.11.0.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/guava-parent/26.0-android/guava-parent-26.0-android.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/guava-parent/31.1-jre/guava-parent-31.1-jre.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/guava/31.1-jre/guava-31.1-jre.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/guava/31.1-jre/guava-31.1-jre.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/javax/annotation/javax.annotation-api/1.2/javax.annotation-api-1.2.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/javax/annotation/javax.annotation-api/1.2/javax.annotation-api-1.2.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/net/java/jvnet-parent/3/jvnet-parent-3.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/apache/19/apache-19.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/apache/25/apache-25.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/apache/27/apache-27.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/commons/commons-parent/47/commons-parent-47.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-artifact/3.8.6/maven-artifact-3.8.6.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-artifact/3.8.6/maven-artifact-3.8.6.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-model/3.8.6/maven-model-3.8.6.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-model/3.8.6/maven-model-3.8.6.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-parent/35/maven-parent-35.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-parent/37/maven-parent-37.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-plugin-api/3.8.6/maven-plugin-api-3.8.6.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-plugin-api/3.8.6/maven-plugin-api-3.8.6.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven/3.8.6/maven-3.8.6.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/shared/maven-common-artifact-filters/3.3.2/maven-common-artifact-filters-3.3.2.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/shared/maven-common-artifact-filters/3.3.2/maven-common-artifact-filters-3.3.2.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/shared/maven-shared-components/37/maven-shared-components-37.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/checkerframework/checker-qual/3.12.0/checker-qual-3.12.0.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/checkerframework/checker-qual/3.12.0/checker-qual-3.12.0.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-classworlds/2.6.0/plexus-classworlds-2.6.0.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-classworlds/2.6.0/plexus-classworlds-2.6.0.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-containers/1.5.5/plexus-containers-1.5.5.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-utils/3.0.24/plexus-utils-3.0.24.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-utils/3.3.1/plexus-utils-3.3.1.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-utils/3.3.1/plexus-utils-3.3.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus/2.0.7/plexus-2.0.7.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus/3.3.1/plexus-3.3.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus/4.0/plexus-4.0.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus/5.1/plexus-5.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.5/org.eclipse.sisu.inject-0.3.5.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.5/org.eclipse.sisu.inject-0.3.5.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.5/org.eclipse.sisu.plexus-0.3.5.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.5/org.eclipse.sisu.plexus-0.3.5.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/eclipse/sisu/sisu-inject/0.3.5/sisu-inject-0.3.5.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/eclipse/sisu/sisu-plexus/0.3.5/sisu-plexus-0.3.5.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/junit/junit-bom/5.9.1/junit-bom-5.9.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/sonatype/forge/forge-parent/10/forge-parent-10.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/sonatype/oss/oss-parent/7/oss-parent-7.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/sonatype/oss/oss-parent/9/oss-parent-9.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/sonatype/spice/spice-parent/17/spice-parent-17.pom diff --git a/java/ql/integration-tests/java/buildless-maven/settings-xml.expected b/java/ql/integration-tests/java/buildless-maven/settings-xml.expected new file mode 100644 index 000000000000..348be0fbb962 --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven/settings-xml.expected @@ -0,0 +1,18 @@ + + + + + codeql-depgraph-plugin-repo + + + codeql-depgraph-plugin-repo + CodeQL Dependency Graph Plugin Repository + file://[dist-root]/java/tools/ferstl-depgraph-dependencies/ + + + + + + codeql-depgraph-plugin-repo + + diff --git a/java/ql/integration-tests/java/buildless-maven/source_archive.expected b/java/ql/integration-tests/java/buildless-maven/source_archive.expected index c6f2f49cf7d3..cdb0dca94210 100644 --- a/java/ql/integration-tests/java/buildless-maven/source_archive.expected +++ b/java/ql/integration-tests/java/buildless-maven/source_archive.expected @@ -5,3 +5,4 @@ src/main/resources/page.xml src/main/resources/struts.xml src/test/java/com/example/AppTest.java test-db/log/ext/javac.properties +test-db/working/settings.xml diff --git a/java/ql/integration-tests/java/buildless-maven/test.py b/java/ql/integration-tests/java/buildless-maven/test.py index a92ac46584c3..958eddca2c71 100644 --- a/java/ql/integration-tests/java/buildless-maven/test.py +++ b/java/ql/integration-tests/java/buildless-maven/test.py @@ -1,7 +1,9 @@ +import os +import os.path + def test(codeql, java): - codeql.database.create( + codeql.database.create(build_mode = "none", _env={ - "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true", - "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true", + "_JAVA_OPTIONS": "-Duser.home=" + os.path.join(os.getcwd(), "empty-home") } ) From 8b0bd8c8ad20989b8c67c3a665daa30ecfae6dc2 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 16 Oct 2024 16:50:19 +0100 Subject: [PATCH 190/217] Adjust test expectations --- .../java/buildless-maven-executable-war/source_archive.expected | 1 + .../java/buildless-maven-multimodule/source_archive.expected | 1 + .../java/buildless-maven-timeout/diagnostics.expected | 2 +- .../java/buildless-maven-timeout/source_archive.expected | 1 + .../diagnostics.expected | 2 +- .../java/buildless-sibling-projects/source_archive.expected | 1 + 6 files changed, 6 insertions(+), 2 deletions(-) diff --git a/java/ql/integration-tests/java/buildless-maven-executable-war/source_archive.expected b/java/ql/integration-tests/java/buildless-maven-executable-war/source_archive.expected index c6f2f49cf7d3..cdb0dca94210 100644 --- a/java/ql/integration-tests/java/buildless-maven-executable-war/source_archive.expected +++ b/java/ql/integration-tests/java/buildless-maven-executable-war/source_archive.expected @@ -5,3 +5,4 @@ src/main/resources/page.xml src/main/resources/struts.xml src/test/java/com/example/AppTest.java test-db/log/ext/javac.properties +test-db/working/settings.xml diff --git a/java/ql/integration-tests/java/buildless-maven-multimodule/source_archive.expected b/java/ql/integration-tests/java/buildless-maven-multimodule/source_archive.expected index 06978379cfb1..ab5cf6e4ba17 100644 --- a/java/ql/integration-tests/java/buildless-maven-multimodule/source_archive.expected +++ b/java/ql/integration-tests/java/buildless-maven-multimodule/source_archive.expected @@ -12,3 +12,4 @@ submod2/src/main/resources/page.xml submod2/src/main/resources/struts.xml submod2/src/test/java/com/example/AppTest2.java test-db/log/ext/javac.properties +test-db/working/settings.xml diff --git a/java/ql/integration-tests/java/buildless-maven-timeout/diagnostics.expected b/java/ql/integration-tests/java/buildless-maven-timeout/diagnostics.expected index 1d347c16acb3..7a8f76b3eee1 100644 --- a/java/ql/integration-tests/java/buildless-maven-timeout/diagnostics.expected +++ b/java/ql/integration-tests/java/buildless-maven-timeout/diagnostics.expected @@ -83,7 +83,7 @@ } } { - "markdownMessage": "Running the Maven plugin `com.github.ferstl:depgraph-maven-plugin:4.0.2:graph` failed. This means precise dependency information will be unavailable, and so dependencies will be guessed based on Java package names. Consider investigating why this plugin fails to run.", + "markdownMessage": "Running the Maven plugin `com.github.ferstl:depgraph-maven-plugin:4.0.3:graph` failed. This means precise dependency information will be unavailable, and so dependencies will be guessed based on Java package names. Consider investigating why this plugin fails to run.", "severity": "note", "source": { "extractorName": "java", diff --git a/java/ql/integration-tests/java/buildless-maven-timeout/source_archive.expected b/java/ql/integration-tests/java/buildless-maven-timeout/source_archive.expected index f73dc023c393..77ca5e58c406 100644 --- a/java/ql/integration-tests/java/buildless-maven-timeout/source_archive.expected +++ b/java/ql/integration-tests/java/buildless-maven-timeout/source_archive.expected @@ -6,3 +6,4 @@ src/main/resources/page.xml src/main/resources/struts.xml src/test/java/com/example/AppTest.java test-db/log/ext/javac.properties +test-db/working/settings.xml diff --git a/java/ql/integration-tests/java/buildless-maven-tolerate-unavailable-dependency/diagnostics.expected b/java/ql/integration-tests/java/buildless-maven-tolerate-unavailable-dependency/diagnostics.expected index 7cd6795d4413..1d60d08fcf5b 100644 --- a/java/ql/integration-tests/java/buildless-maven-tolerate-unavailable-dependency/diagnostics.expected +++ b/java/ql/integration-tests/java/buildless-maven-tolerate-unavailable-dependency/diagnostics.expected @@ -97,7 +97,7 @@ } } { - "markdownMessage": "Running the Maven plugin `com.github.ferstl:depgraph-maven-plugin:4.0.2:graph` yielded an artifact transfer exception. This means some dependency information will be unavailable, and so some dependencies will be guessed based on Java package names. Consider investigating why this plugin encountered errors retrieving dependencies.", + "markdownMessage": "Running the Maven plugin `com.github.ferstl:depgraph-maven-plugin:4.0.3:graph` yielded an artifact transfer exception. This means some dependency information will be unavailable, and so some dependencies will be guessed based on Java package names. Consider investigating why this plugin encountered errors retrieving dependencies.", "severity": "note", "source": { "extractorName": "java", diff --git a/java/ql/integration-tests/java/buildless-sibling-projects/source_archive.expected b/java/ql/integration-tests/java/buildless-sibling-projects/source_archive.expected index d0e6787e268e..790a13864ee3 100644 --- a/java/ql/integration-tests/java/buildless-sibling-projects/source_archive.expected +++ b/java/ql/integration-tests/java/buildless-sibling-projects/source_archive.expected @@ -27,3 +27,4 @@ maven-project-2/src/main/resources/page.xml maven-project-2/src/main/resources/struts.xml maven-project-2/src/test/java/com/example/AppTest4.java test-db/log/ext/javac.properties +test-db/working/settings.xml From 88b7a9fcb50400fd8f92b490004c119a7acf8ba8 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Thu, 17 Oct 2024 16:38:53 -0400 Subject: [PATCH 191/217] Java: update qhelp link --- java/ql/src/Security/CWE/CWE-352/SpringCSRFProtection.qhelp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-352/SpringCSRFProtection.qhelp b/java/ql/src/Security/CWE/CWE-352/SpringCSRFProtection.qhelp index af1119bcd1c5..b9bda57ad09e 100644 --- a/java/ql/src/Security/CWE/CWE-352/SpringCSRFProtection.qhelp +++ b/java/ql/src/Security/CWE/CWE-352/SpringCSRFProtection.qhelp @@ -5,7 +5,7 @@

When you set up a web server to receive a request from a client without any mechanism for verifying that it was intentionally sent, then it is vulnerable to attack. An attacker can trick a client into making an unintended request to the web server that will be treated as -an authentic request. This can be done via a URL, image load, XMLHttpRequest, etc. and can +an authentic request. This can be done via a URL, image load, XMLHttpRequest, etc. and can result in exposure of data or unintended code execution.

@@ -30,9 +30,9 @@ OWASP:
  • Spring Security Reference: - + Cross Site Request Forgery (CSRF) for Servlet Environments .
  • - \ No newline at end of file + From bacf448388d6eb8fa4b101d2c65422c4d3ddc367 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 17 Oct 2024 22:06:49 +0100 Subject: [PATCH 192/217] Add change note --- .../lib/change-notes/2024-10-17-ast-viewer-type-param-decl.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 go/ql/lib/change-notes/2024-10-17-ast-viewer-type-param-decl.md diff --git a/go/ql/lib/change-notes/2024-10-17-ast-viewer-type-param-decl.md b/go/ql/lib/change-notes/2024-10-17-ast-viewer-type-param-decl.md new file mode 100644 index 000000000000..4d5fe89cee08 --- /dev/null +++ b/go/ql/lib/change-notes/2024-10-17-ast-viewer-type-param-decl.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The AST viewer now shows type parameter declarations in the correct place in the AST. From 272d12fee152e8e1439468043b82b3c0009ab1cd Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 17 Oct 2024 16:32:35 +0200 Subject: [PATCH 193/217] Rust: Step correctly over method arguments Previously the math was wrong and the first argument (with `i` being `0`) had two edges out of it. --- .../rust/controlflow/internal/ControlFlowGraphImpl.qll | 5 +---- rust/ql/test/library-tests/controlflow/Cfg.expected | 5 ++--- rust/ql/test/library-tests/variables/Cfg.expected | 6 +++--- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index 44f6ec8775ea..f076b9f7ff9b 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -524,10 +524,7 @@ class MatchExprTree extends PostOrderTree instanceof MatchExpr { class MethodCallExprTree extends StandardPostOrderTree, MethodCallExpr { override AstNode getChildNode(int i) { - i = 0 and - result = this.getReceiver() - or - result = this.getArgList().getArg(i + 1) + if i = 0 then result = this.getReceiver() else result = this.getArgList().getArg(i - 1) } } diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 2df3563cf3f5..5cdc83a83a94 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -19,10 +19,9 @@ edges | test.rs:10:13:10:19 | map | test.rs:11:9:11:28 | ExprStmt | match | | test.rs:10:23:10:34 | PathExpr | test.rs:10:23:10:36 | CallExpr | | | test.rs:10:23:10:36 | CallExpr | test.rs:10:13:10:19 | map | | -| test.rs:11:9:11:11 | map | test.rs:11:9:11:27 | MethodCallExpr | | +| test.rs:11:9:11:11 | map | test.rs:11:20:11:21 | 37 | | | test.rs:11:9:11:27 | MethodCallExpr | test.rs:9:22:12:5 | BlockExpr | | -| test.rs:11:9:11:28 | ExprStmt | test.rs:11:20:11:21 | 37 | | -| test.rs:11:20:11:21 | 37 | test.rs:11:9:11:11 | map | | +| test.rs:11:9:11:28 | ExprStmt | test.rs:11:9:11:11 | map | | | test.rs:11:20:11:21 | 37 | test.rs:11:24:11:26 | "a" | | | test.rs:11:24:11:26 | "a" | test.rs:11:9:11:27 | MethodCallExpr | | | test.rs:17:5:33:5 | enter test_break_and_continue | test.rs:17:32:17:32 | n | | diff --git a/rust/ql/test/library-tests/variables/Cfg.expected b/rust/ql/test/library-tests/variables/Cfg.expected index 1c04117a2ccd..19ffcff93d76 100644 --- a/rust/ql/test/library-tests/variables/Cfg.expected +++ b/rust/ql/test/library-tests/variables/Cfg.expected @@ -707,10 +707,10 @@ edges | variables.rs:332:5:332:17 | ExprStmt | variables.rs:332:5:332:13 | PathExpr | | | variables.rs:332:15:332:15 | a | variables.rs:332:5:332:16 | CallExpr | | | variables.rs:333:5:333:27 | MethodCallExpr | variables.rs:334:5:334:17 | ExprStmt | | -| variables.rs:333:5:333:28 | ExprStmt | variables.rs:333:25:333:26 | 10 | | -| variables.rs:333:6:333:11 | RefExpr | variables.rs:333:5:333:27 | MethodCallExpr | | +| variables.rs:333:5:333:28 | ExprStmt | variables.rs:333:11:333:11 | a | | +| variables.rs:333:6:333:11 | RefExpr | variables.rs:333:25:333:26 | 10 | | | variables.rs:333:11:333:11 | a | variables.rs:333:6:333:11 | RefExpr | | -| variables.rs:333:25:333:26 | 10 | variables.rs:333:11:333:11 | a | | +| variables.rs:333:25:333:26 | 10 | variables.rs:333:5:333:27 | MethodCallExpr | | | variables.rs:334:5:334:13 | PathExpr | variables.rs:334:15:334:15 | a | | | variables.rs:334:5:334:16 | CallExpr | variables.rs:329:17:335:1 | BlockExpr | | | variables.rs:334:5:334:17 | ExprStmt | variables.rs:334:5:334:13 | PathExpr | | From b0625f83c62f353a986d919d93856d721e61251f Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 18 Oct 2024 09:54:31 +0200 Subject: [PATCH 194/217] Rust: Add CFG test of range patterns --- .../library-tests/controlflow/Cfg.expected | 197 ++++++++++-------- .../ql/test/library-tests/controlflow/test.rs | 9 + 2 files changed, 120 insertions(+), 86 deletions(-) diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 5cdc83a83a94..f5f49c6fdc74 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -710,89 +710,114 @@ edges | test.rs:329:15:329:16 | st | test.rs:330:13:330:23 | RecordPat | | | test.rs:330:13:330:23 | RecordPat | test.rs:330:28:330:28 | 1 | match | | test.rs:330:28:330:28 | 1 | test.rs:329:9:331:9 | MatchExpr | | -| test.rs:336:5:341:5 | enter test_infinite_loop | test.rs:337:9:339:9 | ExprStmt | | -| test.rs:337:9:339:9 | ExprStmt | test.rs:338:13:338:13 | 1 | | -| test.rs:337:14:339:9 | BlockExpr | test.rs:338:13:338:13 | 1 | | -| test.rs:338:13:338:13 | 1 | test.rs:337:14:339:9 | BlockExpr | | -| test.rs:344:1:349:1 | enter dead_code | test.rs:345:5:347:5 | ExprStmt | | -| test.rs:344:1:349:1 | exit dead_code (normal) | test.rs:344:1:349:1 | exit dead_code | | -| test.rs:345:5:347:5 | ExprStmt | test.rs:345:9:345:12 | true | | -| test.rs:345:9:345:12 | true | test.rs:346:9:346:17 | ExprStmt | true | -| test.rs:346:9:346:16 | ReturnExpr | test.rs:344:1:349:1 | exit dead_code (normal) | return | -| test.rs:346:9:346:17 | ExprStmt | test.rs:346:16:346:16 | 0 | | -| test.rs:346:16:346:16 | 0 | test.rs:346:9:346:16 | ReturnExpr | | -| test.rs:351:1:364:1 | enter labelled_block1 | test.rs:352:5:363:6 | LetStmt | | -| test.rs:351:1:364:1 | exit labelled_block1 (normal) | test.rs:351:1:364:1 | exit labelled_block1 | | -| test.rs:351:29:364:1 | BlockExpr | test.rs:351:1:364:1 | exit labelled_block1 (normal) | | -| test.rs:352:5:363:6 | LetStmt | test.rs:353:9:353:19 | ExprStmt | | -| test.rs:352:9:352:14 | result | test.rs:351:29:364:1 | BlockExpr | match | -| test.rs:352:18:363:5 | BlockExpr | test.rs:352:9:352:14 | result | | -| test.rs:353:9:353:16 | PathExpr | test.rs:353:9:353:18 | CallExpr | | -| test.rs:353:9:353:18 | CallExpr | test.rs:354:9:356:9 | ExprStmt | | -| test.rs:353:9:353:19 | ExprStmt | test.rs:353:9:353:16 | PathExpr | | -| test.rs:354:9:356:9 | ExprStmt | test.rs:354:12:354:28 | PathExpr | | -| test.rs:354:9:356:9 | IfExpr | test.rs:357:9:357:24 | ExprStmt | | -| test.rs:354:12:354:28 | PathExpr | test.rs:354:12:354:30 | CallExpr | | -| test.rs:354:12:354:30 | CallExpr | test.rs:354:9:356:9 | IfExpr | false | -| test.rs:354:12:354:30 | CallExpr | test.rs:355:13:355:27 | ExprStmt | true | -| test.rs:355:13:355:26 | BreakExpr | test.rs:352:18:363:5 | BlockExpr | break | -| test.rs:355:13:355:27 | ExprStmt | test.rs:355:26:355:26 | 1 | | -| test.rs:355:26:355:26 | 1 | test.rs:355:13:355:26 | BreakExpr | | -| test.rs:357:9:357:21 | PathExpr | test.rs:357:9:357:23 | CallExpr | | -| test.rs:357:9:357:23 | CallExpr | test.rs:358:9:360:9 | ExprStmt | | -| test.rs:357:9:357:24 | ExprStmt | test.rs:357:9:357:21 | PathExpr | | -| test.rs:358:9:360:9 | ExprStmt | test.rs:358:12:358:28 | PathExpr | | -| test.rs:358:9:360:9 | IfExpr | test.rs:361:9:361:24 | ExprStmt | | -| test.rs:358:12:358:28 | PathExpr | test.rs:358:12:358:30 | CallExpr | | -| test.rs:358:12:358:30 | CallExpr | test.rs:358:9:360:9 | IfExpr | false | -| test.rs:358:12:358:30 | CallExpr | test.rs:359:13:359:27 | ExprStmt | true | -| test.rs:359:13:359:26 | BreakExpr | test.rs:352:18:363:5 | BlockExpr | break | -| test.rs:359:13:359:27 | ExprStmt | test.rs:359:26:359:26 | 2 | | -| test.rs:359:26:359:26 | 2 | test.rs:359:13:359:26 | BreakExpr | | -| test.rs:361:9:361:21 | PathExpr | test.rs:361:9:361:23 | CallExpr | | -| test.rs:361:9:361:23 | CallExpr | test.rs:362:9:362:9 | 3 | | -| test.rs:361:9:361:24 | ExprStmt | test.rs:361:9:361:21 | PathExpr | | -| test.rs:362:9:362:9 | 3 | test.rs:352:18:363:5 | BlockExpr | | -| test.rs:366:1:374:1 | enter labelled_block2 | test.rs:367:5:373:6 | LetStmt | | -| test.rs:366:1:374:1 | exit labelled_block2 (normal) | test.rs:366:1:374:1 | exit labelled_block2 | | -| test.rs:366:29:374:1 | BlockExpr | test.rs:366:1:374:1 | exit labelled_block2 (normal) | | -| test.rs:367:5:373:6 | LetStmt | test.rs:368:9:368:34 | LetStmt | | -| test.rs:367:9:367:14 | result | test.rs:366:29:374:1 | BlockExpr | match | -| test.rs:367:18:373:5 | BlockExpr | test.rs:367:9:367:14 | result | | -| test.rs:368:9:368:34 | LetStmt | test.rs:368:30:368:33 | PathExpr | | -| test.rs:368:13:368:13 | x | test.rs:369:9:371:10 | LetStmt | match | -| test.rs:368:30:368:33 | PathExpr | test.rs:368:13:368:13 | x | | -| test.rs:369:9:371:10 | LetStmt | test.rs:369:23:369:23 | x | | -| test.rs:369:13:369:19 | TupleStructPat | test.rs:369:18:369:18 | y | match | -| test.rs:369:13:369:19 | TupleStructPat | test.rs:370:13:370:27 | ExprStmt | no-match | -| test.rs:369:18:369:18 | y | test.rs:372:9:372:9 | x | match | -| test.rs:369:23:369:23 | x | test.rs:369:13:369:19 | TupleStructPat | | -| test.rs:370:13:370:26 | BreakExpr | test.rs:367:18:373:5 | BlockExpr | break | -| test.rs:370:13:370:27 | ExprStmt | test.rs:370:26:370:26 | 1 | | -| test.rs:370:26:370:26 | 1 | test.rs:370:13:370:26 | BreakExpr | | -| test.rs:372:9:372:9 | x | test.rs:367:18:373:5 | BlockExpr | | -| test.rs:376:1:382:1 | enter test_nested_function | test.rs:377:5:377:18 | LetStmt | | -| test.rs:376:1:382:1 | exit test_nested_function (normal) | test.rs:376:1:382:1 | exit test_nested_function | | -| test.rs:376:27:382:1 | BlockExpr | test.rs:376:1:382:1 | exit test_nested_function (normal) | | -| test.rs:377:5:377:18 | LetStmt | test.rs:377:17:377:17 | 0 | | -| test.rs:377:9:377:13 | x | test.rs:378:5:380:5 | nested | match | -| test.rs:377:17:377:17 | 0 | test.rs:377:9:377:13 | x | | -| test.rs:378:5:380:5 | enter nested | test.rs:378:15:378:15 | x | | -| test.rs:378:5:380:5 | exit nested (normal) | test.rs:378:5:380:5 | exit nested | | -| test.rs:378:5:380:5 | nested | test.rs:381:5:381:19 | ExprStmt | | -| test.rs:378:15:378:15 | x | test.rs:378:15:378:25 | Param | match | -| test.rs:378:15:378:25 | Param | test.rs:379:9:379:16 | ExprStmt | | -| test.rs:378:28:380:5 | BlockExpr | test.rs:378:5:380:5 | exit nested (normal) | | -| test.rs:379:9:379:10 | * ... | test.rs:379:15:379:15 | 1 | | -| test.rs:379:9:379:15 | ... += ... | test.rs:378:28:380:5 | BlockExpr | | -| test.rs:379:9:379:16 | ExprStmt | test.rs:379:10:379:10 | x | | -| test.rs:379:10:379:10 | x | test.rs:379:9:379:10 | * ... | | -| test.rs:379:15:379:15 | 1 | test.rs:379:9:379:15 | ... += ... | | -| test.rs:381:5:381:10 | PathExpr | test.rs:381:17:381:17 | x | | -| test.rs:381:5:381:18 | CallExpr | test.rs:376:27:382:1 | BlockExpr | | -| test.rs:381:5:381:19 | ExprStmt | test.rs:381:5:381:10 | PathExpr | | -| test.rs:381:12:381:17 | RefExpr | test.rs:381:5:381:18 | CallExpr | | -| test.rs:381:17:381:17 | x | test.rs:381:12:381:17 | RefExpr | | +| test.rs:334:5:341:5 | enter range_pattern | test.rs:335:15:335:16 | 42 | | +| test.rs:334:5:341:5 | exit range_pattern (normal) | test.rs:334:5:341:5 | exit range_pattern | | +| test.rs:334:31:341:5 | BlockExpr | test.rs:334:5:341:5 | exit range_pattern (normal) | | +| test.rs:335:9:340:9 | MatchExpr | test.rs:334:31:341:5 | BlockExpr | | +| test.rs:335:15:335:16 | 42 | test.rs:336:13:336:15 | RangePat | | +| test.rs:336:13:336:15 | RangePat | test.rs:336:15:336:15 | LiteralPat | match | +| test.rs:336:13:336:15 | RangePat | test.rs:336:20:336:20 | 1 | match | +| test.rs:336:13:336:15 | RangePat | test.rs:337:13:337:16 | RangePat | no-match | +| test.rs:336:15:336:15 | LiteralPat | test.rs:336:20:336:20 | 1 | match | +| test.rs:336:15:336:15 | LiteralPat | test.rs:337:13:337:16 | RangePat | no-match | +| test.rs:336:20:336:20 | 1 | test.rs:335:9:340:9 | MatchExpr | | +| test.rs:337:13:337:13 | LiteralPat | test.rs:337:16:337:16 | LiteralPat | match | +| test.rs:337:13:337:13 | LiteralPat | test.rs:338:13:338:15 | RangePat | no-match | +| test.rs:337:13:337:16 | RangePat | test.rs:337:13:337:13 | LiteralPat | match | +| test.rs:337:13:337:16 | RangePat | test.rs:338:13:338:15 | RangePat | no-match | +| test.rs:337:16:337:16 | LiteralPat | test.rs:337:21:337:21 | 2 | match | +| test.rs:337:16:337:16 | LiteralPat | test.rs:338:13:338:15 | RangePat | no-match | +| test.rs:337:21:337:21 | 2 | test.rs:335:9:340:9 | MatchExpr | | +| test.rs:338:13:338:13 | LiteralPat | test.rs:338:20:338:20 | 3 | match | +| test.rs:338:13:338:13 | LiteralPat | test.rs:339:13:339:14 | RestPat | no-match | +| test.rs:338:13:338:15 | RangePat | test.rs:338:13:338:13 | LiteralPat | match | +| test.rs:338:13:338:15 | RangePat | test.rs:339:13:339:14 | RestPat | no-match | +| test.rs:338:20:338:20 | 3 | test.rs:335:9:340:9 | MatchExpr | | +| test.rs:339:13:339:14 | RestPat | test.rs:339:19:339:19 | 4 | match | +| test.rs:339:19:339:19 | 4 | test.rs:335:9:340:9 | MatchExpr | | +| test.rs:345:5:350:5 | enter test_infinite_loop | test.rs:346:9:348:9 | ExprStmt | | +| test.rs:346:9:348:9 | ExprStmt | test.rs:347:13:347:13 | 1 | | +| test.rs:346:14:348:9 | BlockExpr | test.rs:347:13:347:13 | 1 | | +| test.rs:347:13:347:13 | 1 | test.rs:346:14:348:9 | BlockExpr | | +| test.rs:353:1:358:1 | enter dead_code | test.rs:354:5:356:5 | ExprStmt | | +| test.rs:353:1:358:1 | exit dead_code (normal) | test.rs:353:1:358:1 | exit dead_code | | +| test.rs:354:5:356:5 | ExprStmt | test.rs:354:9:354:12 | true | | +| test.rs:354:9:354:12 | true | test.rs:355:9:355:17 | ExprStmt | true | +| test.rs:355:9:355:16 | ReturnExpr | test.rs:353:1:358:1 | exit dead_code (normal) | return | +| test.rs:355:9:355:17 | ExprStmt | test.rs:355:16:355:16 | 0 | | +| test.rs:355:16:355:16 | 0 | test.rs:355:9:355:16 | ReturnExpr | | +| test.rs:360:1:373:1 | enter labelled_block1 | test.rs:361:5:372:6 | LetStmt | | +| test.rs:360:1:373:1 | exit labelled_block1 (normal) | test.rs:360:1:373:1 | exit labelled_block1 | | +| test.rs:360:29:373:1 | BlockExpr | test.rs:360:1:373:1 | exit labelled_block1 (normal) | | +| test.rs:361:5:372:6 | LetStmt | test.rs:362:9:362:19 | ExprStmt | | +| test.rs:361:9:361:14 | result | test.rs:360:29:373:1 | BlockExpr | match | +| test.rs:361:18:372:5 | BlockExpr | test.rs:361:9:361:14 | result | | +| test.rs:362:9:362:16 | PathExpr | test.rs:362:9:362:18 | CallExpr | | +| test.rs:362:9:362:18 | CallExpr | test.rs:363:9:365:9 | ExprStmt | | +| test.rs:362:9:362:19 | ExprStmt | test.rs:362:9:362:16 | PathExpr | | +| test.rs:363:9:365:9 | ExprStmt | test.rs:363:12:363:28 | PathExpr | | +| test.rs:363:9:365:9 | IfExpr | test.rs:366:9:366:24 | ExprStmt | | +| test.rs:363:12:363:28 | PathExpr | test.rs:363:12:363:30 | CallExpr | | +| test.rs:363:12:363:30 | CallExpr | test.rs:363:9:365:9 | IfExpr | false | +| test.rs:363:12:363:30 | CallExpr | test.rs:364:13:364:27 | ExprStmt | true | +| test.rs:364:13:364:26 | BreakExpr | test.rs:361:18:372:5 | BlockExpr | break | +| test.rs:364:13:364:27 | ExprStmt | test.rs:364:26:364:26 | 1 | | +| test.rs:364:26:364:26 | 1 | test.rs:364:13:364:26 | BreakExpr | | +| test.rs:366:9:366:21 | PathExpr | test.rs:366:9:366:23 | CallExpr | | +| test.rs:366:9:366:23 | CallExpr | test.rs:367:9:369:9 | ExprStmt | | +| test.rs:366:9:366:24 | ExprStmt | test.rs:366:9:366:21 | PathExpr | | +| test.rs:367:9:369:9 | ExprStmt | test.rs:367:12:367:28 | PathExpr | | +| test.rs:367:9:369:9 | IfExpr | test.rs:370:9:370:24 | ExprStmt | | +| test.rs:367:12:367:28 | PathExpr | test.rs:367:12:367:30 | CallExpr | | +| test.rs:367:12:367:30 | CallExpr | test.rs:367:9:369:9 | IfExpr | false | +| test.rs:367:12:367:30 | CallExpr | test.rs:368:13:368:27 | ExprStmt | true | +| test.rs:368:13:368:26 | BreakExpr | test.rs:361:18:372:5 | BlockExpr | break | +| test.rs:368:13:368:27 | ExprStmt | test.rs:368:26:368:26 | 2 | | +| test.rs:368:26:368:26 | 2 | test.rs:368:13:368:26 | BreakExpr | | +| test.rs:370:9:370:21 | PathExpr | test.rs:370:9:370:23 | CallExpr | | +| test.rs:370:9:370:23 | CallExpr | test.rs:371:9:371:9 | 3 | | +| test.rs:370:9:370:24 | ExprStmt | test.rs:370:9:370:21 | PathExpr | | +| test.rs:371:9:371:9 | 3 | test.rs:361:18:372:5 | BlockExpr | | +| test.rs:375:1:383:1 | enter labelled_block2 | test.rs:376:5:382:6 | LetStmt | | +| test.rs:375:1:383:1 | exit labelled_block2 (normal) | test.rs:375:1:383:1 | exit labelled_block2 | | +| test.rs:375:29:383:1 | BlockExpr | test.rs:375:1:383:1 | exit labelled_block2 (normal) | | +| test.rs:376:5:382:6 | LetStmt | test.rs:377:9:377:34 | LetStmt | | +| test.rs:376:9:376:14 | result | test.rs:375:29:383:1 | BlockExpr | match | +| test.rs:376:18:382:5 | BlockExpr | test.rs:376:9:376:14 | result | | +| test.rs:377:9:377:34 | LetStmt | test.rs:377:30:377:33 | PathExpr | | +| test.rs:377:13:377:13 | x | test.rs:378:9:380:10 | LetStmt | match | +| test.rs:377:30:377:33 | PathExpr | test.rs:377:13:377:13 | x | | +| test.rs:378:9:380:10 | LetStmt | test.rs:378:23:378:23 | x | | +| test.rs:378:13:378:19 | TupleStructPat | test.rs:378:18:378:18 | y | match | +| test.rs:378:13:378:19 | TupleStructPat | test.rs:379:13:379:27 | ExprStmt | no-match | +| test.rs:378:18:378:18 | y | test.rs:381:9:381:9 | x | match | +| test.rs:378:23:378:23 | x | test.rs:378:13:378:19 | TupleStructPat | | +| test.rs:379:13:379:26 | BreakExpr | test.rs:376:18:382:5 | BlockExpr | break | +| test.rs:379:13:379:27 | ExprStmt | test.rs:379:26:379:26 | 1 | | +| test.rs:379:26:379:26 | 1 | test.rs:379:13:379:26 | BreakExpr | | +| test.rs:381:9:381:9 | x | test.rs:376:18:382:5 | BlockExpr | | +| test.rs:385:1:391:1 | enter test_nested_function | test.rs:386:5:386:18 | LetStmt | | +| test.rs:385:1:391:1 | exit test_nested_function (normal) | test.rs:385:1:391:1 | exit test_nested_function | | +| test.rs:385:27:391:1 | BlockExpr | test.rs:385:1:391:1 | exit test_nested_function (normal) | | +| test.rs:386:5:386:18 | LetStmt | test.rs:386:17:386:17 | 0 | | +| test.rs:386:9:386:13 | x | test.rs:387:5:389:5 | nested | match | +| test.rs:386:17:386:17 | 0 | test.rs:386:9:386:13 | x | | +| test.rs:387:5:389:5 | enter nested | test.rs:387:15:387:15 | x | | +| test.rs:387:5:389:5 | exit nested (normal) | test.rs:387:5:389:5 | exit nested | | +| test.rs:387:5:389:5 | nested | test.rs:390:5:390:19 | ExprStmt | | +| test.rs:387:15:387:15 | x | test.rs:387:15:387:25 | Param | match | +| test.rs:387:15:387:25 | Param | test.rs:388:9:388:16 | ExprStmt | | +| test.rs:387:28:389:5 | BlockExpr | test.rs:387:5:389:5 | exit nested (normal) | | +| test.rs:388:9:388:10 | * ... | test.rs:388:15:388:15 | 1 | | +| test.rs:388:9:388:15 | ... += ... | test.rs:387:28:389:5 | BlockExpr | | +| test.rs:388:9:388:16 | ExprStmt | test.rs:388:10:388:10 | x | | +| test.rs:388:10:388:10 | x | test.rs:388:9:388:10 | * ... | | +| test.rs:388:15:388:15 | 1 | test.rs:388:9:388:15 | ... += ... | | +| test.rs:390:5:390:10 | PathExpr | test.rs:390:17:390:17 | x | | +| test.rs:390:5:390:18 | CallExpr | test.rs:385:27:391:1 | BlockExpr | | +| test.rs:390:5:390:19 | ExprStmt | test.rs:390:5:390:10 | PathExpr | | +| test.rs:390:12:390:17 | RefExpr | test.rs:390:5:390:18 | CallExpr | | +| test.rs:390:17:390:17 | x | test.rs:390:12:390:17 | RefExpr | | breakTarget | test.rs:25:17:25:21 | BreakExpr | test.rs:19:9:31:9 | LoopExpr | | test.rs:39:21:39:25 | BreakExpr | test.rs:37:13:44:13 | LoopExpr | @@ -804,9 +829,9 @@ breakTarget | test.rs:179:17:179:28 | BreakExpr | test.rs:177:13:182:9 | LoopExpr | | test.rs:192:17:192:35 | BreakExpr | test.rs:190:13:195:9 | LoopExpr | | test.rs:204:13:204:30 | BreakExpr | test.rs:203:13:205:9 | BlockExpr | -| test.rs:355:13:355:26 | BreakExpr | test.rs:352:18:363:5 | BlockExpr | -| test.rs:359:13:359:26 | BreakExpr | test.rs:352:18:363:5 | BlockExpr | -| test.rs:370:13:370:26 | BreakExpr | test.rs:367:18:373:5 | BlockExpr | +| test.rs:364:13:364:26 | BreakExpr | test.rs:361:18:372:5 | BlockExpr | +| test.rs:368:13:368:26 | BreakExpr | test.rs:361:18:372:5 | BlockExpr | +| test.rs:379:13:379:26 | BreakExpr | test.rs:376:18:382:5 | BlockExpr | continueTarget | test.rs:28:17:28:24 | ContinueExpr | test.rs:19:9:31:9 | LoopExpr | | test.rs:54:21:54:28 | ContinueExpr | test.rs:52:13:59:13 | LoopExpr | diff --git a/rust/ql/test/library-tests/controlflow/test.rs b/rust/ql/test/library-tests/controlflow/test.rs index 571e4c69fd2e..0707f56157ac 100644 --- a/rust/ql/test/library-tests/controlflow/test.rs +++ b/rust/ql/test/library-tests/controlflow/test.rs @@ -330,6 +330,15 @@ mod patterns { MyStruct {} => 1, } } + + fn range_pattern() -> i64 { + match 42 { + ..0 => 1, + 1..2 => 2, + 5.. => 3, + .. => 4, + } + } } mod divergence { From 7aa28a044979b2fb54d924c9bdd8779819f49985 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 18 Oct 2024 10:07:35 +0200 Subject: [PATCH 195/217] Rust: Fix multiple CFG successors in range pattern without lower bound --- .../codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll | 2 +- rust/ql/test/library-tests/controlflow/Cfg.expected | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index f076b9f7ff9b..2f273c367112 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -612,7 +612,7 @@ module PatternTrees { result = rank[i + 1](Pat pat, int j | pat = this.getPat(j) | pat order by j) } - predicate isEmpty() { not any(Pat p) = this.getPat(0) } + predicate isEmpty() { not any(Pat p) = this.getPatRanked(0) } override predicate propagatesAbnormal(AstNode child) { child = this.getPatRanked(_) } diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index f5f49c6fdc74..09077375f4a9 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -716,7 +716,6 @@ edges | test.rs:335:9:340:9 | MatchExpr | test.rs:334:31:341:5 | BlockExpr | | | test.rs:335:15:335:16 | 42 | test.rs:336:13:336:15 | RangePat | | | test.rs:336:13:336:15 | RangePat | test.rs:336:15:336:15 | LiteralPat | match | -| test.rs:336:13:336:15 | RangePat | test.rs:336:20:336:20 | 1 | match | | test.rs:336:13:336:15 | RangePat | test.rs:337:13:337:16 | RangePat | no-match | | test.rs:336:15:336:15 | LiteralPat | test.rs:336:20:336:20 | 1 | match | | test.rs:336:15:336:15 | LiteralPat | test.rs:337:13:337:16 | RangePat | no-match | From 6568eb80a2bbe77beb044af52afa13bb96b55208 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 18 Oct 2024 12:52:56 +0200 Subject: [PATCH 196/217] Rust: Refactor CFG pattern tree implementation --- .../internal/ControlFlowGraphImpl.qll | 86 ++++++------------- 1 file changed, 24 insertions(+), 62 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index 2f273c367112..feec95057a4d 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -605,94 +605,48 @@ class YeetExprTree extends StandardPostOrderTree instanceof YeetExpr { * `OrPat`s and `IdentPat`s. */ module PatternTrees { - abstract class PreOrderPatTree extends PreOrderTree { + abstract class StandardPatTree extends StandardTree { abstract Pat getPat(int i); - private Pat getPatRanked(int i) { + Pat getPatRanked(int i) { result = rank[i + 1](Pat pat, int j | pat = this.getPat(j) | pat order by j) } - predicate isEmpty() { not any(Pat p) = this.getPatRanked(0) } - - override predicate propagatesAbnormal(AstNode child) { child = this.getPatRanked(_) } + override AstNode getChildNode(int i) { result = this.getPat(i) } + } + abstract class PreOrderPatTree extends StandardPatTree, StandardPreOrderTree { override predicate succ(AstNode pred, AstNode succ, Completion c) { - pred = this and - completionIsValidFor(c, this) and c.(MatchCompletion).succeeded() and - first(this.getPatRanked(0), succ) - or - exists(int i | last(this.getPatRanked(i), pred, c) | - // Edge from successful pattern to the next - c.(MatchCompletion).succeeded() and - first(this.getPatRanked(i + 1), succ) - ) - } - - override predicate last(AstNode node, Completion c) { - node = this and ( - completionIsValidFor(c, this) and c.(MatchCompletion).failed() + StandardPatTree.super.succ(pred, succ, c) or - this.isEmpty() and node = this and c.(MatchCompletion).succeeded() + pred = this and first(this.getFirstChildNode(), succ) and completionIsValidFor(c, this) ) - or - exists(int i | last(this.getPatRanked(i), node, c) | - c.(MatchCompletion).failed() - or - not exists(this.getPatRanked(i + 1)) and - completionIsNormal(c) - ) - } - } - - abstract class PostOrderPatTree extends PostOrderTree { - abstract Pat getPat(int i); - - private Pat getPatRanked(int i) { - result = rank[i + 1](Pat pat, int j | pat = this.getPat(j) | pat order by j) } - override predicate propagatesAbnormal(AstNode child) { child = this.getPatRanked(_) } - - override predicate first(AstNode node) { - first(this.getPat(0), node) + override predicate last(AstNode node, Completion c) { + super.last(node, c) or - not exists(this.getPat(_)) and - node = this - } - - override predicate succ(AstNode pred, AstNode succ, Completion c) { - exists(int i | last(this.getPat(i), pred, c) | - // Edge from unsuccessful pattern to the next - c.(MatchCompletion).failed() and - first(this.getPat(i + 1), succ) - or - // Edge from successful pattern to this - c.(MatchCompletion).succeeded() and - succ = this - or - // Edge from last pattern to this - not exists(this.getPat(i + 1)) and - succ = this and - completionIsNormal(c) - ) + c.(MatchCompletion).failed() and + completionIsValidFor(c, this) and + (node = this or last(this.getPatRanked(_), node, c)) } } + abstract class PostOrderPatTree extends StandardPatTree, StandardPostOrderTree { } + class IdentPatTree extends PostOrderPatTree, IdentPat { override Pat getPat(int i) { i = 0 and result = this.getPat() } override predicate last(AstNode node, Completion c) { super.last(node, c) or - last(this.getPat(), node, c) and - c.(MatchCompletion).failed() + last(this.getPat(), node, c) and c.(MatchCompletion).failed() } override predicate succ(AstNode pred, AstNode succ, Completion c) { - super.succ(pred, succ, c) and - not (succ = this and c.(MatchCompletion).failed()) + super.succ(pred, succ, c) and c.(MatchCompletion).succeeded() } } @@ -710,6 +664,14 @@ module PatternTrees { class OrPatTree extends PostOrderPatTree instanceof OrPat { override Pat getPat(int i) { result = OrPat.super.getPat(i) } + + override predicate succ(AstNode pred, AstNode succ, Completion c) { + // Failed patterns advance normally between children + c.(MatchCompletion).failed() and super.succ(pred, succ, c) + or + // Successful pattern step to this + c.(MatchCompletion).succeeded() and succ = this and last(this.getPat(_), pred, c) + } } class ParenPatTree extends ControlFlowTree, ParenPat { From 4ca6b0ecebc22fa55b6a113da6dfcb070a3c55a5 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 18 Oct 2024 13:22:39 +0200 Subject: [PATCH 197/217] Rust: Add a CFG test for a return within a break --- .../library-tests/controlflow/Cfg.expected | 1246 +++++++++-------- .../ql/test/library-tests/controlflow/test.rs | 6 + 2 files changed, 634 insertions(+), 618 deletions(-) diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 09077375f4a9..621b84d33636 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -205,618 +205,627 @@ edges | test.rs:100:17:100:22 | ExprStmt | test.rs:100:17:100:21 | BreakExpr | | | test.rs:102:13:102:13 | 1 | test.rs:98:24:103:9 | BlockExpr | | | test.rs:102:13:102:14 | ExprStmt | test.rs:102:13:102:13 | 1 | | -| test.rs:107:1:110:1 | enter test_nested_function | test.rs:107:25:107:25 | n | | -| test.rs:107:1:110:1 | exit test_nested_function (normal) | test.rs:107:1:110:1 | exit test_nested_function | | -| test.rs:107:25:107:25 | n | test.rs:107:25:107:30 | Param | match | -| test.rs:107:25:107:30 | Param | test.rs:108:5:108:28 | LetStmt | | -| test.rs:107:40:110:1 | BlockExpr | test.rs:107:1:110:1 | exit test_nested_function (normal) | | -| test.rs:108:5:108:28 | LetStmt | test.rs:108:19:108:27 | ClosureExpr | | -| test.rs:108:9:108:15 | add_one | test.rs:109:5:109:11 | add_one | match | -| test.rs:108:19:108:27 | ClosureExpr | test.rs:108:9:108:15 | add_one | | -| test.rs:108:19:108:27 | enter ClosureExpr | test.rs:108:20:108:20 | i | | -| test.rs:108:19:108:27 | exit ClosureExpr (normal) | test.rs:108:19:108:27 | exit ClosureExpr | | -| test.rs:108:20:108:20 | Param | test.rs:108:23:108:23 | i | | -| test.rs:108:20:108:20 | i | test.rs:108:20:108:20 | Param | match | -| test.rs:108:23:108:23 | i | test.rs:108:27:108:27 | 1 | | -| test.rs:108:23:108:27 | ... + ... | test.rs:108:19:108:27 | exit ClosureExpr (normal) | | -| test.rs:108:27:108:27 | 1 | test.rs:108:23:108:27 | ... + ... | | -| test.rs:109:5:109:11 | add_one | test.rs:109:13:109:19 | add_one | | -| test.rs:109:5:109:23 | CallExpr | test.rs:107:40:110:1 | BlockExpr | | -| test.rs:109:13:109:19 | add_one | test.rs:109:21:109:21 | n | | -| test.rs:109:13:109:22 | CallExpr | test.rs:109:5:109:23 | CallExpr | | -| test.rs:109:21:109:21 | n | test.rs:109:13:109:22 | CallExpr | | -| test.rs:114:5:120:5 | enter test_if_else | test.rs:114:21:114:21 | n | | -| test.rs:114:5:120:5 | exit test_if_else (normal) | test.rs:114:5:120:5 | exit test_if_else | | -| test.rs:114:21:114:21 | n | test.rs:114:21:114:26 | Param | match | -| test.rs:114:21:114:26 | Param | test.rs:115:12:115:12 | n | | -| test.rs:114:36:120:5 | BlockExpr | test.rs:114:5:120:5 | exit test_if_else (normal) | | -| test.rs:115:9:119:9 | IfExpr | test.rs:114:36:120:5 | BlockExpr | | -| test.rs:115:12:115:12 | n | test.rs:115:17:115:17 | 0 | | -| test.rs:115:12:115:17 | ... <= ... | test.rs:116:13:116:13 | 0 | true | -| test.rs:115:12:115:17 | ... <= ... | test.rs:118:13:118:13 | n | false | -| test.rs:115:17:115:17 | 0 | test.rs:115:12:115:17 | ... <= ... | | -| test.rs:115:19:117:9 | BlockExpr | test.rs:115:9:119:9 | IfExpr | | -| test.rs:116:13:116:13 | 0 | test.rs:115:19:117:9 | BlockExpr | | -| test.rs:117:16:119:9 | BlockExpr | test.rs:115:9:119:9 | IfExpr | | -| test.rs:118:13:118:13 | n | test.rs:118:17:118:17 | 1 | | -| test.rs:118:13:118:17 | ... - ... | test.rs:117:16:119:9 | BlockExpr | | -| test.rs:118:17:118:17 | 1 | test.rs:118:13:118:17 | ... - ... | | -| test.rs:122:5:128:5 | enter test_if_let_else | test.rs:122:25:122:25 | a | | -| test.rs:122:5:128:5 | exit test_if_let_else (normal) | test.rs:122:5:128:5 | exit test_if_let_else | | -| test.rs:122:25:122:25 | a | test.rs:122:25:122:38 | Param | match | -| test.rs:122:25:122:38 | Param | test.rs:123:12:123:26 | LetExpr | | -| test.rs:122:48:128:5 | BlockExpr | test.rs:122:5:128:5 | exit test_if_let_else (normal) | | -| test.rs:123:9:127:9 | IfExpr | test.rs:122:48:128:5 | BlockExpr | | -| test.rs:123:12:123:26 | LetExpr | test.rs:123:26:123:26 | a | | -| test.rs:123:16:123:22 | TupleStructPat | test.rs:123:21:123:21 | n | match | -| test.rs:123:16:123:22 | TupleStructPat | test.rs:126:13:126:13 | 0 | no-match | -| test.rs:123:21:123:21 | n | test.rs:124:13:124:13 | n | match | -| test.rs:123:26:123:26 | a | test.rs:123:16:123:22 | TupleStructPat | | -| test.rs:123:28:125:9 | BlockExpr | test.rs:123:9:127:9 | IfExpr | | -| test.rs:124:13:124:13 | n | test.rs:123:28:125:9 | BlockExpr | | -| test.rs:125:16:127:9 | BlockExpr | test.rs:123:9:127:9 | IfExpr | | -| test.rs:126:13:126:13 | 0 | test.rs:125:16:127:9 | BlockExpr | | -| test.rs:130:5:135:5 | enter test_if_let | test.rs:130:20:130:20 | a | | -| test.rs:130:5:135:5 | exit test_if_let (normal) | test.rs:130:5:135:5 | exit test_if_let | | -| test.rs:130:20:130:20 | a | test.rs:130:20:130:33 | Param | match | -| test.rs:130:20:130:33 | Param | test.rs:131:9:133:9 | ExprStmt | | -| test.rs:130:43:135:5 | BlockExpr | test.rs:130:5:135:5 | exit test_if_let (normal) | | -| test.rs:131:9:133:9 | ExprStmt | test.rs:131:12:131:26 | LetExpr | | -| test.rs:131:9:133:9 | IfExpr | test.rs:134:9:134:9 | 0 | | -| test.rs:131:12:131:26 | LetExpr | test.rs:131:26:131:26 | a | | -| test.rs:131:16:131:22 | TupleStructPat | test.rs:131:9:133:9 | IfExpr | no-match | -| test.rs:131:16:131:22 | TupleStructPat | test.rs:131:21:131:21 | n | match | -| test.rs:131:21:131:21 | n | test.rs:132:13:132:13 | n | match | -| test.rs:131:26:131:26 | a | test.rs:131:16:131:22 | TupleStructPat | | -| test.rs:131:28:133:9 | BlockExpr | test.rs:131:9:133:9 | IfExpr | | -| test.rs:132:13:132:13 | n | test.rs:131:28:133:9 | BlockExpr | | -| test.rs:134:9:134:9 | 0 | test.rs:130:43:135:5 | BlockExpr | | -| test.rs:137:5:143:5 | enter test_nested_if | test.rs:137:23:137:23 | a | | -| test.rs:137:5:143:5 | exit test_nested_if (normal) | test.rs:137:5:143:5 | exit test_nested_if | | -| test.rs:137:23:137:23 | a | test.rs:137:23:137:28 | Param | match | -| test.rs:137:23:137:28 | Param | test.rs:138:16:138:16 | a | | -| test.rs:137:38:143:5 | BlockExpr | test.rs:137:5:143:5 | exit test_nested_if (normal) | | -| test.rs:138:9:142:9 | IfExpr | test.rs:137:38:143:5 | BlockExpr | | -| test.rs:138:13:138:48 | [boolean(false)] IfExpr | test.rs:141:13:141:13 | 0 | false | -| test.rs:138:13:138:48 | [boolean(true)] IfExpr | test.rs:139:13:139:13 | 1 | true | -| test.rs:138:16:138:16 | a | test.rs:138:20:138:20 | 0 | | -| test.rs:138:16:138:20 | ... < ... | test.rs:138:24:138:24 | a | true | -| test.rs:138:16:138:20 | ... < ... | test.rs:138:41:138:41 | a | false | -| test.rs:138:20:138:20 | 0 | test.rs:138:16:138:20 | ... < ... | | -| test.rs:138:22:138:32 | [boolean(false)] BlockExpr | test.rs:138:13:138:48 | [boolean(false)] IfExpr | false | -| test.rs:138:22:138:32 | [boolean(true)] BlockExpr | test.rs:138:13:138:48 | [boolean(true)] IfExpr | true | -| test.rs:138:24:138:24 | a | test.rs:138:29:138:30 | 10 | | -| test.rs:138:24:138:30 | ... < ... | test.rs:138:22:138:32 | [boolean(false)] BlockExpr | false | -| test.rs:138:24:138:30 | ... < ... | test.rs:138:22:138:32 | [boolean(true)] BlockExpr | true | -| test.rs:138:28:138:30 | - ... | test.rs:138:24:138:30 | ... < ... | | -| test.rs:138:29:138:30 | 10 | test.rs:138:28:138:30 | - ... | | -| test.rs:138:39:138:48 | [boolean(false)] BlockExpr | test.rs:138:13:138:48 | [boolean(false)] IfExpr | false | -| test.rs:138:39:138:48 | [boolean(true)] BlockExpr | test.rs:138:13:138:48 | [boolean(true)] IfExpr | true | -| test.rs:138:41:138:41 | a | test.rs:138:45:138:46 | 10 | | -| test.rs:138:41:138:46 | ... > ... | test.rs:138:39:138:48 | [boolean(false)] BlockExpr | false | -| test.rs:138:41:138:46 | ... > ... | test.rs:138:39:138:48 | [boolean(true)] BlockExpr | true | -| test.rs:138:45:138:46 | 10 | test.rs:138:41:138:46 | ... > ... | | -| test.rs:138:51:140:9 | BlockExpr | test.rs:138:9:142:9 | IfExpr | | -| test.rs:139:13:139:13 | 1 | test.rs:138:51:140:9 | BlockExpr | | -| test.rs:140:16:142:9 | BlockExpr | test.rs:138:9:142:9 | IfExpr | | -| test.rs:141:13:141:13 | 0 | test.rs:140:16:142:9 | BlockExpr | | -| test.rs:145:5:154:5 | enter test_nested_if_match | test.rs:145:29:145:29 | a | | -| test.rs:145:5:154:5 | exit test_nested_if_match (normal) | test.rs:145:5:154:5 | exit test_nested_if_match | | -| test.rs:145:29:145:29 | a | test.rs:145:29:145:34 | Param | match | -| test.rs:145:29:145:34 | Param | test.rs:146:19:146:19 | a | | -| test.rs:145:44:154:5 | BlockExpr | test.rs:145:5:154:5 | exit test_nested_if_match (normal) | | -| test.rs:146:9:153:9 | IfExpr | test.rs:145:44:154:5 | BlockExpr | | -| test.rs:146:13:149:9 | [boolean(false)] MatchExpr | test.rs:152:13:152:13 | 0 | false | -| test.rs:146:13:149:9 | [boolean(true)] MatchExpr | test.rs:150:13:150:13 | 1 | true | -| test.rs:146:19:146:19 | a | test.rs:147:13:147:13 | LiteralPat | | -| test.rs:147:13:147:13 | LiteralPat | test.rs:147:18:147:21 | true | match | -| test.rs:147:13:147:13 | LiteralPat | test.rs:148:13:148:13 | WildcardPat | no-match | -| test.rs:147:18:147:21 | true | test.rs:146:13:149:9 | [boolean(true)] MatchExpr | true | -| test.rs:148:13:148:13 | WildcardPat | test.rs:148:18:148:22 | false | match | -| test.rs:148:18:148:22 | false | test.rs:146:13:149:9 | [boolean(false)] MatchExpr | false | -| test.rs:149:12:151:9 | BlockExpr | test.rs:146:9:153:9 | IfExpr | | -| test.rs:150:13:150:13 | 1 | test.rs:149:12:151:9 | BlockExpr | | -| test.rs:151:16:153:9 | BlockExpr | test.rs:146:9:153:9 | IfExpr | | -| test.rs:152:13:152:13 | 0 | test.rs:151:16:153:9 | BlockExpr | | -| test.rs:156:5:165:5 | enter test_nested_if_block | test.rs:156:29:156:29 | a | | -| test.rs:156:5:165:5 | exit test_nested_if_block (normal) | test.rs:156:5:165:5 | exit test_nested_if_block | | -| test.rs:156:29:156:29 | a | test.rs:156:29:156:34 | Param | match | -| test.rs:156:29:156:34 | Param | test.rs:158:13:158:15 | ExprStmt | | -| test.rs:156:44:165:5 | BlockExpr | test.rs:156:5:165:5 | exit test_nested_if_block (normal) | | -| test.rs:157:9:164:9 | IfExpr | test.rs:156:44:165:5 | BlockExpr | | -| test.rs:157:12:160:9 | [boolean(false)] BlockExpr | test.rs:163:13:163:13 | 0 | false | -| test.rs:157:12:160:9 | [boolean(true)] BlockExpr | test.rs:161:13:161:13 | 1 | true | -| test.rs:158:13:158:14 | TupleExpr | test.rs:159:13:159:13 | a | | -| test.rs:158:13:158:15 | ExprStmt | test.rs:158:13:158:14 | TupleExpr | | -| test.rs:159:13:159:13 | a | test.rs:159:17:159:17 | 0 | | -| test.rs:159:13:159:17 | ... > ... | test.rs:157:12:160:9 | [boolean(false)] BlockExpr | false | -| test.rs:159:13:159:17 | ... > ... | test.rs:157:12:160:9 | [boolean(true)] BlockExpr | true | -| test.rs:159:17:159:17 | 0 | test.rs:159:13:159:17 | ... > ... | | -| test.rs:160:11:162:9 | BlockExpr | test.rs:157:9:164:9 | IfExpr | | -| test.rs:161:13:161:13 | 1 | test.rs:160:11:162:9 | BlockExpr | | -| test.rs:162:16:164:9 | BlockExpr | test.rs:157:9:164:9 | IfExpr | | -| test.rs:163:13:163:13 | 0 | test.rs:162:16:164:9 | BlockExpr | | -| test.rs:167:5:174:5 | enter test_if_assignment | test.rs:167:27:167:27 | a | | -| test.rs:167:5:174:5 | exit test_if_assignment (normal) | test.rs:167:5:174:5 | exit test_if_assignment | | -| test.rs:167:27:167:27 | a | test.rs:167:27:167:32 | Param | match | -| test.rs:167:27:167:32 | Param | test.rs:168:9:168:26 | LetStmt | | -| test.rs:167:42:174:5 | BlockExpr | test.rs:167:5:174:5 | exit test_if_assignment (normal) | | -| test.rs:168:9:168:26 | LetStmt | test.rs:168:21:168:25 | false | | -| test.rs:168:13:168:17 | x | test.rs:169:12:169:12 | x | match | -| test.rs:168:21:168:25 | false | test.rs:168:13:168:17 | x | | -| test.rs:169:9:173:9 | IfExpr | test.rs:167:42:174:5 | BlockExpr | | -| test.rs:169:12:169:12 | x | test.rs:169:16:169:19 | true | | -| test.rs:169:12:169:19 | ... = ... | test.rs:170:13:170:13 | 1 | true | -| test.rs:169:12:169:19 | ... = ... | test.rs:172:13:172:13 | 0 | false | -| test.rs:169:16:169:19 | true | test.rs:169:12:169:19 | ... = ... | | -| test.rs:169:21:171:9 | BlockExpr | test.rs:169:9:173:9 | IfExpr | | -| test.rs:170:13:170:13 | 1 | test.rs:169:21:171:9 | BlockExpr | | -| test.rs:171:16:173:9 | BlockExpr | test.rs:169:9:173:9 | IfExpr | | -| test.rs:172:13:172:13 | 0 | test.rs:171:16:173:9 | BlockExpr | | -| test.rs:176:5:187:5 | enter test_if_loop1 | test.rs:176:22:176:22 | a | | -| test.rs:176:5:187:5 | exit test_if_loop1 (normal) | test.rs:176:5:187:5 | exit test_if_loop1 | | -| test.rs:176:22:176:22 | a | test.rs:176:22:176:27 | Param | match | -| test.rs:176:22:176:27 | Param | test.rs:178:13:180:14 | ExprStmt | | -| test.rs:176:37:187:5 | BlockExpr | test.rs:176:5:187:5 | exit test_if_loop1 (normal) | | -| test.rs:177:9:186:9 | IfExpr | test.rs:176:37:187:5 | BlockExpr | | -| test.rs:177:13:182:9 | [boolean(false)] LoopExpr | test.rs:185:13:185:13 | 0 | false | -| test.rs:177:13:182:9 | [boolean(true)] LoopExpr | test.rs:183:13:183:13 | 1 | true | -| test.rs:177:18:182:9 | BlockExpr | test.rs:178:13:180:14 | ExprStmt | | -| test.rs:178:13:180:13 | IfExpr | test.rs:181:13:181:19 | ExprStmt | | -| test.rs:178:13:180:14 | ExprStmt | test.rs:178:16:178:16 | a | | -| test.rs:178:16:178:16 | a | test.rs:178:20:178:20 | 0 | | -| test.rs:178:16:178:20 | ... > ... | test.rs:178:13:180:13 | IfExpr | false | -| test.rs:178:16:178:20 | ... > ... | test.rs:179:17:179:29 | ExprStmt | true | -| test.rs:178:20:178:20 | 0 | test.rs:178:16:178:20 | ... > ... | | -| test.rs:179:17:179:28 | [boolean(false)] BreakExpr | test.rs:177:13:182:9 | [boolean(false)] LoopExpr | break | -| test.rs:179:17:179:28 | [boolean(true)] BreakExpr | test.rs:177:13:182:9 | [boolean(true)] LoopExpr | break | -| test.rs:179:17:179:29 | ExprStmt | test.rs:179:23:179:23 | a | | -| test.rs:179:23:179:23 | a | test.rs:179:27:179:28 | 10 | | -| test.rs:179:23:179:28 | ... > ... | test.rs:179:17:179:28 | [boolean(false)] BreakExpr | false | -| test.rs:179:23:179:28 | ... > ... | test.rs:179:17:179:28 | [boolean(true)] BreakExpr | true | -| test.rs:179:27:179:28 | 10 | test.rs:179:23:179:28 | ... > ... | | -| test.rs:181:13:181:13 | a | test.rs:181:17:181:18 | 10 | | -| test.rs:181:13:181:18 | ... < ... | test.rs:177:18:182:9 | BlockExpr | | -| test.rs:181:13:181:19 | ExprStmt | test.rs:181:13:181:13 | a | | -| test.rs:181:17:181:18 | 10 | test.rs:181:13:181:18 | ... < ... | | -| test.rs:182:12:184:9 | BlockExpr | test.rs:177:9:186:9 | IfExpr | | -| test.rs:183:13:183:13 | 1 | test.rs:182:12:184:9 | BlockExpr | | -| test.rs:184:16:186:9 | BlockExpr | test.rs:177:9:186:9 | IfExpr | | -| test.rs:185:13:185:13 | 0 | test.rs:184:16:186:9 | BlockExpr | | -| test.rs:189:5:200:5 | enter test_if_loop2 | test.rs:189:22:189:22 | a | | -| test.rs:189:5:200:5 | exit test_if_loop2 (normal) | test.rs:189:5:200:5 | exit test_if_loop2 | | -| test.rs:189:22:189:22 | a | test.rs:189:22:189:27 | Param | match | -| test.rs:189:22:189:27 | Param | test.rs:191:13:193:14 | ExprStmt | | -| test.rs:189:37:200:5 | BlockExpr | test.rs:189:5:200:5 | exit test_if_loop2 (normal) | | -| test.rs:190:9:199:9 | IfExpr | test.rs:189:37:200:5 | BlockExpr | | -| test.rs:190:13:195:9 | [boolean(false)] LoopExpr | test.rs:198:13:198:13 | 0 | false | -| test.rs:190:13:195:9 | [boolean(true)] LoopExpr | test.rs:196:13:196:13 | 1 | true | -| test.rs:190:26:195:9 | BlockExpr | test.rs:191:13:193:14 | ExprStmt | | -| test.rs:191:13:193:13 | IfExpr | test.rs:194:13:194:19 | ExprStmt | | -| test.rs:191:13:193:14 | ExprStmt | test.rs:191:16:191:16 | a | | -| test.rs:191:16:191:16 | a | test.rs:191:20:191:20 | 0 | | -| test.rs:191:16:191:20 | ... > ... | test.rs:191:13:193:13 | IfExpr | false | -| test.rs:191:16:191:20 | ... > ... | test.rs:192:17:192:36 | ExprStmt | true | -| test.rs:191:20:191:20 | 0 | test.rs:191:16:191:20 | ... > ... | | -| test.rs:192:17:192:35 | [boolean(false)] BreakExpr | test.rs:190:13:195:9 | [boolean(false)] LoopExpr | break | -| test.rs:192:17:192:35 | [boolean(true)] BreakExpr | test.rs:190:13:195:9 | [boolean(true)] LoopExpr | break | -| test.rs:192:17:192:36 | ExprStmt | test.rs:192:30:192:30 | a | | -| test.rs:192:30:192:30 | a | test.rs:192:34:192:35 | 10 | | -| test.rs:192:30:192:35 | ... > ... | test.rs:192:17:192:35 | [boolean(false)] BreakExpr | false | -| test.rs:192:30:192:35 | ... > ... | test.rs:192:17:192:35 | [boolean(true)] BreakExpr | true | -| test.rs:192:34:192:35 | 10 | test.rs:192:30:192:35 | ... > ... | | -| test.rs:194:13:194:13 | a | test.rs:194:17:194:18 | 10 | | -| test.rs:194:13:194:18 | ... < ... | test.rs:190:26:195:9 | BlockExpr | | -| test.rs:194:13:194:19 | ExprStmt | test.rs:194:13:194:13 | a | | -| test.rs:194:17:194:18 | 10 | test.rs:194:13:194:18 | ... < ... | | -| test.rs:195:12:197:9 | BlockExpr | test.rs:190:9:199:9 | IfExpr | | -| test.rs:196:13:196:13 | 1 | test.rs:195:12:197:9 | BlockExpr | | -| test.rs:197:16:199:9 | BlockExpr | test.rs:190:9:199:9 | IfExpr | | -| test.rs:198:13:198:13 | 0 | test.rs:197:16:199:9 | BlockExpr | | -| test.rs:202:5:210:5 | enter test_labelled_block | test.rs:202:28:202:28 | a | | -| test.rs:202:5:210:5 | exit test_labelled_block (normal) | test.rs:202:5:210:5 | exit test_labelled_block | | -| test.rs:202:28:202:28 | a | test.rs:202:28:202:33 | Param | match | -| test.rs:202:28:202:33 | Param | test.rs:204:13:204:31 | ExprStmt | | -| test.rs:202:43:210:5 | BlockExpr | test.rs:202:5:210:5 | exit test_labelled_block (normal) | | -| test.rs:203:9:209:9 | IfExpr | test.rs:202:43:210:5 | BlockExpr | | -| test.rs:203:13:205:9 | [boolean(false)] BlockExpr | test.rs:208:13:208:13 | 0 | false | -| test.rs:203:13:205:9 | [boolean(true)] BlockExpr | test.rs:206:13:206:13 | 1 | true | -| test.rs:204:13:204:30 | [boolean(false)] BreakExpr | test.rs:203:13:205:9 | [boolean(false)] BlockExpr | break | -| test.rs:204:13:204:30 | [boolean(true)] BreakExpr | test.rs:203:13:205:9 | [boolean(true)] BlockExpr | break | -| test.rs:204:13:204:31 | ExprStmt | test.rs:204:26:204:26 | a | | -| test.rs:204:26:204:26 | a | test.rs:204:30:204:30 | 0 | | -| test.rs:204:26:204:30 | ... > ... | test.rs:204:13:204:30 | [boolean(false)] BreakExpr | false | -| test.rs:204:26:204:30 | ... > ... | test.rs:204:13:204:30 | [boolean(true)] BreakExpr | true | -| test.rs:204:30:204:30 | 0 | test.rs:204:26:204:30 | ... > ... | | -| test.rs:205:12:207:9 | BlockExpr | test.rs:203:9:209:9 | IfExpr | | -| test.rs:206:13:206:13 | 1 | test.rs:205:12:207:9 | BlockExpr | | -| test.rs:207:16:209:9 | BlockExpr | test.rs:203:9:209:9 | IfExpr | | -| test.rs:208:13:208:13 | 0 | test.rs:207:16:209:9 | BlockExpr | | -| test.rs:215:5:218:5 | enter test_and_operator | test.rs:215:26:215:26 | a | | -| test.rs:215:5:218:5 | exit test_and_operator (normal) | test.rs:215:5:218:5 | exit test_and_operator | | -| test.rs:215:26:215:26 | a | test.rs:215:26:215:32 | Param | match | -| test.rs:215:26:215:32 | Param | test.rs:215:35:215:35 | b | | -| test.rs:215:35:215:35 | b | test.rs:215:35:215:41 | Param | match | -| test.rs:215:35:215:41 | Param | test.rs:215:44:215:44 | c | | -| test.rs:215:44:215:44 | c | test.rs:215:44:215:50 | Param | match | -| test.rs:215:44:215:50 | Param | test.rs:216:9:216:28 | LetStmt | | -| test.rs:215:61:218:5 | BlockExpr | test.rs:215:5:218:5 | exit test_and_operator (normal) | | -| test.rs:216:9:216:28 | LetStmt | test.rs:216:17:216:17 | a | | -| test.rs:216:13:216:13 | d | test.rs:217:9:217:9 | d | match | -| test.rs:216:17:216:17 | a | test.rs:216:17:216:22 | [boolean(false)] ... && ... | false | -| test.rs:216:17:216:17 | a | test.rs:216:22:216:22 | b | true | -| test.rs:216:17:216:22 | [boolean(false)] ... && ... | test.rs:216:17:216:27 | ... && ... | false | -| test.rs:216:17:216:22 | [boolean(true)] ... && ... | test.rs:216:27:216:27 | c | true | -| test.rs:216:17:216:27 | ... && ... | test.rs:216:13:216:13 | d | | -| test.rs:216:22:216:22 | b | test.rs:216:17:216:22 | [boolean(false)] ... && ... | false | -| test.rs:216:22:216:22 | b | test.rs:216:17:216:22 | [boolean(true)] ... && ... | true | -| test.rs:216:27:216:27 | c | test.rs:216:17:216:27 | ... && ... | | -| test.rs:217:9:217:9 | d | test.rs:215:61:218:5 | BlockExpr | | -| test.rs:220:5:223:5 | enter test_or_operator | test.rs:220:25:220:25 | a | | -| test.rs:220:5:223:5 | exit test_or_operator (normal) | test.rs:220:5:223:5 | exit test_or_operator | | -| test.rs:220:25:220:25 | a | test.rs:220:25:220:31 | Param | match | -| test.rs:220:25:220:31 | Param | test.rs:220:34:220:34 | b | | -| test.rs:220:34:220:34 | b | test.rs:220:34:220:40 | Param | match | -| test.rs:220:34:220:40 | Param | test.rs:220:43:220:43 | c | | -| test.rs:220:43:220:43 | c | test.rs:220:43:220:49 | Param | match | -| test.rs:220:43:220:49 | Param | test.rs:221:9:221:28 | LetStmt | | -| test.rs:220:60:223:5 | BlockExpr | test.rs:220:5:223:5 | exit test_or_operator (normal) | | -| test.rs:221:9:221:28 | LetStmt | test.rs:221:17:221:17 | a | | -| test.rs:221:13:221:13 | d | test.rs:222:9:222:9 | d | match | -| test.rs:221:17:221:17 | a | test.rs:221:17:221:22 | [boolean(true)] ... \|\| ... | true | -| test.rs:221:17:221:17 | a | test.rs:221:22:221:22 | b | false | -| test.rs:221:17:221:22 | [boolean(false)] ... \|\| ... | test.rs:221:27:221:27 | c | false | -| test.rs:221:17:221:22 | [boolean(true)] ... \|\| ... | test.rs:221:17:221:27 | ... \|\| ... | true | -| test.rs:221:17:221:27 | ... \|\| ... | test.rs:221:13:221:13 | d | | -| test.rs:221:22:221:22 | b | test.rs:221:17:221:22 | [boolean(false)] ... \|\| ... | false | -| test.rs:221:22:221:22 | b | test.rs:221:17:221:22 | [boolean(true)] ... \|\| ... | true | -| test.rs:221:27:221:27 | c | test.rs:221:17:221:27 | ... \|\| ... | | -| test.rs:222:9:222:9 | d | test.rs:220:60:223:5 | BlockExpr | | -| test.rs:225:5:228:5 | enter test_or_operator_2 | test.rs:225:27:225:27 | a | | -| test.rs:225:5:228:5 | exit test_or_operator_2 (normal) | test.rs:225:5:228:5 | exit test_or_operator_2 | | -| test.rs:225:27:225:27 | a | test.rs:225:27:225:33 | Param | match | -| test.rs:225:27:225:33 | Param | test.rs:225:36:225:36 | b | | -| test.rs:225:36:225:36 | b | test.rs:225:36:225:41 | Param | match | -| test.rs:225:36:225:41 | Param | test.rs:225:44:225:44 | c | | -| test.rs:225:44:225:44 | c | test.rs:225:44:225:50 | Param | match | -| test.rs:225:44:225:50 | Param | test.rs:226:9:226:36 | LetStmt | | -| test.rs:225:61:228:5 | BlockExpr | test.rs:225:5:228:5 | exit test_or_operator_2 (normal) | | -| test.rs:226:9:226:36 | LetStmt | test.rs:226:17:226:17 | a | | -| test.rs:226:13:226:13 | d | test.rs:227:9:227:9 | d | match | -| test.rs:226:17:226:17 | a | test.rs:226:17:226:30 | [boolean(true)] ... \|\| ... | true | -| test.rs:226:17:226:17 | a | test.rs:226:23:226:23 | b | false | -| test.rs:226:17:226:30 | [boolean(false)] ... \|\| ... | test.rs:226:35:226:35 | c | false | -| test.rs:226:17:226:30 | [boolean(true)] ... \|\| ... | test.rs:226:17:226:35 | ... \|\| ... | true | -| test.rs:226:17:226:35 | ... \|\| ... | test.rs:226:13:226:13 | d | | -| test.rs:226:23:226:23 | b | test.rs:226:28:226:29 | 28 | | -| test.rs:226:23:226:29 | ... == ... | test.rs:226:17:226:30 | [boolean(false)] ... \|\| ... | false | -| test.rs:226:23:226:29 | ... == ... | test.rs:226:17:226:30 | [boolean(true)] ... \|\| ... | true | -| test.rs:226:28:226:29 | 28 | test.rs:226:23:226:29 | ... == ... | | -| test.rs:226:35:226:35 | c | test.rs:226:17:226:35 | ... \|\| ... | | -| test.rs:227:9:227:9 | d | test.rs:225:61:228:5 | BlockExpr | | -| test.rs:230:5:233:5 | enter test_not_operator | test.rs:230:26:230:26 | a | | -| test.rs:230:5:233:5 | exit test_not_operator (normal) | test.rs:230:5:233:5 | exit test_not_operator | | -| test.rs:230:26:230:26 | a | test.rs:230:26:230:32 | Param | match | -| test.rs:230:26:230:32 | Param | test.rs:231:9:231:19 | LetStmt | | -| test.rs:230:43:233:5 | BlockExpr | test.rs:230:5:233:5 | exit test_not_operator (normal) | | -| test.rs:231:9:231:19 | LetStmt | test.rs:231:18:231:18 | a | | -| test.rs:231:13:231:13 | d | test.rs:232:9:232:9 | d | match | -| test.rs:231:17:231:18 | ! ... | test.rs:231:13:231:13 | d | | -| test.rs:231:18:231:18 | a | test.rs:231:17:231:18 | ! ... | | -| test.rs:232:9:232:9 | d | test.rs:230:43:233:5 | BlockExpr | | -| test.rs:235:5:241:5 | enter test_if_and_operator | test.rs:235:29:235:29 | a | | -| test.rs:235:5:241:5 | exit test_if_and_operator (normal) | test.rs:235:5:241:5 | exit test_if_and_operator | | -| test.rs:235:29:235:29 | a | test.rs:235:29:235:35 | Param | match | -| test.rs:235:29:235:35 | Param | test.rs:235:38:235:38 | b | | -| test.rs:235:38:235:38 | b | test.rs:235:38:235:43 | Param | match | -| test.rs:235:38:235:43 | Param | test.rs:235:46:235:46 | c | | -| test.rs:235:46:235:46 | c | test.rs:235:46:235:52 | Param | match | -| test.rs:235:46:235:52 | Param | test.rs:236:12:236:12 | a | | -| test.rs:235:63:241:5 | BlockExpr | test.rs:235:5:241:5 | exit test_if_and_operator (normal) | | -| test.rs:236:9:240:9 | IfExpr | test.rs:235:63:241:5 | BlockExpr | | -| test.rs:236:12:236:12 | a | test.rs:236:12:236:17 | [boolean(false)] ... && ... | false | -| test.rs:236:12:236:12 | a | test.rs:236:17:236:17 | b | true | -| test.rs:236:12:236:17 | [boolean(false)] ... && ... | test.rs:236:12:236:22 | [boolean(false)] ... && ... | false | -| test.rs:236:12:236:17 | [boolean(true)] ... && ... | test.rs:236:22:236:22 | c | true | -| test.rs:236:12:236:22 | [boolean(false)] ... && ... | test.rs:239:13:239:17 | false | false | -| test.rs:236:12:236:22 | [boolean(true)] ... && ... | test.rs:237:13:237:16 | true | true | -| test.rs:236:17:236:17 | b | test.rs:236:12:236:17 | [boolean(false)] ... && ... | false | -| test.rs:236:17:236:17 | b | test.rs:236:12:236:17 | [boolean(true)] ... && ... | true | -| test.rs:236:22:236:22 | c | test.rs:236:12:236:22 | [boolean(false)] ... && ... | false | -| test.rs:236:22:236:22 | c | test.rs:236:12:236:22 | [boolean(true)] ... && ... | true | -| test.rs:236:24:238:9 | BlockExpr | test.rs:236:9:240:9 | IfExpr | | -| test.rs:237:13:237:16 | true | test.rs:236:24:238:9 | BlockExpr | | -| test.rs:238:16:240:9 | BlockExpr | test.rs:236:9:240:9 | IfExpr | | -| test.rs:239:13:239:17 | false | test.rs:238:16:240:9 | BlockExpr | | -| test.rs:243:5:249:5 | enter test_if_or_operator | test.rs:243:28:243:28 | a | | -| test.rs:243:5:249:5 | exit test_if_or_operator (normal) | test.rs:243:5:249:5 | exit test_if_or_operator | | -| test.rs:243:28:243:28 | a | test.rs:243:28:243:34 | Param | match | -| test.rs:243:28:243:34 | Param | test.rs:243:37:243:37 | b | | -| test.rs:243:37:243:37 | b | test.rs:243:37:243:42 | Param | match | -| test.rs:243:37:243:42 | Param | test.rs:243:45:243:45 | c | | -| test.rs:243:45:243:45 | c | test.rs:243:45:243:51 | Param | match | -| test.rs:243:45:243:51 | Param | test.rs:244:12:244:12 | a | | -| test.rs:243:62:249:5 | BlockExpr | test.rs:243:5:249:5 | exit test_if_or_operator (normal) | | -| test.rs:244:9:248:9 | IfExpr | test.rs:243:62:249:5 | BlockExpr | | -| test.rs:244:12:244:12 | a | test.rs:244:12:244:17 | [boolean(true)] ... \|\| ... | true | -| test.rs:244:12:244:12 | a | test.rs:244:17:244:17 | b | false | -| test.rs:244:12:244:17 | [boolean(false)] ... \|\| ... | test.rs:244:22:244:22 | c | false | -| test.rs:244:12:244:17 | [boolean(true)] ... \|\| ... | test.rs:244:12:244:22 | [boolean(true)] ... \|\| ... | true | -| test.rs:244:12:244:22 | [boolean(false)] ... \|\| ... | test.rs:247:13:247:17 | false | false | -| test.rs:244:12:244:22 | [boolean(true)] ... \|\| ... | test.rs:245:13:245:16 | true | true | -| test.rs:244:17:244:17 | b | test.rs:244:12:244:17 | [boolean(false)] ... \|\| ... | false | -| test.rs:244:17:244:17 | b | test.rs:244:12:244:17 | [boolean(true)] ... \|\| ... | true | -| test.rs:244:22:244:22 | c | test.rs:244:12:244:22 | [boolean(false)] ... \|\| ... | false | -| test.rs:244:22:244:22 | c | test.rs:244:12:244:22 | [boolean(true)] ... \|\| ... | true | -| test.rs:244:24:246:9 | BlockExpr | test.rs:244:9:248:9 | IfExpr | | -| test.rs:245:13:245:16 | true | test.rs:244:24:246:9 | BlockExpr | | -| test.rs:246:16:248:9 | BlockExpr | test.rs:244:9:248:9 | IfExpr | | -| test.rs:247:13:247:17 | false | test.rs:246:16:248:9 | BlockExpr | | -| test.rs:251:5:257:5 | enter test_if_not_operator | test.rs:251:29:251:29 | a | | -| test.rs:251:5:257:5 | exit test_if_not_operator (normal) | test.rs:251:5:257:5 | exit test_if_not_operator | | -| test.rs:251:29:251:29 | a | test.rs:251:29:251:35 | Param | match | -| test.rs:251:29:251:35 | Param | test.rs:252:13:252:13 | a | | -| test.rs:251:46:257:5 | BlockExpr | test.rs:251:5:257:5 | exit test_if_not_operator (normal) | | -| test.rs:252:9:256:9 | IfExpr | test.rs:251:46:257:5 | BlockExpr | | -| test.rs:252:12:252:13 | [boolean(false)] ! ... | test.rs:255:13:255:17 | false | false | -| test.rs:252:12:252:13 | [boolean(true)] ! ... | test.rs:253:13:253:16 | true | true | -| test.rs:252:13:252:13 | a | test.rs:252:12:252:13 | [boolean(false)] ! ... | true | -| test.rs:252:13:252:13 | a | test.rs:252:12:252:13 | [boolean(true)] ! ... | false | -| test.rs:252:15:254:9 | BlockExpr | test.rs:252:9:256:9 | IfExpr | | -| test.rs:253:13:253:16 | true | test.rs:252:15:254:9 | BlockExpr | | -| test.rs:254:16:256:9 | BlockExpr | test.rs:252:9:256:9 | IfExpr | | -| test.rs:255:13:255:17 | false | test.rs:254:16:256:9 | BlockExpr | | -| test.rs:262:5:264:5 | enter test_question_mark_operator_1 | test.rs:262:38:262:38 | s | | -| test.rs:262:5:264:5 | exit test_question_mark_operator_1 (normal) | test.rs:262:5:264:5 | exit test_question_mark_operator_1 | | -| test.rs:262:38:262:38 | s | test.rs:262:38:262:44 | Param | match | -| test.rs:262:38:262:44 | Param | test.rs:263:9:263:11 | PathExpr | | -| test.rs:262:62:264:5 | BlockExpr | test.rs:262:5:264:5 | exit test_question_mark_operator_1 (normal) | | -| test.rs:263:9:263:11 | PathExpr | test.rs:263:9:263:26 | MethodCallExpr | | -| test.rs:263:9:263:26 | MethodCallExpr | test.rs:263:9:263:27 | TryExpr | | -| test.rs:263:9:263:27 | TryExpr | test.rs:262:5:264:5 | exit test_question_mark_operator_1 (normal) | return | -| test.rs:263:9:263:27 | TryExpr | test.rs:263:31:263:31 | 4 | match | -| test.rs:263:9:263:31 | ... + ... | test.rs:262:62:264:5 | BlockExpr | | -| test.rs:263:31:263:31 | 4 | test.rs:263:9:263:31 | ... + ... | | -| test.rs:266:5:271:5 | enter test_question_mark_operator_2 | test.rs:266:38:266:38 | b | | -| test.rs:266:5:271:5 | exit test_question_mark_operator_2 (normal) | test.rs:266:5:271:5 | exit test_question_mark_operator_2 | | -| test.rs:266:38:266:38 | b | test.rs:266:38:266:52 | Param | match | -| test.rs:266:38:266:52 | Param | test.rs:267:15:267:15 | b | | -| test.rs:266:71:271:5 | BlockExpr | test.rs:266:5:271:5 | exit test_question_mark_operator_2 (normal) | | -| test.rs:267:9:270:9 | MatchExpr | test.rs:266:71:271:5 | BlockExpr | | -| test.rs:267:15:267:15 | b | test.rs:267:15:267:16 | TryExpr | | -| test.rs:267:15:267:16 | TryExpr | test.rs:266:5:271:5 | exit test_question_mark_operator_2 (normal) | return | -| test.rs:267:15:267:16 | TryExpr | test.rs:268:13:268:16 | LiteralPat | match | -| test.rs:268:13:268:16 | LiteralPat | test.rs:268:21:268:24 | PathExpr | match | -| test.rs:268:13:268:16 | LiteralPat | test.rs:269:13:269:17 | LiteralPat | no-match | -| test.rs:268:21:268:24 | PathExpr | test.rs:268:26:268:30 | false | | -| test.rs:268:21:268:31 | CallExpr | test.rs:267:9:270:9 | MatchExpr | | -| test.rs:268:26:268:30 | false | test.rs:268:21:268:31 | CallExpr | | -| test.rs:269:13:269:17 | LiteralPat | test.rs:269:22:269:25 | PathExpr | match | -| test.rs:269:22:269:25 | PathExpr | test.rs:269:27:269:30 | true | | -| test.rs:269:22:269:31 | CallExpr | test.rs:267:9:270:9 | MatchExpr | | -| test.rs:269:27:269:30 | true | test.rs:269:22:269:31 | CallExpr | | -| test.rs:276:5:282:5 | enter test_match | test.rs:276:19:276:29 | maybe_digit | | -| test.rs:276:5:282:5 | exit test_match (normal) | test.rs:276:5:282:5 | exit test_match | | -| test.rs:276:19:276:29 | maybe_digit | test.rs:276:19:276:42 | Param | match | -| test.rs:276:19:276:42 | Param | test.rs:277:15:277:25 | maybe_digit | | -| test.rs:276:52:282:5 | BlockExpr | test.rs:276:5:282:5 | exit test_match (normal) | | -| test.rs:277:9:281:9 | MatchExpr | test.rs:276:52:282:5 | BlockExpr | | -| test.rs:277:15:277:25 | maybe_digit | test.rs:278:13:278:27 | TupleStructPat | | -| test.rs:278:13:278:27 | TupleStructPat | test.rs:278:26:278:26 | x | match | -| test.rs:278:13:278:27 | TupleStructPat | test.rs:279:13:279:27 | TupleStructPat | no-match | -| test.rs:278:26:278:26 | x | test.rs:278:32:278:32 | x | match | -| test.rs:278:32:278:32 | x | test.rs:278:36:278:37 | 10 | | -| test.rs:278:32:278:37 | ... < ... | test.rs:278:42:278:42 | x | true | -| test.rs:278:32:278:37 | ... < ... | test.rs:279:13:279:27 | TupleStructPat | false | -| test.rs:278:36:278:37 | 10 | test.rs:278:32:278:37 | ... < ... | | -| test.rs:278:42:278:42 | x | test.rs:278:46:278:46 | 5 | | -| test.rs:278:42:278:46 | ... + ... | test.rs:277:9:281:9 | MatchExpr | | -| test.rs:278:46:278:46 | 5 | test.rs:278:42:278:46 | ... + ... | | -| test.rs:279:13:279:27 | TupleStructPat | test.rs:279:26:279:26 | x | match | -| test.rs:279:13:279:27 | TupleStructPat | test.rs:280:13:280:24 | PathPat | no-match | -| test.rs:279:26:279:26 | x | test.rs:279:32:279:32 | x | match | -| test.rs:279:32:279:32 | x | test.rs:277:9:281:9 | MatchExpr | | -| test.rs:280:13:280:24 | PathPat | test.rs:280:29:280:29 | 5 | match | -| test.rs:280:29:280:29 | 5 | test.rs:277:9:281:9 | MatchExpr | | -| test.rs:284:5:293:5 | enter test_match_with_return_in_scrutinee | test.rs:284:44:284:54 | maybe_digit | | -| test.rs:284:5:293:5 | exit test_match_with_return_in_scrutinee (normal) | test.rs:284:5:293:5 | exit test_match_with_return_in_scrutinee | | -| test.rs:284:44:284:54 | maybe_digit | test.rs:284:44:284:67 | Param | match | -| test.rs:284:44:284:67 | Param | test.rs:285:19:285:29 | maybe_digit | | -| test.rs:284:77:293:5 | BlockExpr | test.rs:284:5:293:5 | exit test_match_with_return_in_scrutinee (normal) | | -| test.rs:285:9:292:9 | MatchExpr | test.rs:284:77:293:5 | BlockExpr | | -| test.rs:285:16:289:9 | IfExpr | test.rs:290:13:290:27 | TupleStructPat | | -| test.rs:285:19:285:29 | maybe_digit | test.rs:285:34:285:37 | PathExpr | | -| test.rs:285:19:285:40 | ... == ... | test.rs:286:13:286:21 | ExprStmt | true | -| test.rs:285:19:285:40 | ... == ... | test.rs:288:13:288:23 | maybe_digit | false | -| test.rs:285:34:285:37 | PathExpr | test.rs:285:39:285:39 | 3 | | -| test.rs:285:34:285:40 | CallExpr | test.rs:285:19:285:40 | ... == ... | | -| test.rs:285:39:285:39 | 3 | test.rs:285:34:285:40 | CallExpr | | -| test.rs:286:13:286:20 | ReturnExpr | test.rs:284:5:293:5 | exit test_match_with_return_in_scrutinee (normal) | return | -| test.rs:286:13:286:21 | ExprStmt | test.rs:286:20:286:20 | 3 | | -| test.rs:286:20:286:20 | 3 | test.rs:286:13:286:20 | ReturnExpr | | -| test.rs:287:16:289:9 | BlockExpr | test.rs:285:16:289:9 | IfExpr | | -| test.rs:288:13:288:23 | maybe_digit | test.rs:287:16:289:9 | BlockExpr | | -| test.rs:290:13:290:27 | TupleStructPat | test.rs:290:26:290:26 | x | match | -| test.rs:290:13:290:27 | TupleStructPat | test.rs:291:13:291:24 | PathPat | no-match | -| test.rs:290:26:290:26 | x | test.rs:290:32:290:32 | x | match | -| test.rs:290:32:290:32 | x | test.rs:290:36:290:36 | 5 | | -| test.rs:290:32:290:36 | ... + ... | test.rs:285:9:292:9 | MatchExpr | | -| test.rs:290:36:290:36 | 5 | test.rs:290:32:290:36 | ... + ... | | -| test.rs:291:13:291:24 | PathPat | test.rs:291:29:291:29 | 5 | match | -| test.rs:291:29:291:29 | 5 | test.rs:285:9:292:9 | MatchExpr | | -| test.rs:295:5:300:5 | enter test_match_and | test.rs:295:23:295:26 | cond | | -| test.rs:295:5:300:5 | exit test_match_and (normal) | test.rs:295:5:300:5 | exit test_match_and | | -| test.rs:295:23:295:26 | cond | test.rs:295:23:295:32 | Param | match | -| test.rs:295:23:295:32 | Param | test.rs:295:35:295:35 | r | | -| test.rs:295:35:295:35 | r | test.rs:295:35:295:48 | Param | match | -| test.rs:295:35:295:48 | Param | test.rs:296:16:296:16 | r | | -| test.rs:295:59:300:5 | BlockExpr | test.rs:295:5:300:5 | exit test_match_and (normal) | | -| test.rs:296:9:299:18 | ... && ... | test.rs:295:59:300:5 | BlockExpr | | -| test.rs:296:10:299:9 | [boolean(false)] MatchExpr | test.rs:296:9:299:18 | ... && ... | false | -| test.rs:296:10:299:9 | [boolean(true)] MatchExpr | test.rs:299:15:299:18 | cond | true | -| test.rs:296:16:296:16 | r | test.rs:297:13:297:19 | TupleStructPat | | -| test.rs:297:13:297:19 | TupleStructPat | test.rs:297:18:297:18 | a | match | -| test.rs:297:13:297:19 | TupleStructPat | test.rs:298:13:298:13 | WildcardPat | no-match | -| test.rs:297:18:297:18 | a | test.rs:297:24:297:24 | a | match | -| test.rs:297:24:297:24 | a | test.rs:296:10:299:9 | [boolean(false)] MatchExpr | false | -| test.rs:297:24:297:24 | a | test.rs:296:10:299:9 | [boolean(true)] MatchExpr | true | -| test.rs:298:13:298:13 | WildcardPat | test.rs:298:18:298:22 | false | match | -| test.rs:298:18:298:22 | false | test.rs:296:10:299:9 | [boolean(false)] MatchExpr | false | -| test.rs:299:15:299:18 | cond | test.rs:296:9:299:18 | ... && ... | | -| test.rs:305:5:308:5 | enter test_let_match | test.rs:305:23:305:23 | a | | -| test.rs:305:5:308:5 | exit test_let_match (normal) | test.rs:305:5:308:5 | exit test_let_match | | -| test.rs:305:23:305:23 | a | test.rs:305:23:305:36 | Param | match | -| test.rs:305:23:305:36 | Param | test.rs:306:9:306:49 | LetStmt | | -| test.rs:305:39:308:5 | BlockExpr | test.rs:305:5:308:5 | exit test_let_match (normal) | | -| test.rs:306:9:306:49 | LetStmt | test.rs:306:23:306:23 | a | | -| test.rs:306:13:306:19 | TupleStructPat | test.rs:306:18:306:18 | n | match | -| test.rs:306:13:306:19 | TupleStructPat | test.rs:306:32:306:46 | "Expected some" | no-match | -| test.rs:306:18:306:18 | n | test.rs:307:9:307:9 | n | match | -| test.rs:306:23:306:23 | a | test.rs:306:13:306:19 | TupleStructPat | | -| test.rs:306:32:306:46 | "Expected some" | test.rs:306:30:306:48 | BlockExpr | | -| test.rs:307:9:307:9 | n | test.rs:305:39:308:5 | BlockExpr | | -| test.rs:310:5:316:5 | enter test_let_with_return | test.rs:310:29:310:29 | m | | -| test.rs:310:5:316:5 | exit test_let_with_return (normal) | test.rs:310:5:316:5 | exit test_let_with_return | | -| test.rs:310:29:310:29 | m | test.rs:310:29:310:42 | Param | match | -| test.rs:310:29:310:42 | Param | test.rs:311:9:314:10 | LetStmt | | -| test.rs:310:45:316:5 | BlockExpr | test.rs:310:5:316:5 | exit test_let_with_return (normal) | | -| test.rs:311:9:314:10 | LetStmt | test.rs:311:25:311:25 | m | | -| test.rs:311:13:311:15 | ret | test.rs:315:9:315:12 | true | match | -| test.rs:311:19:314:9 | MatchExpr | test.rs:311:13:311:15 | ret | | -| test.rs:311:25:311:25 | m | test.rs:312:13:312:21 | TupleStructPat | | -| test.rs:312:13:312:21 | TupleStructPat | test.rs:312:18:312:20 | ret | match | -| test.rs:312:13:312:21 | TupleStructPat | test.rs:313:13:313:16 | None | no-match | -| test.rs:312:18:312:20 | ret | test.rs:312:26:312:28 | ret | match | -| test.rs:312:26:312:28 | ret | test.rs:311:19:314:9 | MatchExpr | | -| test.rs:313:13:313:16 | None | test.rs:313:28:313:32 | false | match | -| test.rs:313:21:313:32 | ReturnExpr | test.rs:310:5:316:5 | exit test_let_with_return (normal) | return | -| test.rs:313:28:313:32 | false | test.rs:313:21:313:32 | ReturnExpr | | -| test.rs:315:9:315:12 | true | test.rs:310:45:316:5 | BlockExpr | | -| test.rs:321:5:324:5 | enter empty_tuple_pattern | test.rs:321:28:321:31 | unit | | -| test.rs:321:5:324:5 | exit empty_tuple_pattern (normal) | test.rs:321:5:324:5 | exit empty_tuple_pattern | | -| test.rs:321:28:321:31 | unit | test.rs:321:28:321:35 | Param | match | -| test.rs:321:28:321:35 | Param | test.rs:322:9:322:22 | LetStmt | | -| test.rs:322:9:322:22 | LetStmt | test.rs:322:18:322:21 | unit | | -| test.rs:322:13:322:14 | TuplePat | test.rs:323:9:323:15 | ExprStmt | match | -| test.rs:322:18:322:21 | unit | test.rs:322:13:322:14 | TuplePat | | -| test.rs:323:9:323:14 | ReturnExpr | test.rs:321:5:324:5 | exit empty_tuple_pattern (normal) | return | -| test.rs:323:9:323:15 | ExprStmt | test.rs:323:9:323:14 | ReturnExpr | | -| test.rs:328:5:332:5 | enter empty_struct_pattern | test.rs:328:29:328:30 | st | | -| test.rs:328:5:332:5 | exit empty_struct_pattern (normal) | test.rs:328:5:332:5 | exit empty_struct_pattern | | -| test.rs:328:29:328:30 | st | test.rs:328:29:328:40 | Param | match | -| test.rs:328:29:328:40 | Param | test.rs:329:15:329:16 | st | | -| test.rs:328:50:332:5 | BlockExpr | test.rs:328:5:332:5 | exit empty_struct_pattern (normal) | | -| test.rs:329:9:331:9 | MatchExpr | test.rs:328:50:332:5 | BlockExpr | | -| test.rs:329:15:329:16 | st | test.rs:330:13:330:23 | RecordPat | | -| test.rs:330:13:330:23 | RecordPat | test.rs:330:28:330:28 | 1 | match | -| test.rs:330:28:330:28 | 1 | test.rs:329:9:331:9 | MatchExpr | | -| test.rs:334:5:341:5 | enter range_pattern | test.rs:335:15:335:16 | 42 | | -| test.rs:334:5:341:5 | exit range_pattern (normal) | test.rs:334:5:341:5 | exit range_pattern | | -| test.rs:334:31:341:5 | BlockExpr | test.rs:334:5:341:5 | exit range_pattern (normal) | | -| test.rs:335:9:340:9 | MatchExpr | test.rs:334:31:341:5 | BlockExpr | | -| test.rs:335:15:335:16 | 42 | test.rs:336:13:336:15 | RangePat | | -| test.rs:336:13:336:15 | RangePat | test.rs:336:15:336:15 | LiteralPat | match | -| test.rs:336:13:336:15 | RangePat | test.rs:337:13:337:16 | RangePat | no-match | -| test.rs:336:15:336:15 | LiteralPat | test.rs:336:20:336:20 | 1 | match | -| test.rs:336:15:336:15 | LiteralPat | test.rs:337:13:337:16 | RangePat | no-match | -| test.rs:336:20:336:20 | 1 | test.rs:335:9:340:9 | MatchExpr | | -| test.rs:337:13:337:13 | LiteralPat | test.rs:337:16:337:16 | LiteralPat | match | -| test.rs:337:13:337:13 | LiteralPat | test.rs:338:13:338:15 | RangePat | no-match | -| test.rs:337:13:337:16 | RangePat | test.rs:337:13:337:13 | LiteralPat | match | -| test.rs:337:13:337:16 | RangePat | test.rs:338:13:338:15 | RangePat | no-match | -| test.rs:337:16:337:16 | LiteralPat | test.rs:337:21:337:21 | 2 | match | -| test.rs:337:16:337:16 | LiteralPat | test.rs:338:13:338:15 | RangePat | no-match | -| test.rs:337:21:337:21 | 2 | test.rs:335:9:340:9 | MatchExpr | | -| test.rs:338:13:338:13 | LiteralPat | test.rs:338:20:338:20 | 3 | match | -| test.rs:338:13:338:13 | LiteralPat | test.rs:339:13:339:14 | RestPat | no-match | -| test.rs:338:13:338:15 | RangePat | test.rs:338:13:338:13 | LiteralPat | match | -| test.rs:338:13:338:15 | RangePat | test.rs:339:13:339:14 | RestPat | no-match | -| test.rs:338:20:338:20 | 3 | test.rs:335:9:340:9 | MatchExpr | | -| test.rs:339:13:339:14 | RestPat | test.rs:339:19:339:19 | 4 | match | -| test.rs:339:19:339:19 | 4 | test.rs:335:9:340:9 | MatchExpr | | -| test.rs:345:5:350:5 | enter test_infinite_loop | test.rs:346:9:348:9 | ExprStmt | | -| test.rs:346:9:348:9 | ExprStmt | test.rs:347:13:347:13 | 1 | | -| test.rs:346:14:348:9 | BlockExpr | test.rs:347:13:347:13 | 1 | | -| test.rs:347:13:347:13 | 1 | test.rs:346:14:348:9 | BlockExpr | | -| test.rs:353:1:358:1 | enter dead_code | test.rs:354:5:356:5 | ExprStmt | | -| test.rs:353:1:358:1 | exit dead_code (normal) | test.rs:353:1:358:1 | exit dead_code | | -| test.rs:354:5:356:5 | ExprStmt | test.rs:354:9:354:12 | true | | -| test.rs:354:9:354:12 | true | test.rs:355:9:355:17 | ExprStmt | true | -| test.rs:355:9:355:16 | ReturnExpr | test.rs:353:1:358:1 | exit dead_code (normal) | return | -| test.rs:355:9:355:17 | ExprStmt | test.rs:355:16:355:16 | 0 | | -| test.rs:355:16:355:16 | 0 | test.rs:355:9:355:16 | ReturnExpr | | -| test.rs:360:1:373:1 | enter labelled_block1 | test.rs:361:5:372:6 | LetStmt | | -| test.rs:360:1:373:1 | exit labelled_block1 (normal) | test.rs:360:1:373:1 | exit labelled_block1 | | -| test.rs:360:29:373:1 | BlockExpr | test.rs:360:1:373:1 | exit labelled_block1 (normal) | | -| test.rs:361:5:372:6 | LetStmt | test.rs:362:9:362:19 | ExprStmt | | -| test.rs:361:9:361:14 | result | test.rs:360:29:373:1 | BlockExpr | match | -| test.rs:361:18:372:5 | BlockExpr | test.rs:361:9:361:14 | result | | -| test.rs:362:9:362:16 | PathExpr | test.rs:362:9:362:18 | CallExpr | | -| test.rs:362:9:362:18 | CallExpr | test.rs:363:9:365:9 | ExprStmt | | -| test.rs:362:9:362:19 | ExprStmt | test.rs:362:9:362:16 | PathExpr | | -| test.rs:363:9:365:9 | ExprStmt | test.rs:363:12:363:28 | PathExpr | | -| test.rs:363:9:365:9 | IfExpr | test.rs:366:9:366:24 | ExprStmt | | -| test.rs:363:12:363:28 | PathExpr | test.rs:363:12:363:30 | CallExpr | | -| test.rs:363:12:363:30 | CallExpr | test.rs:363:9:365:9 | IfExpr | false | -| test.rs:363:12:363:30 | CallExpr | test.rs:364:13:364:27 | ExprStmt | true | -| test.rs:364:13:364:26 | BreakExpr | test.rs:361:18:372:5 | BlockExpr | break | -| test.rs:364:13:364:27 | ExprStmt | test.rs:364:26:364:26 | 1 | | -| test.rs:364:26:364:26 | 1 | test.rs:364:13:364:26 | BreakExpr | | -| test.rs:366:9:366:21 | PathExpr | test.rs:366:9:366:23 | CallExpr | | -| test.rs:366:9:366:23 | CallExpr | test.rs:367:9:369:9 | ExprStmt | | -| test.rs:366:9:366:24 | ExprStmt | test.rs:366:9:366:21 | PathExpr | | -| test.rs:367:9:369:9 | ExprStmt | test.rs:367:12:367:28 | PathExpr | | -| test.rs:367:9:369:9 | IfExpr | test.rs:370:9:370:24 | ExprStmt | | -| test.rs:367:12:367:28 | PathExpr | test.rs:367:12:367:30 | CallExpr | | -| test.rs:367:12:367:30 | CallExpr | test.rs:367:9:369:9 | IfExpr | false | -| test.rs:367:12:367:30 | CallExpr | test.rs:368:13:368:27 | ExprStmt | true | -| test.rs:368:13:368:26 | BreakExpr | test.rs:361:18:372:5 | BlockExpr | break | -| test.rs:368:13:368:27 | ExprStmt | test.rs:368:26:368:26 | 2 | | -| test.rs:368:26:368:26 | 2 | test.rs:368:13:368:26 | BreakExpr | | -| test.rs:370:9:370:21 | PathExpr | test.rs:370:9:370:23 | CallExpr | | -| test.rs:370:9:370:23 | CallExpr | test.rs:371:9:371:9 | 3 | | -| test.rs:370:9:370:24 | ExprStmt | test.rs:370:9:370:21 | PathExpr | | -| test.rs:371:9:371:9 | 3 | test.rs:361:18:372:5 | BlockExpr | | -| test.rs:375:1:383:1 | enter labelled_block2 | test.rs:376:5:382:6 | LetStmt | | -| test.rs:375:1:383:1 | exit labelled_block2 (normal) | test.rs:375:1:383:1 | exit labelled_block2 | | -| test.rs:375:29:383:1 | BlockExpr | test.rs:375:1:383:1 | exit labelled_block2 (normal) | | -| test.rs:376:5:382:6 | LetStmt | test.rs:377:9:377:34 | LetStmt | | -| test.rs:376:9:376:14 | result | test.rs:375:29:383:1 | BlockExpr | match | -| test.rs:376:18:382:5 | BlockExpr | test.rs:376:9:376:14 | result | | -| test.rs:377:9:377:34 | LetStmt | test.rs:377:30:377:33 | PathExpr | | -| test.rs:377:13:377:13 | x | test.rs:378:9:380:10 | LetStmt | match | -| test.rs:377:30:377:33 | PathExpr | test.rs:377:13:377:13 | x | | -| test.rs:378:9:380:10 | LetStmt | test.rs:378:23:378:23 | x | | -| test.rs:378:13:378:19 | TupleStructPat | test.rs:378:18:378:18 | y | match | -| test.rs:378:13:378:19 | TupleStructPat | test.rs:379:13:379:27 | ExprStmt | no-match | -| test.rs:378:18:378:18 | y | test.rs:381:9:381:9 | x | match | -| test.rs:378:23:378:23 | x | test.rs:378:13:378:19 | TupleStructPat | | -| test.rs:379:13:379:26 | BreakExpr | test.rs:376:18:382:5 | BlockExpr | break | -| test.rs:379:13:379:27 | ExprStmt | test.rs:379:26:379:26 | 1 | | -| test.rs:379:26:379:26 | 1 | test.rs:379:13:379:26 | BreakExpr | | -| test.rs:381:9:381:9 | x | test.rs:376:18:382:5 | BlockExpr | | -| test.rs:385:1:391:1 | enter test_nested_function | test.rs:386:5:386:18 | LetStmt | | -| test.rs:385:1:391:1 | exit test_nested_function (normal) | test.rs:385:1:391:1 | exit test_nested_function | | -| test.rs:385:27:391:1 | BlockExpr | test.rs:385:1:391:1 | exit test_nested_function (normal) | | -| test.rs:386:5:386:18 | LetStmt | test.rs:386:17:386:17 | 0 | | -| test.rs:386:9:386:13 | x | test.rs:387:5:389:5 | nested | match | -| test.rs:386:17:386:17 | 0 | test.rs:386:9:386:13 | x | | -| test.rs:387:5:389:5 | enter nested | test.rs:387:15:387:15 | x | | -| test.rs:387:5:389:5 | exit nested (normal) | test.rs:387:5:389:5 | exit nested | | -| test.rs:387:5:389:5 | nested | test.rs:390:5:390:19 | ExprStmt | | -| test.rs:387:15:387:15 | x | test.rs:387:15:387:25 | Param | match | -| test.rs:387:15:387:25 | Param | test.rs:388:9:388:16 | ExprStmt | | -| test.rs:387:28:389:5 | BlockExpr | test.rs:387:5:389:5 | exit nested (normal) | | -| test.rs:388:9:388:10 | * ... | test.rs:388:15:388:15 | 1 | | -| test.rs:388:9:388:15 | ... += ... | test.rs:387:28:389:5 | BlockExpr | | -| test.rs:388:9:388:16 | ExprStmt | test.rs:388:10:388:10 | x | | -| test.rs:388:10:388:10 | x | test.rs:388:9:388:10 | * ... | | -| test.rs:388:15:388:15 | 1 | test.rs:388:9:388:15 | ... += ... | | -| test.rs:390:5:390:10 | PathExpr | test.rs:390:17:390:17 | x | | -| test.rs:390:5:390:18 | CallExpr | test.rs:385:27:391:1 | BlockExpr | | -| test.rs:390:5:390:19 | ExprStmt | test.rs:390:5:390:10 | PathExpr | | -| test.rs:390:12:390:17 | RefExpr | test.rs:390:5:390:18 | CallExpr | | -| test.rs:390:17:390:17 | x | test.rs:390:12:390:17 | RefExpr | | +| test.rs:106:5:110:5 | enter break_with_return | test.rs:108:13:108:27 | ExprStmt | | +| test.rs:106:5:110:5 | exit break_with_return (normal) | test.rs:106:5:110:5 | exit break_with_return | | +| test.rs:106:35:110:5 | BlockExpr | test.rs:106:5:110:5 | exit break_with_return (normal) | | +| test.rs:107:9:109:9 | LoopExpr | test.rs:106:35:110:5 | BlockExpr | | +| test.rs:108:13:108:26 | BreakExpr | test.rs:107:9:109:9 | LoopExpr | break | +| test.rs:108:13:108:27 | ExprStmt | test.rs:108:26:108:26 | 1 | | +| test.rs:108:19:108:26 | ReturnExpr | test.rs:106:5:110:5 | exit break_with_return (normal) | return | +| test.rs:108:19:108:26 | ReturnExpr | test.rs:108:13:108:26 | BreakExpr | return | +| test.rs:108:26:108:26 | 1 | test.rs:108:19:108:26 | ReturnExpr | | +| test.rs:113:1:116:1 | enter test_nested_function | test.rs:113:25:113:25 | n | | +| test.rs:113:1:116:1 | exit test_nested_function (normal) | test.rs:113:1:116:1 | exit test_nested_function | | +| test.rs:113:25:113:25 | n | test.rs:113:25:113:30 | Param | match | +| test.rs:113:25:113:30 | Param | test.rs:114:5:114:28 | LetStmt | | +| test.rs:113:40:116:1 | BlockExpr | test.rs:113:1:116:1 | exit test_nested_function (normal) | | +| test.rs:114:5:114:28 | LetStmt | test.rs:114:19:114:27 | ClosureExpr | | +| test.rs:114:9:114:15 | add_one | test.rs:115:5:115:11 | add_one | match | +| test.rs:114:19:114:27 | ClosureExpr | test.rs:114:9:114:15 | add_one | | +| test.rs:114:19:114:27 | enter ClosureExpr | test.rs:114:20:114:20 | i | | +| test.rs:114:19:114:27 | exit ClosureExpr (normal) | test.rs:114:19:114:27 | exit ClosureExpr | | +| test.rs:114:20:114:20 | Param | test.rs:114:23:114:23 | i | | +| test.rs:114:20:114:20 | i | test.rs:114:20:114:20 | Param | match | +| test.rs:114:23:114:23 | i | test.rs:114:27:114:27 | 1 | | +| test.rs:114:23:114:27 | ... + ... | test.rs:114:19:114:27 | exit ClosureExpr (normal) | | +| test.rs:114:27:114:27 | 1 | test.rs:114:23:114:27 | ... + ... | | +| test.rs:115:5:115:11 | add_one | test.rs:115:13:115:19 | add_one | | +| test.rs:115:5:115:23 | CallExpr | test.rs:113:40:116:1 | BlockExpr | | +| test.rs:115:13:115:19 | add_one | test.rs:115:21:115:21 | n | | +| test.rs:115:13:115:22 | CallExpr | test.rs:115:5:115:23 | CallExpr | | +| test.rs:115:21:115:21 | n | test.rs:115:13:115:22 | CallExpr | | +| test.rs:120:5:126:5 | enter test_if_else | test.rs:120:21:120:21 | n | | +| test.rs:120:5:126:5 | exit test_if_else (normal) | test.rs:120:5:126:5 | exit test_if_else | | +| test.rs:120:21:120:21 | n | test.rs:120:21:120:26 | Param | match | +| test.rs:120:21:120:26 | Param | test.rs:121:12:121:12 | n | | +| test.rs:120:36:126:5 | BlockExpr | test.rs:120:5:126:5 | exit test_if_else (normal) | | +| test.rs:121:9:125:9 | IfExpr | test.rs:120:36:126:5 | BlockExpr | | +| test.rs:121:12:121:12 | n | test.rs:121:17:121:17 | 0 | | +| test.rs:121:12:121:17 | ... <= ... | test.rs:122:13:122:13 | 0 | true | +| test.rs:121:12:121:17 | ... <= ... | test.rs:124:13:124:13 | n | false | +| test.rs:121:17:121:17 | 0 | test.rs:121:12:121:17 | ... <= ... | | +| test.rs:121:19:123:9 | BlockExpr | test.rs:121:9:125:9 | IfExpr | | +| test.rs:122:13:122:13 | 0 | test.rs:121:19:123:9 | BlockExpr | | +| test.rs:123:16:125:9 | BlockExpr | test.rs:121:9:125:9 | IfExpr | | +| test.rs:124:13:124:13 | n | test.rs:124:17:124:17 | 1 | | +| test.rs:124:13:124:17 | ... - ... | test.rs:123:16:125:9 | BlockExpr | | +| test.rs:124:17:124:17 | 1 | test.rs:124:13:124:17 | ... - ... | | +| test.rs:128:5:134:5 | enter test_if_let_else | test.rs:128:25:128:25 | a | | +| test.rs:128:5:134:5 | exit test_if_let_else (normal) | test.rs:128:5:134:5 | exit test_if_let_else | | +| test.rs:128:25:128:25 | a | test.rs:128:25:128:38 | Param | match | +| test.rs:128:25:128:38 | Param | test.rs:129:12:129:26 | LetExpr | | +| test.rs:128:48:134:5 | BlockExpr | test.rs:128:5:134:5 | exit test_if_let_else (normal) | | +| test.rs:129:9:133:9 | IfExpr | test.rs:128:48:134:5 | BlockExpr | | +| test.rs:129:12:129:26 | LetExpr | test.rs:129:26:129:26 | a | | +| test.rs:129:16:129:22 | TupleStructPat | test.rs:129:21:129:21 | n | match | +| test.rs:129:16:129:22 | TupleStructPat | test.rs:132:13:132:13 | 0 | no-match | +| test.rs:129:21:129:21 | n | test.rs:130:13:130:13 | n | match | +| test.rs:129:26:129:26 | a | test.rs:129:16:129:22 | TupleStructPat | | +| test.rs:129:28:131:9 | BlockExpr | test.rs:129:9:133:9 | IfExpr | | +| test.rs:130:13:130:13 | n | test.rs:129:28:131:9 | BlockExpr | | +| test.rs:131:16:133:9 | BlockExpr | test.rs:129:9:133:9 | IfExpr | | +| test.rs:132:13:132:13 | 0 | test.rs:131:16:133:9 | BlockExpr | | +| test.rs:136:5:141:5 | enter test_if_let | test.rs:136:20:136:20 | a | | +| test.rs:136:5:141:5 | exit test_if_let (normal) | test.rs:136:5:141:5 | exit test_if_let | | +| test.rs:136:20:136:20 | a | test.rs:136:20:136:33 | Param | match | +| test.rs:136:20:136:33 | Param | test.rs:137:9:139:9 | ExprStmt | | +| test.rs:136:43:141:5 | BlockExpr | test.rs:136:5:141:5 | exit test_if_let (normal) | | +| test.rs:137:9:139:9 | ExprStmt | test.rs:137:12:137:26 | LetExpr | | +| test.rs:137:9:139:9 | IfExpr | test.rs:140:9:140:9 | 0 | | +| test.rs:137:12:137:26 | LetExpr | test.rs:137:26:137:26 | a | | +| test.rs:137:16:137:22 | TupleStructPat | test.rs:137:9:139:9 | IfExpr | no-match | +| test.rs:137:16:137:22 | TupleStructPat | test.rs:137:21:137:21 | n | match | +| test.rs:137:21:137:21 | n | test.rs:138:13:138:13 | n | match | +| test.rs:137:26:137:26 | a | test.rs:137:16:137:22 | TupleStructPat | | +| test.rs:137:28:139:9 | BlockExpr | test.rs:137:9:139:9 | IfExpr | | +| test.rs:138:13:138:13 | n | test.rs:137:28:139:9 | BlockExpr | | +| test.rs:140:9:140:9 | 0 | test.rs:136:43:141:5 | BlockExpr | | +| test.rs:143:5:149:5 | enter test_nested_if | test.rs:143:23:143:23 | a | | +| test.rs:143:5:149:5 | exit test_nested_if (normal) | test.rs:143:5:149:5 | exit test_nested_if | | +| test.rs:143:23:143:23 | a | test.rs:143:23:143:28 | Param | match | +| test.rs:143:23:143:28 | Param | test.rs:144:16:144:16 | a | | +| test.rs:143:38:149:5 | BlockExpr | test.rs:143:5:149:5 | exit test_nested_if (normal) | | +| test.rs:144:9:148:9 | IfExpr | test.rs:143:38:149:5 | BlockExpr | | +| test.rs:144:13:144:48 | [boolean(false)] IfExpr | test.rs:147:13:147:13 | 0 | false | +| test.rs:144:13:144:48 | [boolean(true)] IfExpr | test.rs:145:13:145:13 | 1 | true | +| test.rs:144:16:144:16 | a | test.rs:144:20:144:20 | 0 | | +| test.rs:144:16:144:20 | ... < ... | test.rs:144:24:144:24 | a | true | +| test.rs:144:16:144:20 | ... < ... | test.rs:144:41:144:41 | a | false | +| test.rs:144:20:144:20 | 0 | test.rs:144:16:144:20 | ... < ... | | +| test.rs:144:22:144:32 | [boolean(false)] BlockExpr | test.rs:144:13:144:48 | [boolean(false)] IfExpr | false | +| test.rs:144:22:144:32 | [boolean(true)] BlockExpr | test.rs:144:13:144:48 | [boolean(true)] IfExpr | true | +| test.rs:144:24:144:24 | a | test.rs:144:29:144:30 | 10 | | +| test.rs:144:24:144:30 | ... < ... | test.rs:144:22:144:32 | [boolean(false)] BlockExpr | false | +| test.rs:144:24:144:30 | ... < ... | test.rs:144:22:144:32 | [boolean(true)] BlockExpr | true | +| test.rs:144:28:144:30 | - ... | test.rs:144:24:144:30 | ... < ... | | +| test.rs:144:29:144:30 | 10 | test.rs:144:28:144:30 | - ... | | +| test.rs:144:39:144:48 | [boolean(false)] BlockExpr | test.rs:144:13:144:48 | [boolean(false)] IfExpr | false | +| test.rs:144:39:144:48 | [boolean(true)] BlockExpr | test.rs:144:13:144:48 | [boolean(true)] IfExpr | true | +| test.rs:144:41:144:41 | a | test.rs:144:45:144:46 | 10 | | +| test.rs:144:41:144:46 | ... > ... | test.rs:144:39:144:48 | [boolean(false)] BlockExpr | false | +| test.rs:144:41:144:46 | ... > ... | test.rs:144:39:144:48 | [boolean(true)] BlockExpr | true | +| test.rs:144:45:144:46 | 10 | test.rs:144:41:144:46 | ... > ... | | +| test.rs:144:51:146:9 | BlockExpr | test.rs:144:9:148:9 | IfExpr | | +| test.rs:145:13:145:13 | 1 | test.rs:144:51:146:9 | BlockExpr | | +| test.rs:146:16:148:9 | BlockExpr | test.rs:144:9:148:9 | IfExpr | | +| test.rs:147:13:147:13 | 0 | test.rs:146:16:148:9 | BlockExpr | | +| test.rs:151:5:160:5 | enter test_nested_if_match | test.rs:151:29:151:29 | a | | +| test.rs:151:5:160:5 | exit test_nested_if_match (normal) | test.rs:151:5:160:5 | exit test_nested_if_match | | +| test.rs:151:29:151:29 | a | test.rs:151:29:151:34 | Param | match | +| test.rs:151:29:151:34 | Param | test.rs:152:19:152:19 | a | | +| test.rs:151:44:160:5 | BlockExpr | test.rs:151:5:160:5 | exit test_nested_if_match (normal) | | +| test.rs:152:9:159:9 | IfExpr | test.rs:151:44:160:5 | BlockExpr | | +| test.rs:152:13:155:9 | [boolean(false)] MatchExpr | test.rs:158:13:158:13 | 0 | false | +| test.rs:152:13:155:9 | [boolean(true)] MatchExpr | test.rs:156:13:156:13 | 1 | true | +| test.rs:152:19:152:19 | a | test.rs:153:13:153:13 | LiteralPat | | +| test.rs:153:13:153:13 | LiteralPat | test.rs:153:18:153:21 | true | match | +| test.rs:153:13:153:13 | LiteralPat | test.rs:154:13:154:13 | WildcardPat | no-match | +| test.rs:153:18:153:21 | true | test.rs:152:13:155:9 | [boolean(true)] MatchExpr | true | +| test.rs:154:13:154:13 | WildcardPat | test.rs:154:18:154:22 | false | match | +| test.rs:154:18:154:22 | false | test.rs:152:13:155:9 | [boolean(false)] MatchExpr | false | +| test.rs:155:12:157:9 | BlockExpr | test.rs:152:9:159:9 | IfExpr | | +| test.rs:156:13:156:13 | 1 | test.rs:155:12:157:9 | BlockExpr | | +| test.rs:157:16:159:9 | BlockExpr | test.rs:152:9:159:9 | IfExpr | | +| test.rs:158:13:158:13 | 0 | test.rs:157:16:159:9 | BlockExpr | | +| test.rs:162:5:171:5 | enter test_nested_if_block | test.rs:162:29:162:29 | a | | +| test.rs:162:5:171:5 | exit test_nested_if_block (normal) | test.rs:162:5:171:5 | exit test_nested_if_block | | +| test.rs:162:29:162:29 | a | test.rs:162:29:162:34 | Param | match | +| test.rs:162:29:162:34 | Param | test.rs:164:13:164:15 | ExprStmt | | +| test.rs:162:44:171:5 | BlockExpr | test.rs:162:5:171:5 | exit test_nested_if_block (normal) | | +| test.rs:163:9:170:9 | IfExpr | test.rs:162:44:171:5 | BlockExpr | | +| test.rs:163:12:166:9 | [boolean(false)] BlockExpr | test.rs:169:13:169:13 | 0 | false | +| test.rs:163:12:166:9 | [boolean(true)] BlockExpr | test.rs:167:13:167:13 | 1 | true | +| test.rs:164:13:164:14 | TupleExpr | test.rs:165:13:165:13 | a | | +| test.rs:164:13:164:15 | ExprStmt | test.rs:164:13:164:14 | TupleExpr | | +| test.rs:165:13:165:13 | a | test.rs:165:17:165:17 | 0 | | +| test.rs:165:13:165:17 | ... > ... | test.rs:163:12:166:9 | [boolean(false)] BlockExpr | false | +| test.rs:165:13:165:17 | ... > ... | test.rs:163:12:166:9 | [boolean(true)] BlockExpr | true | +| test.rs:165:17:165:17 | 0 | test.rs:165:13:165:17 | ... > ... | | +| test.rs:166:11:168:9 | BlockExpr | test.rs:163:9:170:9 | IfExpr | | +| test.rs:167:13:167:13 | 1 | test.rs:166:11:168:9 | BlockExpr | | +| test.rs:168:16:170:9 | BlockExpr | test.rs:163:9:170:9 | IfExpr | | +| test.rs:169:13:169:13 | 0 | test.rs:168:16:170:9 | BlockExpr | | +| test.rs:173:5:180:5 | enter test_if_assignment | test.rs:173:27:173:27 | a | | +| test.rs:173:5:180:5 | exit test_if_assignment (normal) | test.rs:173:5:180:5 | exit test_if_assignment | | +| test.rs:173:27:173:27 | a | test.rs:173:27:173:32 | Param | match | +| test.rs:173:27:173:32 | Param | test.rs:174:9:174:26 | LetStmt | | +| test.rs:173:42:180:5 | BlockExpr | test.rs:173:5:180:5 | exit test_if_assignment (normal) | | +| test.rs:174:9:174:26 | LetStmt | test.rs:174:21:174:25 | false | | +| test.rs:174:13:174:17 | x | test.rs:175:12:175:12 | x | match | +| test.rs:174:21:174:25 | false | test.rs:174:13:174:17 | x | | +| test.rs:175:9:179:9 | IfExpr | test.rs:173:42:180:5 | BlockExpr | | +| test.rs:175:12:175:12 | x | test.rs:175:16:175:19 | true | | +| test.rs:175:12:175:19 | ... = ... | test.rs:176:13:176:13 | 1 | true | +| test.rs:175:12:175:19 | ... = ... | test.rs:178:13:178:13 | 0 | false | +| test.rs:175:16:175:19 | true | test.rs:175:12:175:19 | ... = ... | | +| test.rs:175:21:177:9 | BlockExpr | test.rs:175:9:179:9 | IfExpr | | +| test.rs:176:13:176:13 | 1 | test.rs:175:21:177:9 | BlockExpr | | +| test.rs:177:16:179:9 | BlockExpr | test.rs:175:9:179:9 | IfExpr | | +| test.rs:178:13:178:13 | 0 | test.rs:177:16:179:9 | BlockExpr | | +| test.rs:182:5:193:5 | enter test_if_loop1 | test.rs:182:22:182:22 | a | | +| test.rs:182:5:193:5 | exit test_if_loop1 (normal) | test.rs:182:5:193:5 | exit test_if_loop1 | | +| test.rs:182:22:182:22 | a | test.rs:182:22:182:27 | Param | match | +| test.rs:182:22:182:27 | Param | test.rs:184:13:186:14 | ExprStmt | | +| test.rs:182:37:193:5 | BlockExpr | test.rs:182:5:193:5 | exit test_if_loop1 (normal) | | +| test.rs:183:9:192:9 | IfExpr | test.rs:182:37:193:5 | BlockExpr | | +| test.rs:183:13:188:9 | [boolean(false)] LoopExpr | test.rs:191:13:191:13 | 0 | false | +| test.rs:183:13:188:9 | [boolean(true)] LoopExpr | test.rs:189:13:189:13 | 1 | true | +| test.rs:183:18:188:9 | BlockExpr | test.rs:184:13:186:14 | ExprStmt | | +| test.rs:184:13:186:13 | IfExpr | test.rs:187:13:187:19 | ExprStmt | | +| test.rs:184:13:186:14 | ExprStmt | test.rs:184:16:184:16 | a | | +| test.rs:184:16:184:16 | a | test.rs:184:20:184:20 | 0 | | +| test.rs:184:16:184:20 | ... > ... | test.rs:184:13:186:13 | IfExpr | false | +| test.rs:184:16:184:20 | ... > ... | test.rs:185:17:185:29 | ExprStmt | true | +| test.rs:184:20:184:20 | 0 | test.rs:184:16:184:20 | ... > ... | | +| test.rs:185:17:185:28 | [boolean(false)] BreakExpr | test.rs:183:13:188:9 | [boolean(false)] LoopExpr | break | +| test.rs:185:17:185:28 | [boolean(true)] BreakExpr | test.rs:183:13:188:9 | [boolean(true)] LoopExpr | break | +| test.rs:185:17:185:29 | ExprStmt | test.rs:185:23:185:23 | a | | +| test.rs:185:23:185:23 | a | test.rs:185:27:185:28 | 10 | | +| test.rs:185:23:185:28 | ... > ... | test.rs:185:17:185:28 | [boolean(false)] BreakExpr | false | +| test.rs:185:23:185:28 | ... > ... | test.rs:185:17:185:28 | [boolean(true)] BreakExpr | true | +| test.rs:185:27:185:28 | 10 | test.rs:185:23:185:28 | ... > ... | | +| test.rs:187:13:187:13 | a | test.rs:187:17:187:18 | 10 | | +| test.rs:187:13:187:18 | ... < ... | test.rs:183:18:188:9 | BlockExpr | | +| test.rs:187:13:187:19 | ExprStmt | test.rs:187:13:187:13 | a | | +| test.rs:187:17:187:18 | 10 | test.rs:187:13:187:18 | ... < ... | | +| test.rs:188:12:190:9 | BlockExpr | test.rs:183:9:192:9 | IfExpr | | +| test.rs:189:13:189:13 | 1 | test.rs:188:12:190:9 | BlockExpr | | +| test.rs:190:16:192:9 | BlockExpr | test.rs:183:9:192:9 | IfExpr | | +| test.rs:191:13:191:13 | 0 | test.rs:190:16:192:9 | BlockExpr | | +| test.rs:195:5:206:5 | enter test_if_loop2 | test.rs:195:22:195:22 | a | | +| test.rs:195:5:206:5 | exit test_if_loop2 (normal) | test.rs:195:5:206:5 | exit test_if_loop2 | | +| test.rs:195:22:195:22 | a | test.rs:195:22:195:27 | Param | match | +| test.rs:195:22:195:27 | Param | test.rs:197:13:199:14 | ExprStmt | | +| test.rs:195:37:206:5 | BlockExpr | test.rs:195:5:206:5 | exit test_if_loop2 (normal) | | +| test.rs:196:9:205:9 | IfExpr | test.rs:195:37:206:5 | BlockExpr | | +| test.rs:196:13:201:9 | [boolean(false)] LoopExpr | test.rs:204:13:204:13 | 0 | false | +| test.rs:196:13:201:9 | [boolean(true)] LoopExpr | test.rs:202:13:202:13 | 1 | true | +| test.rs:196:26:201:9 | BlockExpr | test.rs:197:13:199:14 | ExprStmt | | +| test.rs:197:13:199:13 | IfExpr | test.rs:200:13:200:19 | ExprStmt | | +| test.rs:197:13:199:14 | ExprStmt | test.rs:197:16:197:16 | a | | +| test.rs:197:16:197:16 | a | test.rs:197:20:197:20 | 0 | | +| test.rs:197:16:197:20 | ... > ... | test.rs:197:13:199:13 | IfExpr | false | +| test.rs:197:16:197:20 | ... > ... | test.rs:198:17:198:36 | ExprStmt | true | +| test.rs:197:20:197:20 | 0 | test.rs:197:16:197:20 | ... > ... | | +| test.rs:198:17:198:35 | [boolean(false)] BreakExpr | test.rs:196:13:201:9 | [boolean(false)] LoopExpr | break | +| test.rs:198:17:198:35 | [boolean(true)] BreakExpr | test.rs:196:13:201:9 | [boolean(true)] LoopExpr | break | +| test.rs:198:17:198:36 | ExprStmt | test.rs:198:30:198:30 | a | | +| test.rs:198:30:198:30 | a | test.rs:198:34:198:35 | 10 | | +| test.rs:198:30:198:35 | ... > ... | test.rs:198:17:198:35 | [boolean(false)] BreakExpr | false | +| test.rs:198:30:198:35 | ... > ... | test.rs:198:17:198:35 | [boolean(true)] BreakExpr | true | +| test.rs:198:34:198:35 | 10 | test.rs:198:30:198:35 | ... > ... | | +| test.rs:200:13:200:13 | a | test.rs:200:17:200:18 | 10 | | +| test.rs:200:13:200:18 | ... < ... | test.rs:196:26:201:9 | BlockExpr | | +| test.rs:200:13:200:19 | ExprStmt | test.rs:200:13:200:13 | a | | +| test.rs:200:17:200:18 | 10 | test.rs:200:13:200:18 | ... < ... | | +| test.rs:201:12:203:9 | BlockExpr | test.rs:196:9:205:9 | IfExpr | | +| test.rs:202:13:202:13 | 1 | test.rs:201:12:203:9 | BlockExpr | | +| test.rs:203:16:205:9 | BlockExpr | test.rs:196:9:205:9 | IfExpr | | +| test.rs:204:13:204:13 | 0 | test.rs:203:16:205:9 | BlockExpr | | +| test.rs:208:5:216:5 | enter test_labelled_block | test.rs:208:28:208:28 | a | | +| test.rs:208:5:216:5 | exit test_labelled_block (normal) | test.rs:208:5:216:5 | exit test_labelled_block | | +| test.rs:208:28:208:28 | a | test.rs:208:28:208:33 | Param | match | +| test.rs:208:28:208:33 | Param | test.rs:210:13:210:31 | ExprStmt | | +| test.rs:208:43:216:5 | BlockExpr | test.rs:208:5:216:5 | exit test_labelled_block (normal) | | +| test.rs:209:9:215:9 | IfExpr | test.rs:208:43:216:5 | BlockExpr | | +| test.rs:209:13:211:9 | [boolean(false)] BlockExpr | test.rs:214:13:214:13 | 0 | false | +| test.rs:209:13:211:9 | [boolean(true)] BlockExpr | test.rs:212:13:212:13 | 1 | true | +| test.rs:210:13:210:30 | [boolean(false)] BreakExpr | test.rs:209:13:211:9 | [boolean(false)] BlockExpr | break | +| test.rs:210:13:210:30 | [boolean(true)] BreakExpr | test.rs:209:13:211:9 | [boolean(true)] BlockExpr | break | +| test.rs:210:13:210:31 | ExprStmt | test.rs:210:26:210:26 | a | | +| test.rs:210:26:210:26 | a | test.rs:210:30:210:30 | 0 | | +| test.rs:210:26:210:30 | ... > ... | test.rs:210:13:210:30 | [boolean(false)] BreakExpr | false | +| test.rs:210:26:210:30 | ... > ... | test.rs:210:13:210:30 | [boolean(true)] BreakExpr | true | +| test.rs:210:30:210:30 | 0 | test.rs:210:26:210:30 | ... > ... | | +| test.rs:211:12:213:9 | BlockExpr | test.rs:209:9:215:9 | IfExpr | | +| test.rs:212:13:212:13 | 1 | test.rs:211:12:213:9 | BlockExpr | | +| test.rs:213:16:215:9 | BlockExpr | test.rs:209:9:215:9 | IfExpr | | +| test.rs:214:13:214:13 | 0 | test.rs:213:16:215:9 | BlockExpr | | +| test.rs:221:5:224:5 | enter test_and_operator | test.rs:221:26:221:26 | a | | +| test.rs:221:5:224:5 | exit test_and_operator (normal) | test.rs:221:5:224:5 | exit test_and_operator | | +| test.rs:221:26:221:26 | a | test.rs:221:26:221:32 | Param | match | +| test.rs:221:26:221:32 | Param | test.rs:221:35:221:35 | b | | +| test.rs:221:35:221:35 | b | test.rs:221:35:221:41 | Param | match | +| test.rs:221:35:221:41 | Param | test.rs:221:44:221:44 | c | | +| test.rs:221:44:221:44 | c | test.rs:221:44:221:50 | Param | match | +| test.rs:221:44:221:50 | Param | test.rs:222:9:222:28 | LetStmt | | +| test.rs:221:61:224:5 | BlockExpr | test.rs:221:5:224:5 | exit test_and_operator (normal) | | +| test.rs:222:9:222:28 | LetStmt | test.rs:222:17:222:17 | a | | +| test.rs:222:13:222:13 | d | test.rs:223:9:223:9 | d | match | +| test.rs:222:17:222:17 | a | test.rs:222:17:222:22 | [boolean(false)] ... && ... | false | +| test.rs:222:17:222:17 | a | test.rs:222:22:222:22 | b | true | +| test.rs:222:17:222:22 | [boolean(false)] ... && ... | test.rs:222:17:222:27 | ... && ... | false | +| test.rs:222:17:222:22 | [boolean(true)] ... && ... | test.rs:222:27:222:27 | c | true | +| test.rs:222:17:222:27 | ... && ... | test.rs:222:13:222:13 | d | | +| test.rs:222:22:222:22 | b | test.rs:222:17:222:22 | [boolean(false)] ... && ... | false | +| test.rs:222:22:222:22 | b | test.rs:222:17:222:22 | [boolean(true)] ... && ... | true | +| test.rs:222:27:222:27 | c | test.rs:222:17:222:27 | ... && ... | | +| test.rs:223:9:223:9 | d | test.rs:221:61:224:5 | BlockExpr | | +| test.rs:226:5:229:5 | enter test_or_operator | test.rs:226:25:226:25 | a | | +| test.rs:226:5:229:5 | exit test_or_operator (normal) | test.rs:226:5:229:5 | exit test_or_operator | | +| test.rs:226:25:226:25 | a | test.rs:226:25:226:31 | Param | match | +| test.rs:226:25:226:31 | Param | test.rs:226:34:226:34 | b | | +| test.rs:226:34:226:34 | b | test.rs:226:34:226:40 | Param | match | +| test.rs:226:34:226:40 | Param | test.rs:226:43:226:43 | c | | +| test.rs:226:43:226:43 | c | test.rs:226:43:226:49 | Param | match | +| test.rs:226:43:226:49 | Param | test.rs:227:9:227:28 | LetStmt | | +| test.rs:226:60:229:5 | BlockExpr | test.rs:226:5:229:5 | exit test_or_operator (normal) | | +| test.rs:227:9:227:28 | LetStmt | test.rs:227:17:227:17 | a | | +| test.rs:227:13:227:13 | d | test.rs:228:9:228:9 | d | match | +| test.rs:227:17:227:17 | a | test.rs:227:17:227:22 | [boolean(true)] ... \|\| ... | true | +| test.rs:227:17:227:17 | a | test.rs:227:22:227:22 | b | false | +| test.rs:227:17:227:22 | [boolean(false)] ... \|\| ... | test.rs:227:27:227:27 | c | false | +| test.rs:227:17:227:22 | [boolean(true)] ... \|\| ... | test.rs:227:17:227:27 | ... \|\| ... | true | +| test.rs:227:17:227:27 | ... \|\| ... | test.rs:227:13:227:13 | d | | +| test.rs:227:22:227:22 | b | test.rs:227:17:227:22 | [boolean(false)] ... \|\| ... | false | +| test.rs:227:22:227:22 | b | test.rs:227:17:227:22 | [boolean(true)] ... \|\| ... | true | +| test.rs:227:27:227:27 | c | test.rs:227:17:227:27 | ... \|\| ... | | +| test.rs:228:9:228:9 | d | test.rs:226:60:229:5 | BlockExpr | | +| test.rs:231:5:234:5 | enter test_or_operator_2 | test.rs:231:27:231:27 | a | | +| test.rs:231:5:234:5 | exit test_or_operator_2 (normal) | test.rs:231:5:234:5 | exit test_or_operator_2 | | +| test.rs:231:27:231:27 | a | test.rs:231:27:231:33 | Param | match | +| test.rs:231:27:231:33 | Param | test.rs:231:36:231:36 | b | | +| test.rs:231:36:231:36 | b | test.rs:231:36:231:41 | Param | match | +| test.rs:231:36:231:41 | Param | test.rs:231:44:231:44 | c | | +| test.rs:231:44:231:44 | c | test.rs:231:44:231:50 | Param | match | +| test.rs:231:44:231:50 | Param | test.rs:232:9:232:36 | LetStmt | | +| test.rs:231:61:234:5 | BlockExpr | test.rs:231:5:234:5 | exit test_or_operator_2 (normal) | | +| test.rs:232:9:232:36 | LetStmt | test.rs:232:17:232:17 | a | | +| test.rs:232:13:232:13 | d | test.rs:233:9:233:9 | d | match | +| test.rs:232:17:232:17 | a | test.rs:232:17:232:30 | [boolean(true)] ... \|\| ... | true | +| test.rs:232:17:232:17 | a | test.rs:232:23:232:23 | b | false | +| test.rs:232:17:232:30 | [boolean(false)] ... \|\| ... | test.rs:232:35:232:35 | c | false | +| test.rs:232:17:232:30 | [boolean(true)] ... \|\| ... | test.rs:232:17:232:35 | ... \|\| ... | true | +| test.rs:232:17:232:35 | ... \|\| ... | test.rs:232:13:232:13 | d | | +| test.rs:232:23:232:23 | b | test.rs:232:28:232:29 | 28 | | +| test.rs:232:23:232:29 | ... == ... | test.rs:232:17:232:30 | [boolean(false)] ... \|\| ... | false | +| test.rs:232:23:232:29 | ... == ... | test.rs:232:17:232:30 | [boolean(true)] ... \|\| ... | true | +| test.rs:232:28:232:29 | 28 | test.rs:232:23:232:29 | ... == ... | | +| test.rs:232:35:232:35 | c | test.rs:232:17:232:35 | ... \|\| ... | | +| test.rs:233:9:233:9 | d | test.rs:231:61:234:5 | BlockExpr | | +| test.rs:236:5:239:5 | enter test_not_operator | test.rs:236:26:236:26 | a | | +| test.rs:236:5:239:5 | exit test_not_operator (normal) | test.rs:236:5:239:5 | exit test_not_operator | | +| test.rs:236:26:236:26 | a | test.rs:236:26:236:32 | Param | match | +| test.rs:236:26:236:32 | Param | test.rs:237:9:237:19 | LetStmt | | +| test.rs:236:43:239:5 | BlockExpr | test.rs:236:5:239:5 | exit test_not_operator (normal) | | +| test.rs:237:9:237:19 | LetStmt | test.rs:237:18:237:18 | a | | +| test.rs:237:13:237:13 | d | test.rs:238:9:238:9 | d | match | +| test.rs:237:17:237:18 | ! ... | test.rs:237:13:237:13 | d | | +| test.rs:237:18:237:18 | a | test.rs:237:17:237:18 | ! ... | | +| test.rs:238:9:238:9 | d | test.rs:236:43:239:5 | BlockExpr | | +| test.rs:241:5:247:5 | enter test_if_and_operator | test.rs:241:29:241:29 | a | | +| test.rs:241:5:247:5 | exit test_if_and_operator (normal) | test.rs:241:5:247:5 | exit test_if_and_operator | | +| test.rs:241:29:241:29 | a | test.rs:241:29:241:35 | Param | match | +| test.rs:241:29:241:35 | Param | test.rs:241:38:241:38 | b | | +| test.rs:241:38:241:38 | b | test.rs:241:38:241:43 | Param | match | +| test.rs:241:38:241:43 | Param | test.rs:241:46:241:46 | c | | +| test.rs:241:46:241:46 | c | test.rs:241:46:241:52 | Param | match | +| test.rs:241:46:241:52 | Param | test.rs:242:12:242:12 | a | | +| test.rs:241:63:247:5 | BlockExpr | test.rs:241:5:247:5 | exit test_if_and_operator (normal) | | +| test.rs:242:9:246:9 | IfExpr | test.rs:241:63:247:5 | BlockExpr | | +| test.rs:242:12:242:12 | a | test.rs:242:12:242:17 | [boolean(false)] ... && ... | false | +| test.rs:242:12:242:12 | a | test.rs:242:17:242:17 | b | true | +| test.rs:242:12:242:17 | [boolean(false)] ... && ... | test.rs:242:12:242:22 | [boolean(false)] ... && ... | false | +| test.rs:242:12:242:17 | [boolean(true)] ... && ... | test.rs:242:22:242:22 | c | true | +| test.rs:242:12:242:22 | [boolean(false)] ... && ... | test.rs:245:13:245:17 | false | false | +| test.rs:242:12:242:22 | [boolean(true)] ... && ... | test.rs:243:13:243:16 | true | true | +| test.rs:242:17:242:17 | b | test.rs:242:12:242:17 | [boolean(false)] ... && ... | false | +| test.rs:242:17:242:17 | b | test.rs:242:12:242:17 | [boolean(true)] ... && ... | true | +| test.rs:242:22:242:22 | c | test.rs:242:12:242:22 | [boolean(false)] ... && ... | false | +| test.rs:242:22:242:22 | c | test.rs:242:12:242:22 | [boolean(true)] ... && ... | true | +| test.rs:242:24:244:9 | BlockExpr | test.rs:242:9:246:9 | IfExpr | | +| test.rs:243:13:243:16 | true | test.rs:242:24:244:9 | BlockExpr | | +| test.rs:244:16:246:9 | BlockExpr | test.rs:242:9:246:9 | IfExpr | | +| test.rs:245:13:245:17 | false | test.rs:244:16:246:9 | BlockExpr | | +| test.rs:249:5:255:5 | enter test_if_or_operator | test.rs:249:28:249:28 | a | | +| test.rs:249:5:255:5 | exit test_if_or_operator (normal) | test.rs:249:5:255:5 | exit test_if_or_operator | | +| test.rs:249:28:249:28 | a | test.rs:249:28:249:34 | Param | match | +| test.rs:249:28:249:34 | Param | test.rs:249:37:249:37 | b | | +| test.rs:249:37:249:37 | b | test.rs:249:37:249:42 | Param | match | +| test.rs:249:37:249:42 | Param | test.rs:249:45:249:45 | c | | +| test.rs:249:45:249:45 | c | test.rs:249:45:249:51 | Param | match | +| test.rs:249:45:249:51 | Param | test.rs:250:12:250:12 | a | | +| test.rs:249:62:255:5 | BlockExpr | test.rs:249:5:255:5 | exit test_if_or_operator (normal) | | +| test.rs:250:9:254:9 | IfExpr | test.rs:249:62:255:5 | BlockExpr | | +| test.rs:250:12:250:12 | a | test.rs:250:12:250:17 | [boolean(true)] ... \|\| ... | true | +| test.rs:250:12:250:12 | a | test.rs:250:17:250:17 | b | false | +| test.rs:250:12:250:17 | [boolean(false)] ... \|\| ... | test.rs:250:22:250:22 | c | false | +| test.rs:250:12:250:17 | [boolean(true)] ... \|\| ... | test.rs:250:12:250:22 | [boolean(true)] ... \|\| ... | true | +| test.rs:250:12:250:22 | [boolean(false)] ... \|\| ... | test.rs:253:13:253:17 | false | false | +| test.rs:250:12:250:22 | [boolean(true)] ... \|\| ... | test.rs:251:13:251:16 | true | true | +| test.rs:250:17:250:17 | b | test.rs:250:12:250:17 | [boolean(false)] ... \|\| ... | false | +| test.rs:250:17:250:17 | b | test.rs:250:12:250:17 | [boolean(true)] ... \|\| ... | true | +| test.rs:250:22:250:22 | c | test.rs:250:12:250:22 | [boolean(false)] ... \|\| ... | false | +| test.rs:250:22:250:22 | c | test.rs:250:12:250:22 | [boolean(true)] ... \|\| ... | true | +| test.rs:250:24:252:9 | BlockExpr | test.rs:250:9:254:9 | IfExpr | | +| test.rs:251:13:251:16 | true | test.rs:250:24:252:9 | BlockExpr | | +| test.rs:252:16:254:9 | BlockExpr | test.rs:250:9:254:9 | IfExpr | | +| test.rs:253:13:253:17 | false | test.rs:252:16:254:9 | BlockExpr | | +| test.rs:257:5:263:5 | enter test_if_not_operator | test.rs:257:29:257:29 | a | | +| test.rs:257:5:263:5 | exit test_if_not_operator (normal) | test.rs:257:5:263:5 | exit test_if_not_operator | | +| test.rs:257:29:257:29 | a | test.rs:257:29:257:35 | Param | match | +| test.rs:257:29:257:35 | Param | test.rs:258:13:258:13 | a | | +| test.rs:257:46:263:5 | BlockExpr | test.rs:257:5:263:5 | exit test_if_not_operator (normal) | | +| test.rs:258:9:262:9 | IfExpr | test.rs:257:46:263:5 | BlockExpr | | +| test.rs:258:12:258:13 | [boolean(false)] ! ... | test.rs:261:13:261:17 | false | false | +| test.rs:258:12:258:13 | [boolean(true)] ! ... | test.rs:259:13:259:16 | true | true | +| test.rs:258:13:258:13 | a | test.rs:258:12:258:13 | [boolean(false)] ! ... | true | +| test.rs:258:13:258:13 | a | test.rs:258:12:258:13 | [boolean(true)] ! ... | false | +| test.rs:258:15:260:9 | BlockExpr | test.rs:258:9:262:9 | IfExpr | | +| test.rs:259:13:259:16 | true | test.rs:258:15:260:9 | BlockExpr | | +| test.rs:260:16:262:9 | BlockExpr | test.rs:258:9:262:9 | IfExpr | | +| test.rs:261:13:261:17 | false | test.rs:260:16:262:9 | BlockExpr | | +| test.rs:268:5:270:5 | enter test_question_mark_operator_1 | test.rs:268:38:268:38 | s | | +| test.rs:268:5:270:5 | exit test_question_mark_operator_1 (normal) | test.rs:268:5:270:5 | exit test_question_mark_operator_1 | | +| test.rs:268:38:268:38 | s | test.rs:268:38:268:44 | Param | match | +| test.rs:268:38:268:44 | Param | test.rs:269:9:269:11 | PathExpr | | +| test.rs:268:62:270:5 | BlockExpr | test.rs:268:5:270:5 | exit test_question_mark_operator_1 (normal) | | +| test.rs:269:9:269:11 | PathExpr | test.rs:269:9:269:26 | MethodCallExpr | | +| test.rs:269:9:269:26 | MethodCallExpr | test.rs:269:9:269:27 | TryExpr | | +| test.rs:269:9:269:27 | TryExpr | test.rs:268:5:270:5 | exit test_question_mark_operator_1 (normal) | return | +| test.rs:269:9:269:27 | TryExpr | test.rs:269:31:269:31 | 4 | match | +| test.rs:269:9:269:31 | ... + ... | test.rs:268:62:270:5 | BlockExpr | | +| test.rs:269:31:269:31 | 4 | test.rs:269:9:269:31 | ... + ... | | +| test.rs:272:5:277:5 | enter test_question_mark_operator_2 | test.rs:272:38:272:38 | b | | +| test.rs:272:5:277:5 | exit test_question_mark_operator_2 (normal) | test.rs:272:5:277:5 | exit test_question_mark_operator_2 | | +| test.rs:272:38:272:38 | b | test.rs:272:38:272:52 | Param | match | +| test.rs:272:38:272:52 | Param | test.rs:273:15:273:15 | b | | +| test.rs:272:71:277:5 | BlockExpr | test.rs:272:5:277:5 | exit test_question_mark_operator_2 (normal) | | +| test.rs:273:9:276:9 | MatchExpr | test.rs:272:71:277:5 | BlockExpr | | +| test.rs:273:15:273:15 | b | test.rs:273:15:273:16 | TryExpr | | +| test.rs:273:15:273:16 | TryExpr | test.rs:272:5:277:5 | exit test_question_mark_operator_2 (normal) | return | +| test.rs:273:15:273:16 | TryExpr | test.rs:274:13:274:16 | LiteralPat | match | +| test.rs:274:13:274:16 | LiteralPat | test.rs:274:21:274:24 | PathExpr | match | +| test.rs:274:13:274:16 | LiteralPat | test.rs:275:13:275:17 | LiteralPat | no-match | +| test.rs:274:21:274:24 | PathExpr | test.rs:274:26:274:30 | false | | +| test.rs:274:21:274:31 | CallExpr | test.rs:273:9:276:9 | MatchExpr | | +| test.rs:274:26:274:30 | false | test.rs:274:21:274:31 | CallExpr | | +| test.rs:275:13:275:17 | LiteralPat | test.rs:275:22:275:25 | PathExpr | match | +| test.rs:275:22:275:25 | PathExpr | test.rs:275:27:275:30 | true | | +| test.rs:275:22:275:31 | CallExpr | test.rs:273:9:276:9 | MatchExpr | | +| test.rs:275:27:275:30 | true | test.rs:275:22:275:31 | CallExpr | | +| test.rs:282:5:288:5 | enter test_match | test.rs:282:19:282:29 | maybe_digit | | +| test.rs:282:5:288:5 | exit test_match (normal) | test.rs:282:5:288:5 | exit test_match | | +| test.rs:282:19:282:29 | maybe_digit | test.rs:282:19:282:42 | Param | match | +| test.rs:282:19:282:42 | Param | test.rs:283:15:283:25 | maybe_digit | | +| test.rs:282:52:288:5 | BlockExpr | test.rs:282:5:288:5 | exit test_match (normal) | | +| test.rs:283:9:287:9 | MatchExpr | test.rs:282:52:288:5 | BlockExpr | | +| test.rs:283:15:283:25 | maybe_digit | test.rs:284:13:284:27 | TupleStructPat | | +| test.rs:284:13:284:27 | TupleStructPat | test.rs:284:26:284:26 | x | match | +| test.rs:284:13:284:27 | TupleStructPat | test.rs:285:13:285:27 | TupleStructPat | no-match | +| test.rs:284:26:284:26 | x | test.rs:284:32:284:32 | x | match | +| test.rs:284:32:284:32 | x | test.rs:284:36:284:37 | 10 | | +| test.rs:284:32:284:37 | ... < ... | test.rs:284:42:284:42 | x | true | +| test.rs:284:32:284:37 | ... < ... | test.rs:285:13:285:27 | TupleStructPat | false | +| test.rs:284:36:284:37 | 10 | test.rs:284:32:284:37 | ... < ... | | +| test.rs:284:42:284:42 | x | test.rs:284:46:284:46 | 5 | | +| test.rs:284:42:284:46 | ... + ... | test.rs:283:9:287:9 | MatchExpr | | +| test.rs:284:46:284:46 | 5 | test.rs:284:42:284:46 | ... + ... | | +| test.rs:285:13:285:27 | TupleStructPat | test.rs:285:26:285:26 | x | match | +| test.rs:285:13:285:27 | TupleStructPat | test.rs:286:13:286:24 | PathPat | no-match | +| test.rs:285:26:285:26 | x | test.rs:285:32:285:32 | x | match | +| test.rs:285:32:285:32 | x | test.rs:283:9:287:9 | MatchExpr | | +| test.rs:286:13:286:24 | PathPat | test.rs:286:29:286:29 | 5 | match | +| test.rs:286:29:286:29 | 5 | test.rs:283:9:287:9 | MatchExpr | | +| test.rs:290:5:299:5 | enter test_match_with_return_in_scrutinee | test.rs:290:44:290:54 | maybe_digit | | +| test.rs:290:5:299:5 | exit test_match_with_return_in_scrutinee (normal) | test.rs:290:5:299:5 | exit test_match_with_return_in_scrutinee | | +| test.rs:290:44:290:54 | maybe_digit | test.rs:290:44:290:67 | Param | match | +| test.rs:290:44:290:67 | Param | test.rs:291:19:291:29 | maybe_digit | | +| test.rs:290:77:299:5 | BlockExpr | test.rs:290:5:299:5 | exit test_match_with_return_in_scrutinee (normal) | | +| test.rs:291:9:298:9 | MatchExpr | test.rs:290:77:299:5 | BlockExpr | | +| test.rs:291:16:295:9 | IfExpr | test.rs:296:13:296:27 | TupleStructPat | | +| test.rs:291:19:291:29 | maybe_digit | test.rs:291:34:291:37 | PathExpr | | +| test.rs:291:19:291:40 | ... == ... | test.rs:292:13:292:21 | ExprStmt | true | +| test.rs:291:19:291:40 | ... == ... | test.rs:294:13:294:23 | maybe_digit | false | +| test.rs:291:34:291:37 | PathExpr | test.rs:291:39:291:39 | 3 | | +| test.rs:291:34:291:40 | CallExpr | test.rs:291:19:291:40 | ... == ... | | +| test.rs:291:39:291:39 | 3 | test.rs:291:34:291:40 | CallExpr | | +| test.rs:292:13:292:20 | ReturnExpr | test.rs:290:5:299:5 | exit test_match_with_return_in_scrutinee (normal) | return | +| test.rs:292:13:292:21 | ExprStmt | test.rs:292:20:292:20 | 3 | | +| test.rs:292:20:292:20 | 3 | test.rs:292:13:292:20 | ReturnExpr | | +| test.rs:293:16:295:9 | BlockExpr | test.rs:291:16:295:9 | IfExpr | | +| test.rs:294:13:294:23 | maybe_digit | test.rs:293:16:295:9 | BlockExpr | | +| test.rs:296:13:296:27 | TupleStructPat | test.rs:296:26:296:26 | x | match | +| test.rs:296:13:296:27 | TupleStructPat | test.rs:297:13:297:24 | PathPat | no-match | +| test.rs:296:26:296:26 | x | test.rs:296:32:296:32 | x | match | +| test.rs:296:32:296:32 | x | test.rs:296:36:296:36 | 5 | | +| test.rs:296:32:296:36 | ... + ... | test.rs:291:9:298:9 | MatchExpr | | +| test.rs:296:36:296:36 | 5 | test.rs:296:32:296:36 | ... + ... | | +| test.rs:297:13:297:24 | PathPat | test.rs:297:29:297:29 | 5 | match | +| test.rs:297:29:297:29 | 5 | test.rs:291:9:298:9 | MatchExpr | | +| test.rs:301:5:306:5 | enter test_match_and | test.rs:301:23:301:26 | cond | | +| test.rs:301:5:306:5 | exit test_match_and (normal) | test.rs:301:5:306:5 | exit test_match_and | | +| test.rs:301:23:301:26 | cond | test.rs:301:23:301:32 | Param | match | +| test.rs:301:23:301:32 | Param | test.rs:301:35:301:35 | r | | +| test.rs:301:35:301:35 | r | test.rs:301:35:301:48 | Param | match | +| test.rs:301:35:301:48 | Param | test.rs:302:16:302:16 | r | | +| test.rs:301:59:306:5 | BlockExpr | test.rs:301:5:306:5 | exit test_match_and (normal) | | +| test.rs:302:9:305:18 | ... && ... | test.rs:301:59:306:5 | BlockExpr | | +| test.rs:302:10:305:9 | [boolean(false)] MatchExpr | test.rs:302:9:305:18 | ... && ... | false | +| test.rs:302:10:305:9 | [boolean(true)] MatchExpr | test.rs:305:15:305:18 | cond | true | +| test.rs:302:16:302:16 | r | test.rs:303:13:303:19 | TupleStructPat | | +| test.rs:303:13:303:19 | TupleStructPat | test.rs:303:18:303:18 | a | match | +| test.rs:303:13:303:19 | TupleStructPat | test.rs:304:13:304:13 | WildcardPat | no-match | +| test.rs:303:18:303:18 | a | test.rs:303:24:303:24 | a | match | +| test.rs:303:24:303:24 | a | test.rs:302:10:305:9 | [boolean(false)] MatchExpr | false | +| test.rs:303:24:303:24 | a | test.rs:302:10:305:9 | [boolean(true)] MatchExpr | true | +| test.rs:304:13:304:13 | WildcardPat | test.rs:304:18:304:22 | false | match | +| test.rs:304:18:304:22 | false | test.rs:302:10:305:9 | [boolean(false)] MatchExpr | false | +| test.rs:305:15:305:18 | cond | test.rs:302:9:305:18 | ... && ... | | +| test.rs:311:5:314:5 | enter test_let_match | test.rs:311:23:311:23 | a | | +| test.rs:311:5:314:5 | exit test_let_match (normal) | test.rs:311:5:314:5 | exit test_let_match | | +| test.rs:311:23:311:23 | a | test.rs:311:23:311:36 | Param | match | +| test.rs:311:23:311:36 | Param | test.rs:312:9:312:49 | LetStmt | | +| test.rs:311:39:314:5 | BlockExpr | test.rs:311:5:314:5 | exit test_let_match (normal) | | +| test.rs:312:9:312:49 | LetStmt | test.rs:312:23:312:23 | a | | +| test.rs:312:13:312:19 | TupleStructPat | test.rs:312:18:312:18 | n | match | +| test.rs:312:13:312:19 | TupleStructPat | test.rs:312:32:312:46 | "Expected some" | no-match | +| test.rs:312:18:312:18 | n | test.rs:313:9:313:9 | n | match | +| test.rs:312:23:312:23 | a | test.rs:312:13:312:19 | TupleStructPat | | +| test.rs:312:32:312:46 | "Expected some" | test.rs:312:30:312:48 | BlockExpr | | +| test.rs:313:9:313:9 | n | test.rs:311:39:314:5 | BlockExpr | | +| test.rs:316:5:322:5 | enter test_let_with_return | test.rs:316:29:316:29 | m | | +| test.rs:316:5:322:5 | exit test_let_with_return (normal) | test.rs:316:5:322:5 | exit test_let_with_return | | +| test.rs:316:29:316:29 | m | test.rs:316:29:316:42 | Param | match | +| test.rs:316:29:316:42 | Param | test.rs:317:9:320:10 | LetStmt | | +| test.rs:316:45:322:5 | BlockExpr | test.rs:316:5:322:5 | exit test_let_with_return (normal) | | +| test.rs:317:9:320:10 | LetStmt | test.rs:317:25:317:25 | m | | +| test.rs:317:13:317:15 | ret | test.rs:321:9:321:12 | true | match | +| test.rs:317:19:320:9 | MatchExpr | test.rs:317:13:317:15 | ret | | +| test.rs:317:25:317:25 | m | test.rs:318:13:318:21 | TupleStructPat | | +| test.rs:318:13:318:21 | TupleStructPat | test.rs:318:18:318:20 | ret | match | +| test.rs:318:13:318:21 | TupleStructPat | test.rs:319:13:319:16 | None | no-match | +| test.rs:318:18:318:20 | ret | test.rs:318:26:318:28 | ret | match | +| test.rs:318:26:318:28 | ret | test.rs:317:19:320:9 | MatchExpr | | +| test.rs:319:13:319:16 | None | test.rs:319:28:319:32 | false | match | +| test.rs:319:21:319:32 | ReturnExpr | test.rs:316:5:322:5 | exit test_let_with_return (normal) | return | +| test.rs:319:28:319:32 | false | test.rs:319:21:319:32 | ReturnExpr | | +| test.rs:321:9:321:12 | true | test.rs:316:45:322:5 | BlockExpr | | +| test.rs:327:5:330:5 | enter empty_tuple_pattern | test.rs:327:28:327:31 | unit | | +| test.rs:327:5:330:5 | exit empty_tuple_pattern (normal) | test.rs:327:5:330:5 | exit empty_tuple_pattern | | +| test.rs:327:28:327:31 | unit | test.rs:327:28:327:35 | Param | match | +| test.rs:327:28:327:35 | Param | test.rs:328:9:328:22 | LetStmt | | +| test.rs:328:9:328:22 | LetStmt | test.rs:328:18:328:21 | unit | | +| test.rs:328:13:328:14 | TuplePat | test.rs:329:9:329:15 | ExprStmt | match | +| test.rs:328:18:328:21 | unit | test.rs:328:13:328:14 | TuplePat | | +| test.rs:329:9:329:14 | ReturnExpr | test.rs:327:5:330:5 | exit empty_tuple_pattern (normal) | return | +| test.rs:329:9:329:15 | ExprStmt | test.rs:329:9:329:14 | ReturnExpr | | +| test.rs:334:5:338:5 | enter empty_struct_pattern | test.rs:334:29:334:30 | st | | +| test.rs:334:5:338:5 | exit empty_struct_pattern (normal) | test.rs:334:5:338:5 | exit empty_struct_pattern | | +| test.rs:334:29:334:30 | st | test.rs:334:29:334:40 | Param | match | +| test.rs:334:29:334:40 | Param | test.rs:335:15:335:16 | st | | +| test.rs:334:50:338:5 | BlockExpr | test.rs:334:5:338:5 | exit empty_struct_pattern (normal) | | +| test.rs:335:9:337:9 | MatchExpr | test.rs:334:50:338:5 | BlockExpr | | +| test.rs:335:15:335:16 | st | test.rs:336:13:336:23 | RecordPat | | +| test.rs:336:13:336:23 | RecordPat | test.rs:336:28:336:28 | 1 | match | +| test.rs:336:28:336:28 | 1 | test.rs:335:9:337:9 | MatchExpr | | +| test.rs:340:5:347:5 | enter range_pattern | test.rs:341:15:341:16 | 42 | | +| test.rs:340:5:347:5 | exit range_pattern (normal) | test.rs:340:5:347:5 | exit range_pattern | | +| test.rs:340:31:347:5 | BlockExpr | test.rs:340:5:347:5 | exit range_pattern (normal) | | +| test.rs:341:9:346:9 | MatchExpr | test.rs:340:31:347:5 | BlockExpr | | +| test.rs:341:15:341:16 | 42 | test.rs:342:13:342:15 | RangePat | | +| test.rs:342:13:342:15 | RangePat | test.rs:342:15:342:15 | LiteralPat | match | +| test.rs:342:13:342:15 | RangePat | test.rs:343:13:343:16 | RangePat | no-match | +| test.rs:342:15:342:15 | LiteralPat | test.rs:342:20:342:20 | 1 | match | +| test.rs:342:15:342:15 | LiteralPat | test.rs:343:13:343:16 | RangePat | no-match | +| test.rs:342:20:342:20 | 1 | test.rs:341:9:346:9 | MatchExpr | | +| test.rs:343:13:343:13 | LiteralPat | test.rs:343:16:343:16 | LiteralPat | match | +| test.rs:343:13:343:13 | LiteralPat | test.rs:344:13:344:15 | RangePat | no-match | +| test.rs:343:13:343:16 | RangePat | test.rs:343:13:343:13 | LiteralPat | match | +| test.rs:343:13:343:16 | RangePat | test.rs:344:13:344:15 | RangePat | no-match | +| test.rs:343:16:343:16 | LiteralPat | test.rs:343:21:343:21 | 2 | match | +| test.rs:343:16:343:16 | LiteralPat | test.rs:344:13:344:15 | RangePat | no-match | +| test.rs:343:21:343:21 | 2 | test.rs:341:9:346:9 | MatchExpr | | +| test.rs:344:13:344:13 | LiteralPat | test.rs:344:20:344:20 | 3 | match | +| test.rs:344:13:344:13 | LiteralPat | test.rs:345:13:345:14 | RestPat | no-match | +| test.rs:344:13:344:15 | RangePat | test.rs:344:13:344:13 | LiteralPat | match | +| test.rs:344:13:344:15 | RangePat | test.rs:345:13:345:14 | RestPat | no-match | +| test.rs:344:20:344:20 | 3 | test.rs:341:9:346:9 | MatchExpr | | +| test.rs:345:13:345:14 | RestPat | test.rs:345:19:345:19 | 4 | match | +| test.rs:345:19:345:19 | 4 | test.rs:341:9:346:9 | MatchExpr | | +| test.rs:351:5:356:5 | enter test_infinite_loop | test.rs:352:9:354:9 | ExprStmt | | +| test.rs:352:9:354:9 | ExprStmt | test.rs:353:13:353:13 | 1 | | +| test.rs:352:14:354:9 | BlockExpr | test.rs:353:13:353:13 | 1 | | +| test.rs:353:13:353:13 | 1 | test.rs:352:14:354:9 | BlockExpr | | +| test.rs:359:1:364:1 | enter dead_code | test.rs:360:5:362:5 | ExprStmt | | +| test.rs:359:1:364:1 | exit dead_code (normal) | test.rs:359:1:364:1 | exit dead_code | | +| test.rs:360:5:362:5 | ExprStmt | test.rs:360:9:360:12 | true | | +| test.rs:360:9:360:12 | true | test.rs:361:9:361:17 | ExprStmt | true | +| test.rs:361:9:361:16 | ReturnExpr | test.rs:359:1:364:1 | exit dead_code (normal) | return | +| test.rs:361:9:361:17 | ExprStmt | test.rs:361:16:361:16 | 0 | | +| test.rs:361:16:361:16 | 0 | test.rs:361:9:361:16 | ReturnExpr | | +| test.rs:366:1:379:1 | enter labelled_block1 | test.rs:367:5:378:6 | LetStmt | | +| test.rs:366:1:379:1 | exit labelled_block1 (normal) | test.rs:366:1:379:1 | exit labelled_block1 | | +| test.rs:366:29:379:1 | BlockExpr | test.rs:366:1:379:1 | exit labelled_block1 (normal) | | +| test.rs:367:5:378:6 | LetStmt | test.rs:368:9:368:19 | ExprStmt | | +| test.rs:367:9:367:14 | result | test.rs:366:29:379:1 | BlockExpr | match | +| test.rs:367:18:378:5 | BlockExpr | test.rs:367:9:367:14 | result | | +| test.rs:368:9:368:16 | PathExpr | test.rs:368:9:368:18 | CallExpr | | +| test.rs:368:9:368:18 | CallExpr | test.rs:369:9:371:9 | ExprStmt | | +| test.rs:368:9:368:19 | ExprStmt | test.rs:368:9:368:16 | PathExpr | | +| test.rs:369:9:371:9 | ExprStmt | test.rs:369:12:369:28 | PathExpr | | +| test.rs:369:9:371:9 | IfExpr | test.rs:372:9:372:24 | ExprStmt | | +| test.rs:369:12:369:28 | PathExpr | test.rs:369:12:369:30 | CallExpr | | +| test.rs:369:12:369:30 | CallExpr | test.rs:369:9:371:9 | IfExpr | false | +| test.rs:369:12:369:30 | CallExpr | test.rs:370:13:370:27 | ExprStmt | true | +| test.rs:370:13:370:26 | BreakExpr | test.rs:367:18:378:5 | BlockExpr | break | +| test.rs:370:13:370:27 | ExprStmt | test.rs:370:26:370:26 | 1 | | +| test.rs:370:26:370:26 | 1 | test.rs:370:13:370:26 | BreakExpr | | +| test.rs:372:9:372:21 | PathExpr | test.rs:372:9:372:23 | CallExpr | | +| test.rs:372:9:372:23 | CallExpr | test.rs:373:9:375:9 | ExprStmt | | +| test.rs:372:9:372:24 | ExprStmt | test.rs:372:9:372:21 | PathExpr | | +| test.rs:373:9:375:9 | ExprStmt | test.rs:373:12:373:28 | PathExpr | | +| test.rs:373:9:375:9 | IfExpr | test.rs:376:9:376:24 | ExprStmt | | +| test.rs:373:12:373:28 | PathExpr | test.rs:373:12:373:30 | CallExpr | | +| test.rs:373:12:373:30 | CallExpr | test.rs:373:9:375:9 | IfExpr | false | +| test.rs:373:12:373:30 | CallExpr | test.rs:374:13:374:27 | ExprStmt | true | +| test.rs:374:13:374:26 | BreakExpr | test.rs:367:18:378:5 | BlockExpr | break | +| test.rs:374:13:374:27 | ExprStmt | test.rs:374:26:374:26 | 2 | | +| test.rs:374:26:374:26 | 2 | test.rs:374:13:374:26 | BreakExpr | | +| test.rs:376:9:376:21 | PathExpr | test.rs:376:9:376:23 | CallExpr | | +| test.rs:376:9:376:23 | CallExpr | test.rs:377:9:377:9 | 3 | | +| test.rs:376:9:376:24 | ExprStmt | test.rs:376:9:376:21 | PathExpr | | +| test.rs:377:9:377:9 | 3 | test.rs:367:18:378:5 | BlockExpr | | +| test.rs:381:1:389:1 | enter labelled_block2 | test.rs:382:5:388:6 | LetStmt | | +| test.rs:381:1:389:1 | exit labelled_block2 (normal) | test.rs:381:1:389:1 | exit labelled_block2 | | +| test.rs:381:29:389:1 | BlockExpr | test.rs:381:1:389:1 | exit labelled_block2 (normal) | | +| test.rs:382:5:388:6 | LetStmt | test.rs:383:9:383:34 | LetStmt | | +| test.rs:382:9:382:14 | result | test.rs:381:29:389:1 | BlockExpr | match | +| test.rs:382:18:388:5 | BlockExpr | test.rs:382:9:382:14 | result | | +| test.rs:383:9:383:34 | LetStmt | test.rs:383:30:383:33 | PathExpr | | +| test.rs:383:13:383:13 | x | test.rs:384:9:386:10 | LetStmt | match | +| test.rs:383:30:383:33 | PathExpr | test.rs:383:13:383:13 | x | | +| test.rs:384:9:386:10 | LetStmt | test.rs:384:23:384:23 | x | | +| test.rs:384:13:384:19 | TupleStructPat | test.rs:384:18:384:18 | y | match | +| test.rs:384:13:384:19 | TupleStructPat | test.rs:385:13:385:27 | ExprStmt | no-match | +| test.rs:384:18:384:18 | y | test.rs:387:9:387:9 | x | match | +| test.rs:384:23:384:23 | x | test.rs:384:13:384:19 | TupleStructPat | | +| test.rs:385:13:385:26 | BreakExpr | test.rs:382:18:388:5 | BlockExpr | break | +| test.rs:385:13:385:27 | ExprStmt | test.rs:385:26:385:26 | 1 | | +| test.rs:385:26:385:26 | 1 | test.rs:385:13:385:26 | BreakExpr | | +| test.rs:387:9:387:9 | x | test.rs:382:18:388:5 | BlockExpr | | +| test.rs:391:1:397:1 | enter test_nested_function | test.rs:392:5:392:18 | LetStmt | | +| test.rs:391:1:397:1 | exit test_nested_function (normal) | test.rs:391:1:397:1 | exit test_nested_function | | +| test.rs:391:27:397:1 | BlockExpr | test.rs:391:1:397:1 | exit test_nested_function (normal) | | +| test.rs:392:5:392:18 | LetStmt | test.rs:392:17:392:17 | 0 | | +| test.rs:392:9:392:13 | x | test.rs:393:5:395:5 | nested | match | +| test.rs:392:17:392:17 | 0 | test.rs:392:9:392:13 | x | | +| test.rs:393:5:395:5 | enter nested | test.rs:393:15:393:15 | x | | +| test.rs:393:5:395:5 | exit nested (normal) | test.rs:393:5:395:5 | exit nested | | +| test.rs:393:5:395:5 | nested | test.rs:396:5:396:19 | ExprStmt | | +| test.rs:393:15:393:15 | x | test.rs:393:15:393:25 | Param | match | +| test.rs:393:15:393:25 | Param | test.rs:394:9:394:16 | ExprStmt | | +| test.rs:393:28:395:5 | BlockExpr | test.rs:393:5:395:5 | exit nested (normal) | | +| test.rs:394:9:394:10 | * ... | test.rs:394:15:394:15 | 1 | | +| test.rs:394:9:394:15 | ... += ... | test.rs:393:28:395:5 | BlockExpr | | +| test.rs:394:9:394:16 | ExprStmt | test.rs:394:10:394:10 | x | | +| test.rs:394:10:394:10 | x | test.rs:394:9:394:10 | * ... | | +| test.rs:394:15:394:15 | 1 | test.rs:394:9:394:15 | ... += ... | | +| test.rs:396:5:396:10 | PathExpr | test.rs:396:17:396:17 | x | | +| test.rs:396:5:396:18 | CallExpr | test.rs:391:27:397:1 | BlockExpr | | +| test.rs:396:5:396:19 | ExprStmt | test.rs:396:5:396:10 | PathExpr | | +| test.rs:396:12:396:17 | RefExpr | test.rs:396:5:396:18 | CallExpr | | +| test.rs:396:17:396:17 | x | test.rs:396:12:396:17 | RefExpr | | breakTarget | test.rs:25:17:25:21 | BreakExpr | test.rs:19:9:31:9 | LoopExpr | | test.rs:39:21:39:25 | BreakExpr | test.rs:37:13:44:13 | LoopExpr | @@ -825,12 +834,13 @@ breakTarget | test.rs:82:17:82:21 | BreakExpr | test.rs:79:9:85:9 | WhileExpr | | test.rs:92:17:92:21 | BreakExpr | test.rs:90:9:94:9 | WhileExpr | | test.rs:100:17:100:21 | BreakExpr | test.rs:98:9:103:9 | ForExpr | -| test.rs:179:17:179:28 | BreakExpr | test.rs:177:13:182:9 | LoopExpr | -| test.rs:192:17:192:35 | BreakExpr | test.rs:190:13:195:9 | LoopExpr | -| test.rs:204:13:204:30 | BreakExpr | test.rs:203:13:205:9 | BlockExpr | -| test.rs:364:13:364:26 | BreakExpr | test.rs:361:18:372:5 | BlockExpr | -| test.rs:368:13:368:26 | BreakExpr | test.rs:361:18:372:5 | BlockExpr | -| test.rs:379:13:379:26 | BreakExpr | test.rs:376:18:382:5 | BlockExpr | +| test.rs:108:13:108:26 | BreakExpr | test.rs:107:9:109:9 | LoopExpr | +| test.rs:185:17:185:28 | BreakExpr | test.rs:183:13:188:9 | LoopExpr | +| test.rs:198:17:198:35 | BreakExpr | test.rs:196:13:201:9 | LoopExpr | +| test.rs:210:13:210:30 | BreakExpr | test.rs:209:13:211:9 | BlockExpr | +| test.rs:370:13:370:26 | BreakExpr | test.rs:367:18:378:5 | BlockExpr | +| test.rs:374:13:374:26 | BreakExpr | test.rs:367:18:378:5 | BlockExpr | +| test.rs:385:13:385:26 | BreakExpr | test.rs:382:18:388:5 | BlockExpr | continueTarget | test.rs:28:17:28:24 | ContinueExpr | test.rs:19:9:31:9 | LoopExpr | | test.rs:54:21:54:28 | ContinueExpr | test.rs:52:13:59:13 | LoopExpr | diff --git a/rust/ql/test/library-tests/controlflow/test.rs b/rust/ql/test/library-tests/controlflow/test.rs index 0707f56157ac..60c7ac0a8085 100644 --- a/rust/ql/test/library-tests/controlflow/test.rs +++ b/rust/ql/test/library-tests/controlflow/test.rs @@ -102,6 +102,12 @@ mod loop_expression { 1; } } + + fn break_with_return() -> i64 { + loop { + break return 1; + } + } } fn test_nested_function(n: i64) -> i64 { From 28f111b7c0762361a9e6d4ab40950389f8836a1f Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 18 Oct 2024 13:26:11 +0200 Subject: [PATCH 198/217] Rust: Remove erroneous CFG edge from return to break --- .../codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll | 2 +- rust/ql/test/library-tests/controlflow/Cfg.expected | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index feec95057a4d..cbf636bd9f00 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -159,7 +159,7 @@ class BreakExprTree extends PostOrderTree, BreakExpr { override predicate last(AstNode last, Completion c) { none() } override predicate succ(AstNode pred, AstNode succ, Completion c) { - last(super.getExpr(), pred, c) and succ = this + last(super.getExpr(), pred, c) and completionIsNormal(c) and succ = this or pred = this and c.isValidFor(pred) and diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 621b84d33636..85ea30a20bb2 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -207,12 +207,8 @@ edges | test.rs:102:13:102:14 | ExprStmt | test.rs:102:13:102:13 | 1 | | | test.rs:106:5:110:5 | enter break_with_return | test.rs:108:13:108:27 | ExprStmt | | | test.rs:106:5:110:5 | exit break_with_return (normal) | test.rs:106:5:110:5 | exit break_with_return | | -| test.rs:106:35:110:5 | BlockExpr | test.rs:106:5:110:5 | exit break_with_return (normal) | | -| test.rs:107:9:109:9 | LoopExpr | test.rs:106:35:110:5 | BlockExpr | | -| test.rs:108:13:108:26 | BreakExpr | test.rs:107:9:109:9 | LoopExpr | break | | test.rs:108:13:108:27 | ExprStmt | test.rs:108:26:108:26 | 1 | | | test.rs:108:19:108:26 | ReturnExpr | test.rs:106:5:110:5 | exit break_with_return (normal) | return | -| test.rs:108:19:108:26 | ReturnExpr | test.rs:108:13:108:26 | BreakExpr | return | | test.rs:108:26:108:26 | 1 | test.rs:108:19:108:26 | ReturnExpr | | | test.rs:113:1:116:1 | enter test_nested_function | test.rs:113:25:113:25 | n | | | test.rs:113:1:116:1 | exit test_nested_function (normal) | test.rs:113:1:116:1 | exit test_nested_function | | From b1e85d1ad8de352176fa1813a6a39bbca0035ce9 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 18 Oct 2024 13:30:36 +0200 Subject: [PATCH 199/217] Rust: Refactor `BreakExprTree` to use `StandardPostOrderTree` --- .../internal/ControlFlowGraphImpl.qll | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index cbf636bd9f00..11ac25133bef 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -147,23 +147,15 @@ class BlockExprTree extends StandardPostOrderTree, BlockExpr { override predicate propagatesAbnormal(AstNode child) { child = this.getChildNode(_) } } -class BreakExprTree extends PostOrderTree, BreakExpr { - override predicate propagatesAbnormal(AstNode child) { child = this.getExpr() } - - override predicate first(AstNode node) { - first(this.getExpr(), node) - or - not this.hasExpr() and node = this - } +class BreakExprTree extends StandardPostOrderTree, BreakExpr { + override AstNode getChildNode(int i) { i = 0 and result = this.getExpr() } override predicate last(AstNode last, Completion c) { none() } override predicate succ(AstNode pred, AstNode succ, Completion c) { - last(super.getExpr(), pred, c) and completionIsNormal(c) and succ = this + super.succ(pred, succ, c) or - pred = this and - c.isValidFor(pred) and - succ = this.getTarget() + pred = this and c.isValidFor(pred) and succ = this.getTarget() } } From 30053da70db08643ef3fab1ffa543b6f8ebd0477 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 18 Oct 2024 13:32:24 +0200 Subject: [PATCH 200/217] Python: extra modelling of stdlib as a reaction to the latest QA run --- python/ql/lib/semmle/python/frameworks/Stdlib.model.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.model.yml b/python/ql/lib/semmle/python/frameworks/Stdlib.model.yml index 683b0aa9b3df..2969fbfb1ae7 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.model.yml +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.model.yml @@ -65,6 +65,10 @@ extensions: - ["getopt", "Member[getopt]", "Argument[1,shortopts:,2,longopts:]", "ReturnValue.TupleElement[0].ListElement.TupleElement[0]", "taint"] # See https://docs.python.org/3/library/gettext.html#gettext.gettext - ["gettext", "Member[gettext]", "Argument[0,message:]", "ReturnValue", "taint"] + # See + # - https://docs.python.org/3/library/glob.html#glob.glob + # - https://docs.python.org/3/library/glob.html#glob.iglob + - ["glob", "Member[glob,iglob]", "Argument[0,pathname:]", "ReturnValue", "taint"] # See https://docs.python.org/3/library/gzip.html#gzip.GzipFile - ["gzip.GzipFile!", "Subclass.Call", "Argument[0,filename:]", "ReturnValue", "taint"] # See @@ -88,6 +92,8 @@ extensions: - ["nturl2path", "Member[url2pathname]", "Argument[0,url:]", "ReturnValue", "taint"] # See https://docs.python.org/3/library/optparse.html#optparse.OptionParser.parse_args - ["optparse.OptionParser", "Member[parse_args]", "Argument[0,args:,1,values:]", "ReturnValue.TupleElement[0,1]", "taint"] + # See https://docs.python.org/3/library/os.html#os.walk + - ["os", "Member[walk]", "Argument[0,top:]", "ReturnValue", "taint"] # See https://github.com/python/cpython/blob/3.10/Lib/pathlib.py#L972-L973 - ["pathlib.Path", ".Member[__enter__]", "Argument[self]", "ReturnValue", "taint"] # See https://docs.python.org/3/library/os.html#os.PathLike.__fspath__ From 30e5a1223095896584f9a74c7287da306a42402c Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 18 Oct 2024 15:14:51 +0200 Subject: [PATCH 201/217] Python: udate expectations --- .../CWE-022-UnsafeUnpacking/UnsafeUnpack.expected | 2 +- .../Security/CWE-409/DecompressionBombs.expected | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/python/ql/test/experimental/query-tests/Security/CWE-022-UnsafeUnpacking/UnsafeUnpack.expected b/python/ql/test/experimental/query-tests/Security/CWE-022-UnsafeUnpacking/UnsafeUnpack.expected index 38d8719bfd0a..0f334d45ea83 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-022-UnsafeUnpacking/UnsafeUnpack.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-022-UnsafeUnpacking/UnsafeUnpack.expected @@ -75,7 +75,7 @@ edges | UnsafeUnpack.py:161:19:161:21 | ControlFlowNode for tar | UnsafeUnpack.py:163:33:163:35 | ControlFlowNode for tar | provenance | | | UnsafeUnpack.py:161:25:161:46 | ControlFlowNode for Attribute() | UnsafeUnpack.py:161:19:161:21 | ControlFlowNode for tar | provenance | | | UnsafeUnpack.py:161:38:161:45 | ControlFlowNode for savepath | UnsafeUnpack.py:161:25:161:46 | ControlFlowNode for Attribute() | provenance | Config | -| UnsafeUnpack.py:161:38:161:45 | ControlFlowNode for savepath | UnsafeUnpack.py:161:25:161:46 | ControlFlowNode for Attribute() | provenance | MaD:67 | +| UnsafeUnpack.py:161:38:161:45 | ControlFlowNode for savepath | UnsafeUnpack.py:161:25:161:46 | ControlFlowNode for Attribute() | provenance | MaD:69 | | UnsafeUnpack.py:163:23:163:28 | ControlFlowNode for member | UnsafeUnpack.py:166:37:166:42 | ControlFlowNode for member | provenance | | | UnsafeUnpack.py:163:33:163:35 | ControlFlowNode for tar | UnsafeUnpack.py:163:23:163:28 | ControlFlowNode for member | provenance | | | UnsafeUnpack.py:166:23:166:28 | [post] ControlFlowNode for result | UnsafeUnpack.py:167:67:167:72 | ControlFlowNode for result | provenance | | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected b/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected index 7763cf2ad151..12d1b8282c73 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected @@ -1,23 +1,23 @@ edges | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:11:21:11:29 | ControlFlowNode for file_path | provenance | | | test.py:11:5:11:35 | ControlFlowNode for Attribute() | test.py:11:5:11:52 | ControlFlowNode for Attribute() | provenance | Config | -| test.py:11:21:11:29 | ControlFlowNode for file_path | test.py:11:5:11:35 | ControlFlowNode for Attribute() | provenance | MaD:83 | +| test.py:11:21:11:29 | ControlFlowNode for file_path | test.py:11:5:11:35 | ControlFlowNode for Attribute() | provenance | MaD:85 | | test.py:11:21:11:29 | ControlFlowNode for file_path | test.py:11:5:11:52 | ControlFlowNode for Attribute() | provenance | Config | | test.py:11:21:11:29 | ControlFlowNode for file_path | test.py:12:21:12:29 | ControlFlowNode for file_path | provenance | | | test.py:12:5:12:35 | ControlFlowNode for Attribute() | test.py:12:5:12:48 | ControlFlowNode for Attribute() | provenance | Config | -| test.py:12:21:12:29 | ControlFlowNode for file_path | test.py:12:5:12:35 | ControlFlowNode for Attribute() | provenance | MaD:83 | +| test.py:12:21:12:29 | ControlFlowNode for file_path | test.py:12:5:12:35 | ControlFlowNode for Attribute() | provenance | MaD:85 | | test.py:12:21:12:29 | ControlFlowNode for file_path | test.py:12:5:12:48 | ControlFlowNode for Attribute() | provenance | Config | | test.py:12:21:12:29 | ControlFlowNode for file_path | test.py:14:26:14:34 | ControlFlowNode for file_path | provenance | | | test.py:14:10:14:35 | ControlFlowNode for Attribute() | test.py:15:14:15:29 | ControlFlowNode for Attribute() | provenance | Config | -| test.py:14:26:14:34 | ControlFlowNode for file_path | test.py:14:10:14:35 | ControlFlowNode for Attribute() | provenance | MaD:83 | +| test.py:14:26:14:34 | ControlFlowNode for file_path | test.py:14:10:14:35 | ControlFlowNode for Attribute() | provenance | MaD:85 | | test.py:14:26:14:34 | ControlFlowNode for file_path | test.py:15:14:15:29 | ControlFlowNode for Attribute() | provenance | Config | | test.py:14:26:14:34 | ControlFlowNode for file_path | test.py:18:26:18:34 | ControlFlowNode for file_path | provenance | | | test.py:18:10:18:35 | ControlFlowNode for Attribute() | test.py:19:14:19:39 | ControlFlowNode for Attribute() | provenance | Config | -| test.py:18:26:18:34 | ControlFlowNode for file_path | test.py:18:10:18:35 | ControlFlowNode for Attribute() | provenance | MaD:83 | +| test.py:18:26:18:34 | ControlFlowNode for file_path | test.py:18:10:18:35 | ControlFlowNode for Attribute() | provenance | MaD:85 | | test.py:18:26:18:34 | ControlFlowNode for file_path | test.py:19:14:19:39 | ControlFlowNode for Attribute() | provenance | Config | | test.py:18:26:18:34 | ControlFlowNode for file_path | test.py:22:21:22:29 | ControlFlowNode for file_path | provenance | | | test.py:22:5:22:30 | ControlFlowNode for Attribute() | test.py:22:5:22:60 | ControlFlowNode for Attribute() | provenance | Config | -| test.py:22:21:22:29 | ControlFlowNode for file_path | test.py:22:5:22:30 | ControlFlowNode for Attribute() | provenance | MaD:83 | +| test.py:22:21:22:29 | ControlFlowNode for file_path | test.py:22:5:22:30 | ControlFlowNode for Attribute() | provenance | MaD:85 | | test.py:22:21:22:29 | ControlFlowNode for file_path | test.py:22:5:22:60 | ControlFlowNode for Attribute() | provenance | Config | | test.py:22:21:22:29 | ControlFlowNode for file_path | test.py:24:18:24:26 | ControlFlowNode for file_path | provenance | | | test.py:24:18:24:26 | ControlFlowNode for file_path | test.py:24:5:24:52 | ControlFlowNode for Attribute() | provenance | Config | From 335c59792c99206e9fa8da86e46fac6bc96e2a1d Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Fri, 18 Oct 2024 09:26:56 -0400 Subject: [PATCH 202/217] Java: remove unnecessary anchor and update page name --- java/ql/src/Security/CWE/CWE-352/SpringCSRFProtection.qhelp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-352/SpringCSRFProtection.qhelp b/java/ql/src/Security/CWE/CWE-352/SpringCSRFProtection.qhelp index b9bda57ad09e..a7e0b21d7e4b 100644 --- a/java/ql/src/Security/CWE/CWE-352/SpringCSRFProtection.qhelp +++ b/java/ql/src/Security/CWE/CWE-352/SpringCSRFProtection.qhelp @@ -30,8 +30,8 @@ OWASP:
  • Spring Security Reference: - - Cross Site Request Forgery (CSRF) for Servlet Environments + + Cross Site Request Forgery (CSRF) .
  • From 4ddc7a459211413b23037f9d9b304e9c3b0b6000 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 18 Oct 2024 15:49:52 +0200 Subject: [PATCH 203/217] Rust: Update unused value expected results --- rust/ql/test/query-tests/unusedentities/UnusedValue.expected | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rust/ql/test/query-tests/unusedentities/UnusedValue.expected b/rust/ql/test/query-tests/unusedentities/UnusedValue.expected index 4b2118953ecf..dfebb20b8acd 100644 --- a/rust/ql/test/query-tests/unusedentities/UnusedValue.expected +++ b/rust/ql/test/query-tests/unusedentities/UnusedValue.expected @@ -28,3 +28,8 @@ | more.rs:80:9:80:14 | a_ptr4 | Variable is assigned a value that is never used. | | more.rs:95:9:95:13 | d_ptr | Variable is assigned a value that is never used. | | more.rs:101:9:101:17 | f_ptr | Variable is assigned a value that is never used. | +| unreachable.rs:166:6:166:6 | x | Variable is assigned a value that is never used. | +| unreachable.rs:190:14:190:14 | a | Variable is assigned a value that is never used. | +| unreachable.rs:199:9:199:9 | a | Variable is assigned a value that is never used. | +| unreachable.rs:210:11:210:11 | a | Variable is assigned a value that is never used. | +| unreachable.rs:217:6:217:6 | a | Variable is assigned a value that is never used. | From 53744407ad389a0d5aa295b7843a3015b069fc8e Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Fri, 18 Oct 2024 15:57:35 +0200 Subject: [PATCH 204/217] Rust: add localDefinitions.ql --- .../localDefinitions.ql | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 rust/ql/lib/ide-contextual-queries/localDefinitions.ql diff --git a/rust/ql/lib/ide-contextual-queries/localDefinitions.ql b/rust/ql/lib/ide-contextual-queries/localDefinitions.ql new file mode 100644 index 000000000000..5c2cb01f178c --- /dev/null +++ b/rust/ql/lib/ide-contextual-queries/localDefinitions.ql @@ -0,0 +1,23 @@ +/** + * @name Jump-to-definition links + * @description Generates use-definition pairs that provide the data + * for jump-to-definition in the code viewer. + * @kind definitions + * @id rus/ide-jump-to-definition + * @tags ide-contextual-queries/local-definitions + */ + +import codeql.IDEContextual +import codeql.rust.elements.Variable +import codeql.rust.elements.Locatable + +external string selectedSourceFile(); + +predicate localVariable(Locatable e, Variable def) { e = def.getAnAccess() } + +from Locatable e, Variable def, string kind +where + e.getLocation().getFile() = getFileBySourceArchiveName(selectedSourceFile()) and + localVariable(e, def) and + kind = "local variable" +select e, def, kind From c9372b91f82d7e8d2ce584807d4b1d594525bd2e Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Fri, 18 Oct 2024 15:58:31 +0200 Subject: [PATCH 205/217] Rust: move ide-contextual-queries to the library pack --- rust/ql/{src/queries => lib}/ide-contextual-queries/printAst.ql | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename rust/ql/{src/queries => lib}/ide-contextual-queries/printAst.ql (100%) diff --git a/rust/ql/src/queries/ide-contextual-queries/printAst.ql b/rust/ql/lib/ide-contextual-queries/printAst.ql similarity index 100% rename from rust/ql/src/queries/ide-contextual-queries/printAst.ql rename to rust/ql/lib/ide-contextual-queries/printAst.ql From 4a5a48a5b630d4548b356f68e8b921e6fdd408f2 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Fri, 18 Oct 2024 16:02:57 +0200 Subject: [PATCH 206/217] Rust: move PrintCfg to ide-contextual-queries --- .../controlflow/internal => ide-contextual-queries}/PrintCfg.ql | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename rust/ql/lib/{codeql/rust/controlflow/internal => ide-contextual-queries}/PrintCfg.ql (100%) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/PrintCfg.ql b/rust/ql/lib/ide-contextual-queries/PrintCfg.ql similarity index 100% rename from rust/ql/lib/codeql/rust/controlflow/internal/PrintCfg.ql rename to rust/ql/lib/ide-contextual-queries/PrintCfg.ql From eb515f884bd478a26c00ba96be8f5de81aa21eb8 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Fri, 18 Oct 2024 17:06:20 +0200 Subject: [PATCH 207/217] Revert "Release preparation for version 2.19.2" --- cpp/ql/lib/CHANGELOG.md | 7 ------- .../change-notes/2024-10-07-range-analysis-of-getc.md | 4 ++++ cpp/ql/lib/change-notes/2024-10-09-fopen-taint.md | 4 ++++ cpp/ql/lib/change-notes/released/2.0.2.md | 6 ------ cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 9 --------- .../2024-09-26-wcharcharconversion-false-positives.md | 5 +++++ .../src/change-notes/2024-10-02-uninitialized-local.md | 4 ++++ .../2024-10-07-unclear-array-index-validation.md | 4 ++++ cpp/ql/src/change-notes/released/1.2.5.md | 8 -------- cpp/ql/src/codeql-pack.release.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md | 4 ---- .../Solorigate/lib/change-notes/released/1.7.27.md | 3 --- .../campaigns/Solorigate/lib/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/src/CHANGELOG.md | 4 ---- .../Solorigate/src/change-notes/released/1.7.27.md | 3 --- .../campaigns/Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 4 ---- csharp/ql/lib/change-notes/released/3.0.1.md | 3 --- csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 4 ---- csharp/ql/src/change-notes/released/1.0.10.md | 3 --- csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 ---- .../change-notes/released/1.0.10.md | 3 --- go/ql/consistency-queries/codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 8 -------- .../2.1.1.md => 2024-08-29-add-stdin-threat-models.md} | 9 +++------ .../change-notes/2024-09-03-tags-and-interface-ids.md | 5 +++++ go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 4 ---- go/ql/src/change-notes/released/1.1.1.md | 3 --- go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/automodel/src/CHANGELOG.md | 4 ---- java/ql/automodel/src/change-notes/released/1.0.10.md | 3 --- java/ql/automodel/src/codeql-pack.release.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 4 ---- java/ql/lib/change-notes/released/4.1.1.md | 3 --- java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 4 ---- java/ql/src/change-notes/released/1.1.7.md | 3 --- java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 4 ---- javascript/ql/lib/change-notes/released/2.0.2.md | 3 --- javascript/ql/lib/codeql-pack.release.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/CHANGELOG.md | 4 ---- javascript/ql/src/change-notes/released/1.2.2.md | 3 --- javascript/ql/src/codeql-pack.release.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/CHANGELOG.md | 4 ---- misc/suite-helpers/change-notes/released/1.0.10.md | 3 --- misc/suite-helpers/codeql-pack.release.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/CHANGELOG.md | 10 ---------- .../ql/lib/change-notes/2024-09-24-std-lib-models.md | 4 ++++ .../lib/change-notes/2024-10-01-comprehension-flow.md | 5 +++++ .../2024-10-03-typetracking-through-comprehensions.md | 4 ++++ .../ql/lib/change-notes/2024-10-09-finditer-match.md | 4 ++++ python/ql/lib/change-notes/released/2.1.1.md | 9 --------- python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 6 +----- python/ql/src/change-notes/released/1.3.1.md | 3 --- python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 6 ------ .../2.0.2.md => 2024-10-03-extraction-warnings.md} | 7 +++---- ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 6 ------ .../1.1.5.md => 2024-10-03-extraction-warnings.md} | 7 +++---- ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 ---- shared/controlflow/change-notes/released/1.0.10.md | 3 --- shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 4 ---- shared/dataflow/change-notes/released/1.1.4.md | 3 --- shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ---- shared/mad/change-notes/released/1.0.10.md | 3 --- shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ---- shared/rangeanalysis/change-notes/released/1.0.10.md | 3 --- shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ---- shared/regex/change-notes/released/1.0.10.md | 3 --- shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ---- shared/ssa/change-notes/released/1.0.10.md | 3 --- shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 ---- shared/threat-models/change-notes/released/1.0.10.md | 3 --- shared/threat-models/codeql-pack.release.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/CHANGELOG.md | 4 ---- shared/tutorial/change-notes/released/1.0.10.md | 3 --- shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/CHANGELOG.md | 4 ---- shared/typeflow/change-notes/released/1.0.10.md | 3 --- shared/typeflow/codeql-pack.release.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ---- shared/typetracking/change-notes/released/1.0.10.md | 3 --- shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ---- shared/typos/change-notes/released/1.0.10.md | 3 --- shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ---- shared/util/change-notes/released/1.0.10.md | 3 --- shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/CHANGELOG.md | 4 ---- shared/xml/change-notes/released/1.0.10.md | 3 --- shared/xml/codeql-pack.release.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ---- shared/yaml/change-notes/released/1.0.10.md | 3 --- shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 4 ---- swift/ql/lib/change-notes/released/2.0.2.md | 3 --- swift/ql/lib/codeql-pack.release.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/CHANGELOG.md | 4 ---- swift/ql/src/change-notes/released/1.0.10.md | 3 --- swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 150 files changed, 123 insertions(+), 357 deletions(-) create mode 100644 cpp/ql/lib/change-notes/2024-10-07-range-analysis-of-getc.md create mode 100644 cpp/ql/lib/change-notes/2024-10-09-fopen-taint.md delete mode 100644 cpp/ql/lib/change-notes/released/2.0.2.md create mode 100644 cpp/ql/src/change-notes/2024-09-26-wcharcharconversion-false-positives.md create mode 100644 cpp/ql/src/change-notes/2024-10-02-uninitialized-local.md create mode 100644 cpp/ql/src/change-notes/2024-10-07-unclear-array-index-validation.md delete mode 100644 cpp/ql/src/change-notes/released/1.2.5.md delete mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.27.md delete mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.27.md delete mode 100644 csharp/ql/lib/change-notes/released/3.0.1.md delete mode 100644 csharp/ql/src/change-notes/released/1.0.10.md delete mode 100644 go/ql/consistency-queries/change-notes/released/1.0.10.md rename go/ql/lib/change-notes/{released/2.1.1.md => 2024-08-29-add-stdin-threat-models.md} (64%) create mode 100644 go/ql/lib/change-notes/2024-09-03-tags-and-interface-ids.md delete mode 100644 go/ql/src/change-notes/released/1.1.1.md delete mode 100644 java/ql/automodel/src/change-notes/released/1.0.10.md delete mode 100644 java/ql/lib/change-notes/released/4.1.1.md delete mode 100644 java/ql/src/change-notes/released/1.1.7.md delete mode 100644 javascript/ql/lib/change-notes/released/2.0.2.md delete mode 100644 javascript/ql/src/change-notes/released/1.2.2.md delete mode 100644 misc/suite-helpers/change-notes/released/1.0.10.md create mode 100644 python/ql/lib/change-notes/2024-09-24-std-lib-models.md create mode 100644 python/ql/lib/change-notes/2024-10-01-comprehension-flow.md create mode 100644 python/ql/lib/change-notes/2024-10-03-typetracking-through-comprehensions.md create mode 100644 python/ql/lib/change-notes/2024-10-09-finditer-match.md delete mode 100644 python/ql/lib/change-notes/released/2.1.1.md delete mode 100644 python/ql/src/change-notes/released/1.3.1.md rename ruby/ql/lib/change-notes/{released/2.0.2.md => 2024-10-03-extraction-warnings.md} (77%) rename ruby/ql/src/change-notes/{released/1.1.5.md => 2024-10-03-extraction-warnings.md} (82%) delete mode 100644 shared/controlflow/change-notes/released/1.0.10.md delete mode 100644 shared/dataflow/change-notes/released/1.1.4.md delete mode 100644 shared/mad/change-notes/released/1.0.10.md delete mode 100644 shared/rangeanalysis/change-notes/released/1.0.10.md delete mode 100644 shared/regex/change-notes/released/1.0.10.md delete mode 100644 shared/ssa/change-notes/released/1.0.10.md delete mode 100644 shared/threat-models/change-notes/released/1.0.10.md delete mode 100644 shared/tutorial/change-notes/released/1.0.10.md delete mode 100644 shared/typeflow/change-notes/released/1.0.10.md delete mode 100644 shared/typetracking/change-notes/released/1.0.10.md delete mode 100644 shared/typos/change-notes/released/1.0.10.md delete mode 100644 shared/util/change-notes/released/1.0.10.md delete mode 100644 shared/xml/change-notes/released/1.0.10.md delete mode 100644 shared/yaml/change-notes/released/1.0.10.md delete mode 100644 swift/ql/lib/change-notes/released/2.0.2.md delete mode 100644 swift/ql/src/change-notes/released/1.0.10.md diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index 73c42c5dfa07..5d39629f62b0 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,10 +1,3 @@ -## 2.0.2 - -### Minor Analysis Improvements - -* Added taint flow model for `fopen` and related functions. -* The `SimpleRangeAnalysis` library (`semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis`) now generates more precise ranges for calls to `fgetc` and `getc`. - ## 2.0.1 No user-facing changes. diff --git a/cpp/ql/lib/change-notes/2024-10-07-range-analysis-of-getc.md b/cpp/ql/lib/change-notes/2024-10-07-range-analysis-of-getc.md new file mode 100644 index 000000000000..f796fba2ece2 --- /dev/null +++ b/cpp/ql/lib/change-notes/2024-10-07-range-analysis-of-getc.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The `SimpleRangeAnalysis` library (`semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis`) now generates more precise ranges for calls to `fgetc` and `getc`. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2024-10-09-fopen-taint.md b/cpp/ql/lib/change-notes/2024-10-09-fopen-taint.md new file mode 100644 index 000000000000..d2516859a910 --- /dev/null +++ b/cpp/ql/lib/change-notes/2024-10-09-fopen-taint.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added taint flow model for `fopen` and related functions. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/released/2.0.2.md b/cpp/ql/lib/change-notes/released/2.0.2.md deleted file mode 100644 index db3a11e55a8e..000000000000 --- a/cpp/ql/lib/change-notes/released/2.0.2.md +++ /dev/null @@ -1,6 +0,0 @@ -## 2.0.2 - -### Minor Analysis Improvements - -* Added taint flow model for `fopen` and related functions. -* The `SimpleRangeAnalysis` library (`semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis`) now generates more precise ranges for calls to `fgetc` and `getc`. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index 81c7f1dbc13c..fe974a4dbf37 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.2 +lastReleaseVersion: 2.0.1 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 91af68ed6411..ba5db8c6e6f9 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 2.0.2 +version: 2.0.2-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index e73850bbfe96..8eaccb0404dc 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,12 +1,3 @@ -## 1.2.5 - -### Minor Analysis Improvements - -* The `cpp/unclear-array-index-validation` ("Unclear validation of array index") query has been improved to reduce false positives and increase true positives. -* Fixed false positives in the `cpp/uninitialized-local` ("Potentially uninitialized local variable") query if there are extraction errors in the function. -* The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to detect byte arrays. -* The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to recognize dynamic checks prior to possible dangerous widening. - ## 1.2.4 ### Minor Analysis Improvements diff --git a/cpp/ql/src/change-notes/2024-09-26-wcharcharconversion-false-positives.md b/cpp/ql/src/change-notes/2024-09-26-wcharcharconversion-false-positives.md new file mode 100644 index 000000000000..b0fa7a953c59 --- /dev/null +++ b/cpp/ql/src/change-notes/2024-09-26-wcharcharconversion-false-positives.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to detect byte arrays. +* The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to recognize dynamic checks prior to possible dangerous widening. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-10-02-uninitialized-local.md b/cpp/ql/src/change-notes/2024-10-02-uninitialized-local.md new file mode 100644 index 000000000000..e34a942f38a6 --- /dev/null +++ b/cpp/ql/src/change-notes/2024-10-02-uninitialized-local.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Fixed false positives in the `cpp/uninitialized-local` ("Potentially uninitialized local variable") query if there are extraction errors in the function. diff --git a/cpp/ql/src/change-notes/2024-10-07-unclear-array-index-validation.md b/cpp/ql/src/change-notes/2024-10-07-unclear-array-index-validation.md new file mode 100644 index 000000000000..b237afdd6be8 --- /dev/null +++ b/cpp/ql/src/change-notes/2024-10-07-unclear-array-index-validation.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The `cpp/unclear-array-index-validation` ("Unclear validation of array index") query has been improved to reduce false positives increase true positives. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/released/1.2.5.md b/cpp/ql/src/change-notes/released/1.2.5.md deleted file mode 100644 index 04aead25cb99..000000000000 --- a/cpp/ql/src/change-notes/released/1.2.5.md +++ /dev/null @@ -1,8 +0,0 @@ -## 1.2.5 - -### Minor Analysis Improvements - -* The `cpp/unclear-array-index-validation` ("Unclear validation of array index") query has been improved to reduce false positives and increase true positives. -* Fixed false positives in the `cpp/uninitialized-local` ("Potentially uninitialized local variable") query if there are extraction errors in the function. -* The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to detect byte arrays. -* The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to recognize dynamic checks prior to possible dangerous widening. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 40355f0807f9..172090f46b6d 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.5 +lastReleaseVersion: 1.2.4 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index eee6e064b22f..d01ac2f048c2 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.2.5 +version: 1.2.5-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index eb646b9ce77f..989d5e74408f 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.7.27 - -No user-facing changes. - ## 1.7.26 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.27.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.27.md deleted file mode 100644 index 7d323c891002..000000000000 --- a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.27.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.7.27 - -No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index 5c0490dbda8e..ca4c34e70d1b 100644 --- a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.27 +lastReleaseVersion: 1.7.26 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index e02f2f0733ce..3cab08a0f3ec 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.27 +version: 1.7.27-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index eb646b9ce77f..989d5e74408f 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.7.27 - -No user-facing changes. - ## 1.7.26 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.27.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.27.md deleted file mode 100644 index 7d323c891002..000000000000 --- a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.27.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.7.27 - -No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index 5c0490dbda8e..ca4c34e70d1b 100644 --- a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.27 +lastReleaseVersion: 1.7.26 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index d94e11459d4c..c46baf0b2518 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.27 +version: 1.7.27-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 302087e4f147..7e8378798830 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,7 +1,3 @@ -## 3.0.1 - -No user-facing changes. - ## 3.0.0 ### Breaking Changes diff --git a/csharp/ql/lib/change-notes/released/3.0.1.md b/csharp/ql/lib/change-notes/released/3.0.1.md deleted file mode 100644 index ac5998ace618..000000000000 --- a/csharp/ql/lib/change-notes/released/3.0.1.md +++ /dev/null @@ -1,3 +0,0 @@ -## 3.0.1 - -No user-facing changes. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index e3b15d965db6..33d3a2cd1139 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 3.0.1 +lastReleaseVersion: 3.0.0 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 1515544bc960..55a99929ac87 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 3.0.1 +version: 3.0.1-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 59a98aca72a2..4c162b64d8f7 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.10 - -No user-facing changes. - ## 1.0.9 ### Minor Analysis Improvements diff --git a/csharp/ql/src/change-notes/released/1.0.10.md b/csharp/ql/src/change-notes/released/1.0.10.md deleted file mode 100644 index b601d8784532..000000000000 --- a/csharp/ql/src/change-notes/released/1.0.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.10 - -No user-facing changes. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 3865dbcf4b2a..fb813c5ee050 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.10 +lastReleaseVersion: 1.0.9 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 90e7ec11d865..6209cc5f88d5 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.0.10 +version: 1.0.10-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index b62e06e3dff0..9589b67148fa 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.10 - -No user-facing changes. - ## 1.0.9 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.10.md b/go/ql/consistency-queries/change-notes/released/1.0.10.md deleted file mode 100644 index b601d8784532..000000000000 --- a/go/ql/consistency-queries/change-notes/released/1.0.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.10 - -No user-facing changes. diff --git a/go/ql/consistency-queries/codeql-pack.release.yml b/go/ql/consistency-queries/codeql-pack.release.yml index 3865dbcf4b2a..fb813c5ee050 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.10 +lastReleaseVersion: 1.0.9 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 726aa918f891..5a7ca8082a53 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.10 +version: 1.0.10-dev groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index d3c6fcd4a611..a9a8190e6acc 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,11 +1,3 @@ -## 2.1.1 - -### Minor Analysis Improvements - -* Added member predicates `StructTag.hasOwnFieldWithTag` and `Field.getTag`, which enable CodeQL queries to examine struct field tags. -* Added member predicate `InterfaceType.hasPrivateMethodWithQualifiedName`, which enables CodeQL queries to distinguish interfaces with matching non-exported method names that are declared in different packages, and are therefore incompatible. -* Local source models with the `stdin` source kind have been added for the variable `os.Stdin` and the functions `fmt.Scan`, `fmt.Scanf` and `fmt.Scanln`. You can optionally include threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see [Analyzing your code with CodeQL queries](https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>) and [Customizing your advanced setup for code scanning](https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models). - ## 2.1.0 ### Deprecated APIs diff --git a/go/ql/lib/change-notes/released/2.1.1.md b/go/ql/lib/change-notes/2024-08-29-add-stdin-threat-models.md similarity index 64% rename from go/ql/lib/change-notes/released/2.1.1.md rename to go/ql/lib/change-notes/2024-08-29-add-stdin-threat-models.md index 7319120fd3cb..d98ac68f1edc 100644 --- a/go/ql/lib/change-notes/released/2.1.1.md +++ b/go/ql/lib/change-notes/2024-08-29-add-stdin-threat-models.md @@ -1,7 +1,4 @@ -## 2.1.1 - -### Minor Analysis Improvements - -* Added member predicates `StructTag.hasOwnFieldWithTag` and `Field.getTag`, which enable CodeQL queries to examine struct field tags. -* Added member predicate `InterfaceType.hasPrivateMethodWithQualifiedName`, which enables CodeQL queries to distinguish interfaces with matching non-exported method names that are declared in different packages, and are therefore incompatible. +--- +category: minorAnalysis +--- * Local source models with the `stdin` source kind have been added for the variable `os.Stdin` and the functions `fmt.Scan`, `fmt.Scanf` and `fmt.Scanln`. You can optionally include threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see [Analyzing your code with CodeQL queries](https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>) and [Customizing your advanced setup for code scanning](https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models). diff --git a/go/ql/lib/change-notes/2024-09-03-tags-and-interface-ids.md b/go/ql/lib/change-notes/2024-09-03-tags-and-interface-ids.md new file mode 100644 index 000000000000..749ae4cde998 --- /dev/null +++ b/go/ql/lib/change-notes/2024-09-03-tags-and-interface-ids.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* Added member predicates `StructTag.hasOwnFieldWithTag` and `Field.getTag`, which enable CodeQL queries to examine struct field tags. +* Added member predicate `InterfaceType.hasPrivateMethodWithQualifiedName`, which enables CodeQL queries to distinguish interfaces with matching non-exported method names that are declared in different packages, and are therefore incompatible. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 576c2ea18d68..487a1a58b2b8 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.1.1 +lastReleaseVersion: 2.1.0 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index ba6a48a29d49..9cb5e3620117 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 2.1.1 +version: 2.1.1-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index bdb40a2d2bb4..69a5ed3e9f83 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.1.1 - -No user-facing changes. - ## 1.1.0 ### Query Metadata Changes diff --git a/go/ql/src/change-notes/released/1.1.1.md b/go/ql/src/change-notes/released/1.1.1.md deleted file mode 100644 index 7fb56d366105..000000000000 --- a/go/ql/src/change-notes/released/1.1.1.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.1.1 - -No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 1a19084be3f7..2ac15439f561 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.1 +lastReleaseVersion: 1.1.0 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 0dbc1fe67fae..0b3f5076bb6d 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.1.1 +version: 1.1.1-dev groups: - go - queries diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index 537e84b2c0e5..4d632a2ae2d2 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.10 - -No user-facing changes. - ## 1.0.9 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/1.0.10.md b/java/ql/automodel/src/change-notes/released/1.0.10.md deleted file mode 100644 index b601d8784532..000000000000 --- a/java/ql/automodel/src/change-notes/released/1.0.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.10 - -No user-facing changes. diff --git a/java/ql/automodel/src/codeql-pack.release.yml b/java/ql/automodel/src/codeql-pack.release.yml index 3865dbcf4b2a..fb813c5ee050 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.10 +lastReleaseVersion: 1.0.9 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 7621f1900d53..fe961cb4392c 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 1.0.10 +version: 1.0.10-dev groups: - java - automodel diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 6be0cdc10e5a..5441126d72c9 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,7 +1,3 @@ -## 4.1.1 - -No user-facing changes. - ## 4.1.0 ### Deprecated APIs diff --git a/java/ql/lib/change-notes/released/4.1.1.md b/java/ql/lib/change-notes/released/4.1.1.md deleted file mode 100644 index 23583cbad734..000000000000 --- a/java/ql/lib/change-notes/released/4.1.1.md +++ /dev/null @@ -1,3 +0,0 @@ -## 4.1.1 - -No user-facing changes. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 9c871cefc42c..d5b1bf88d10e 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.1.1 +lastReleaseVersion: 4.1.0 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 23871cfb7d82..0d4f67146c1b 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 4.1.1 +version: 4.1.1-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index a034dc0abf90..20e7a248aebb 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.1.7 - -No user-facing changes. - ## 1.1.6 ### Minor Analysis Improvements diff --git a/java/ql/src/change-notes/released/1.1.7.md b/java/ql/src/change-notes/released/1.1.7.md deleted file mode 100644 index 81505c0507a2..000000000000 --- a/java/ql/src/change-notes/released/1.1.7.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.1.7 - -No user-facing changes. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 759105565166..9e712a00a21d 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.7 +lastReleaseVersion: 1.1.6 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 82b14986199e..c8e95f52ca4a 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.1.7 +version: 1.1.7-dev groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 6068cf26319d..bb77b4f1f496 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,7 +1,3 @@ -## 2.0.2 - -No user-facing changes. - ## 2.0.1 No user-facing changes. diff --git a/javascript/ql/lib/change-notes/released/2.0.2.md b/javascript/ql/lib/change-notes/released/2.0.2.md deleted file mode 100644 index 862ef0e9df7c..000000000000 --- a/javascript/ql/lib/change-notes/released/2.0.2.md +++ /dev/null @@ -1,3 +0,0 @@ -## 2.0.2 - -No user-facing changes. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 81c7f1dbc13c..fe974a4dbf37 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.2 +lastReleaseVersion: 2.0.1 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 8cf13a5240ce..bea3bbacd5fa 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.0.2 +version: 2.0.2-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index df7becd46de5..adf7daa3eb43 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.2.2 - -No user-facing changes. - ## 1.2.1 No user-facing changes. diff --git a/javascript/ql/src/change-notes/released/1.2.2.md b/javascript/ql/src/change-notes/released/1.2.2.md deleted file mode 100644 index 7b520f6c258f..000000000000 --- a/javascript/ql/src/change-notes/released/1.2.2.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.2.2 - -No user-facing changes. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 0a70a9a01a7e..73dd403938c9 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.2 +lastReleaseVersion: 1.2.1 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 5aee59e9b015..407aa03f7802 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 1.2.2 +version: 1.2.2-dev groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index e9c580c60cef..729794553521 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.10 - -No user-facing changes. - ## 1.0.9 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/1.0.10.md b/misc/suite-helpers/change-notes/released/1.0.10.md deleted file mode 100644 index b601d8784532..000000000000 --- a/misc/suite-helpers/change-notes/released/1.0.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.10 - -No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 3865dbcf4b2a..fb813c5ee050 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.10 +lastReleaseVersion: 1.0.9 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 6b8eb63063ba..76c86b26be6b 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.10 +version: 1.0.10-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index c1f3765162e0..4cadb40bc2f5 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,13 +1,3 @@ -## 2.1.1 - -### Minor Analysis Improvements - -* Modelled that `re.finditer` returns an iterable of `re.Match` objects. This is now understood by the API graph in many cases. -* Type tracking, and hence the API graph, is now able to correctly trace through comprehensions. -* More precise modelling of the dataflow through comprehensions. In particular, captured variables are now handled correctly. -* Dataflow out of yield is added, allowing proper tracing through generators. -* Added several models of standard library functions and classes, in anticipation of no longer extracting the standard library in a future release. - ## 2.1.0 ### New Features diff --git a/python/ql/lib/change-notes/2024-09-24-std-lib-models.md b/python/ql/lib/change-notes/2024-09-24-std-lib-models.md new file mode 100644 index 000000000000..3166e0c8ff0f --- /dev/null +++ b/python/ql/lib/change-notes/2024-09-24-std-lib-models.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added several models of standard library functions and classes, in anticipation of no longer extracting the standard library in a future release. \ No newline at end of file diff --git a/python/ql/lib/change-notes/2024-10-01-comprehension-flow.md b/python/ql/lib/change-notes/2024-10-01-comprehension-flow.md new file mode 100644 index 000000000000..bc3165f05f33 --- /dev/null +++ b/python/ql/lib/change-notes/2024-10-01-comprehension-flow.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* More precise modelling of the dataflow through comprehensions. In particular, captured variables are now handled correctly. +* Dataflow out of yield is added, allowing proper tracing through generators. \ No newline at end of file diff --git a/python/ql/lib/change-notes/2024-10-03-typetracking-through-comprehensions.md b/python/ql/lib/change-notes/2024-10-03-typetracking-through-comprehensions.md new file mode 100644 index 000000000000..72d853460305 --- /dev/null +++ b/python/ql/lib/change-notes/2024-10-03-typetracking-through-comprehensions.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Type tracking, and hence the API graph, is now able to correctly trace trough comprehensions. \ No newline at end of file diff --git a/python/ql/lib/change-notes/2024-10-09-finditer-match.md b/python/ql/lib/change-notes/2024-10-09-finditer-match.md new file mode 100644 index 000000000000..ee2ccc1119a4 --- /dev/null +++ b/python/ql/lib/change-notes/2024-10-09-finditer-match.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Modelled that `re.finditer` returns an iterable of `re.Match` objects. This is now understood by the API graph in many cases. \ No newline at end of file diff --git a/python/ql/lib/change-notes/released/2.1.1.md b/python/ql/lib/change-notes/released/2.1.1.md deleted file mode 100644 index bd2b31a218d9..000000000000 --- a/python/ql/lib/change-notes/released/2.1.1.md +++ /dev/null @@ -1,9 +0,0 @@ -## 2.1.1 - -### Minor Analysis Improvements - -* Modelled that `re.finditer` returns an iterable of `re.Match` objects. This is now understood by the API graph in many cases. -* Type tracking, and hence the API graph, is now able to correctly trace through comprehensions. -* More precise modelling of the dataflow through comprehensions. In particular, captured variables are now handled correctly. -* Dataflow out of yield is added, allowing proper tracing through generators. -* Added several models of standard library functions and classes, in anticipation of no longer extracting the standard library in a future release. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index 576c2ea18d68..487a1a58b2b8 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.1.1 +lastReleaseVersion: 2.1.0 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index dd92c1068daf..445940cdd889 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 2.1.1 +version: 2.1.1-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index ea236eb11ba5..21c9ebcf16f9 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,12 +1,8 @@ -## 1.3.1 - -No user-facing changes. - ## 1.3.0 ### New Queries -* The experimental `py/cors-misconfiguration-with-credentials` query, which finds insecure CORS middleware configurations. +* The `py/cors-misconfiguration-with-credentials` query, which finds insecure CORS middleware configurations. ## 1.2.2 diff --git a/python/ql/src/change-notes/released/1.3.1.md b/python/ql/src/change-notes/released/1.3.1.md deleted file mode 100644 index 8dd9964197cb..000000000000 --- a/python/ql/src/change-notes/released/1.3.1.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.3.1 - -No user-facing changes. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index e71b6d081f15..ec16350ed6fd 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.3.1 +lastReleaseVersion: 1.3.0 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 52d6ee0b6032..3f5ee4e78041 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.3.1 +version: 1.3.1-dev groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index fcfaf0238c21..59c058c1c45c 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,9 +1,3 @@ -## 2.0.2 - -### Minor Analysis Improvements - -* The `ExtractionError` class has been split into `ExtractionError` and `ExtractionWarning`, reporting extraction errors and warnings respectively. - ## 2.0.1 No user-facing changes. diff --git a/ruby/ql/lib/change-notes/released/2.0.2.md b/ruby/ql/lib/change-notes/2024-10-03-extraction-warnings.md similarity index 77% rename from ruby/ql/lib/change-notes/released/2.0.2.md rename to ruby/ql/lib/change-notes/2024-10-03-extraction-warnings.md index 9d7757a2e03e..5d6128354c3b 100644 --- a/ruby/ql/lib/change-notes/released/2.0.2.md +++ b/ruby/ql/lib/change-notes/2024-10-03-extraction-warnings.md @@ -1,5 +1,4 @@ -## 2.0.2 - -### Minor Analysis Improvements - +--- +category: minorAnalysis +--- * The `ExtractionError` class has been split into `ExtractionError` and `ExtractionWarning`, reporting extraction errors and warnings respectively. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 81c7f1dbc13c..fe974a4dbf37 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.2 +lastReleaseVersion: 2.0.1 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 53ea89afe3b1..dc0b471a171d 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 2.0.2 +version: 2.0.2-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 363b517dec19..5e9c68a56a01 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,9 +1,3 @@ -## 1.1.5 - -### Minor Analysis Improvements - -* The `rb/diagnostics/extraction-errors` diagnostic query has been split into `rb/diagnostics/extraction-errors` and `rb/diagnostics/extraction-warnings`, counting extraction errors and warnings respectively. - ## 1.1.4 No user-facing changes. diff --git a/ruby/ql/src/change-notes/released/1.1.5.md b/ruby/ql/src/change-notes/2024-10-03-extraction-warnings.md similarity index 82% rename from ruby/ql/src/change-notes/released/1.1.5.md rename to ruby/ql/src/change-notes/2024-10-03-extraction-warnings.md index fd55457a718c..ac97cd1e7ba2 100644 --- a/ruby/ql/src/change-notes/released/1.1.5.md +++ b/ruby/ql/src/change-notes/2024-10-03-extraction-warnings.md @@ -1,5 +1,4 @@ -## 1.1.5 - -### Minor Analysis Improvements - +--- +category: minorAnalysis +--- * The `rb/diagnostics/extraction-errors` diagnostic query has been split into `rb/diagnostics/extraction-errors` and `rb/diagnostics/extraction-warnings`, counting extraction errors and warnings respectively. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index df39a9de059d..26cbcd3f123b 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.5 +lastReleaseVersion: 1.1.4 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 2c0ea256429e..b7eee713fbaa 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.1.5 +version: 1.1.5-dev groups: - ruby - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index 7aaa7597d5bb..52b731626290 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.10 - -No user-facing changes. - ## 1.0.9 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/1.0.10.md b/shared/controlflow/change-notes/released/1.0.10.md deleted file mode 100644 index b601d8784532..000000000000 --- a/shared/controlflow/change-notes/released/1.0.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.10 - -No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 3865dbcf4b2a..fb813c5ee050 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.10 +lastReleaseVersion: 1.0.9 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 0d1248c09815..532b2fa69a09 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 1.0.10 +version: 1.0.10-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index c9f031d51134..360dc9cc8bff 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.1.4 - -No user-facing changes. - ## 1.1.3 No user-facing changes. diff --git a/shared/dataflow/change-notes/released/1.1.4.md b/shared/dataflow/change-notes/released/1.1.4.md deleted file mode 100644 index b95051903c5a..000000000000 --- a/shared/dataflow/change-notes/released/1.1.4.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.1.4 - -No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 26cbcd3f123b..35e710ab1bf0 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.4 +lastReleaseVersion: 1.1.3 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 3d21af7c256b..df5c8c4c38af 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 1.1.4 +version: 1.1.4-dev groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 02a3541df616..7857f62905c7 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.10 - -No user-facing changes. - ## 1.0.9 No user-facing changes. diff --git a/shared/mad/change-notes/released/1.0.10.md b/shared/mad/change-notes/released/1.0.10.md deleted file mode 100644 index b601d8784532..000000000000 --- a/shared/mad/change-notes/released/1.0.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.10 - -No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index 3865dbcf4b2a..fb813c5ee050 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.10 +lastReleaseVersion: 1.0.9 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index b45f7415c81a..ef3755c80bc4 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.10 +version: 1.0.10-dev groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 992ad108bcd6..5878f9b564c0 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.10 - -No user-facing changes. - ## 1.0.9 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/1.0.10.md b/shared/rangeanalysis/change-notes/released/1.0.10.md deleted file mode 100644 index b601d8784532..000000000000 --- a/shared/rangeanalysis/change-notes/released/1.0.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.10 - -No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index 3865dbcf4b2a..fb813c5ee050 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.10 +lastReleaseVersion: 1.0.9 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index a11b83edace6..b4deed51c9d8 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.10 +version: 1.0.10-dev groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index 3a71d968b43c..01154f6c5f52 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.10 - -No user-facing changes. - ## 1.0.9 No user-facing changes. diff --git a/shared/regex/change-notes/released/1.0.10.md b/shared/regex/change-notes/released/1.0.10.md deleted file mode 100644 index b601d8784532..000000000000 --- a/shared/regex/change-notes/released/1.0.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.10 - -No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index 3865dbcf4b2a..fb813c5ee050 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.10 +lastReleaseVersion: 1.0.9 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index bfb63fdee77f..5593197f674b 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.10 +version: 1.0.10-dev groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 76edd23e4428..85bef6a32845 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.10 - -No user-facing changes. - ## 1.0.9 No user-facing changes. diff --git a/shared/ssa/change-notes/released/1.0.10.md b/shared/ssa/change-notes/released/1.0.10.md deleted file mode 100644 index b601d8784532..000000000000 --- a/shared/ssa/change-notes/released/1.0.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.10 - -No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index 3865dbcf4b2a..fb813c5ee050 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.10 +lastReleaseVersion: 1.0.9 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 7e09739a333a..7bc3773a575f 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 1.0.10 +version: 1.0.10-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index b62e06e3dff0..9589b67148fa 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.10 - -No user-facing changes. - ## 1.0.9 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/1.0.10.md b/shared/threat-models/change-notes/released/1.0.10.md deleted file mode 100644 index b601d8784532..000000000000 --- a/shared/threat-models/change-notes/released/1.0.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.10 - -No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index 3865dbcf4b2a..fb813c5ee050 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.10 +lastReleaseVersion: 1.0.9 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 7609a088b6e9..dd4331d7e749 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.10 +version: 1.0.10-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index 676b469b866a..ba77e020439d 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.10 - -No user-facing changes. - ## 1.0.9 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/1.0.10.md b/shared/tutorial/change-notes/released/1.0.10.md deleted file mode 100644 index b601d8784532..000000000000 --- a/shared/tutorial/change-notes/released/1.0.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.10 - -No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index 3865dbcf4b2a..fb813c5ee050 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.10 +lastReleaseVersion: 1.0.9 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 1cfbfb40c91c..2390ce7ad116 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.10 +version: 1.0.10-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/CHANGELOG.md b/shared/typeflow/CHANGELOG.md index 19badb815f98..93c030dee3e4 100644 --- a/shared/typeflow/CHANGELOG.md +++ b/shared/typeflow/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.10 - -No user-facing changes. - ## 1.0.9 No user-facing changes. diff --git a/shared/typeflow/change-notes/released/1.0.10.md b/shared/typeflow/change-notes/released/1.0.10.md deleted file mode 100644 index b601d8784532..000000000000 --- a/shared/typeflow/change-notes/released/1.0.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.10 - -No user-facing changes. diff --git a/shared/typeflow/codeql-pack.release.yml b/shared/typeflow/codeql-pack.release.yml index 3865dbcf4b2a..fb813c5ee050 100644 --- a/shared/typeflow/codeql-pack.release.yml +++ b/shared/typeflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.10 +lastReleaseVersion: 1.0.9 diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index 430f9e468126..04f843aacb5f 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.10 +version: 1.0.10-dev groups: shared library: true dependencies: diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index 29b2bdbb3dae..a4e57c221876 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.10 - -No user-facing changes. - ## 1.0.9 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/1.0.10.md b/shared/typetracking/change-notes/released/1.0.10.md deleted file mode 100644 index b601d8784532..000000000000 --- a/shared/typetracking/change-notes/released/1.0.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.10 - -No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index 3865dbcf4b2a..fb813c5ee050 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.10 +lastReleaseVersion: 1.0.9 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index d29f0c0bd6e4..e48446dc3e0b 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 1.0.10 +version: 1.0.10-dev groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index 0f6b529e512c..acee82ce867b 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.10 - -No user-facing changes. - ## 1.0.9 No user-facing changes. diff --git a/shared/typos/change-notes/released/1.0.10.md b/shared/typos/change-notes/released/1.0.10.md deleted file mode 100644 index b601d8784532..000000000000 --- a/shared/typos/change-notes/released/1.0.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.10 - -No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index 3865dbcf4b2a..fb813c5ee050 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.10 +lastReleaseVersion: 1.0.9 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 4e15f26a72c5..5eccd54b2afa 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.10 +version: 1.0.10-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index f81ed05cc13b..2f918fd0416f 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.10 - -No user-facing changes. - ## 1.0.9 No user-facing changes. diff --git a/shared/util/change-notes/released/1.0.10.md b/shared/util/change-notes/released/1.0.10.md deleted file mode 100644 index b601d8784532..000000000000 --- a/shared/util/change-notes/released/1.0.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.10 - -No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index 3865dbcf4b2a..fb813c5ee050 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.10 +lastReleaseVersion: 1.0.9 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index d73aee511702..508143471db4 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 1.0.10 +version: 1.0.10-dev groups: shared library: true dependencies: null diff --git a/shared/xml/CHANGELOG.md b/shared/xml/CHANGELOG.md index bc002596b451..90afd761e7d4 100644 --- a/shared/xml/CHANGELOG.md +++ b/shared/xml/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.10 - -No user-facing changes. - ## 1.0.9 No user-facing changes. diff --git a/shared/xml/change-notes/released/1.0.10.md b/shared/xml/change-notes/released/1.0.10.md deleted file mode 100644 index b601d8784532..000000000000 --- a/shared/xml/change-notes/released/1.0.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.10 - -No user-facing changes. diff --git a/shared/xml/codeql-pack.release.yml b/shared/xml/codeql-pack.release.yml index 3865dbcf4b2a..fb813c5ee050 100644 --- a/shared/xml/codeql-pack.release.yml +++ b/shared/xml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.10 +lastReleaseVersion: 1.0.9 diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index 56f477c27e19..a81184e65886 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.10 +version: 1.0.10-dev groups: shared library: true dependencies: diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index a6804be01273..222c0ec037c6 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.10 - -No user-facing changes. - ## 1.0.9 No user-facing changes. diff --git a/shared/yaml/change-notes/released/1.0.10.md b/shared/yaml/change-notes/released/1.0.10.md deleted file mode 100644 index b601d8784532..000000000000 --- a/shared/yaml/change-notes/released/1.0.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.10 - -No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index 3865dbcf4b2a..fb813c5ee050 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.10 +lastReleaseVersion: 1.0.9 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index b1e351ce1968..1df4193b862f 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.10 +version: 1.0.10-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index 004e85afa62d..5602ebc7d231 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,7 +1,3 @@ -## 2.0.2 - -No user-facing changes. - ## 2.0.1 ### Minor Analysis Improvements diff --git a/swift/ql/lib/change-notes/released/2.0.2.md b/swift/ql/lib/change-notes/released/2.0.2.md deleted file mode 100644 index 862ef0e9df7c..000000000000 --- a/swift/ql/lib/change-notes/released/2.0.2.md +++ /dev/null @@ -1,3 +0,0 @@ -## 2.0.2 - -No user-facing changes. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 81c7f1dbc13c..fe974a4dbf37 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.2 +lastReleaseVersion: 2.0.1 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 31dd6d915f3d..1904a1b1ca48 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 2.0.2 +version: 2.0.2-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index daeeee421ba8..b47f96f9eb9e 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.10 - -No user-facing changes. - ## 1.0.9 No user-facing changes. diff --git a/swift/ql/src/change-notes/released/1.0.10.md b/swift/ql/src/change-notes/released/1.0.10.md deleted file mode 100644 index b601d8784532..000000000000 --- a/swift/ql/src/change-notes/released/1.0.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.10 - -No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 3865dbcf4b2a..fb813c5ee050 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.10 +lastReleaseVersion: 1.0.9 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 17bf94f219d8..6fbae9403605 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.0.10 +version: 1.0.10-dev groups: - swift - queries From ca0345324e93a2c97af8d0fc2fd41fdfae270d74 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 18 Oct 2024 15:16:21 +0000 Subject: [PATCH 208/217] Release preparation for version 2.19.2 --- cpp/ql/lib/CHANGELOG.md | 7 +++++++ .../change-notes/2024-10-07-range-analysis-of-getc.md | 4 ---- cpp/ql/lib/change-notes/2024-10-09-fopen-taint.md | 4 ---- cpp/ql/lib/change-notes/released/2.0.2.md | 6 ++++++ cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 9 +++++++++ .../2024-09-26-wcharcharconversion-false-positives.md | 5 ----- .../src/change-notes/2024-10-02-uninitialized-local.md | 4 ---- .../2024-10-07-unclear-array-index-validation.md | 4 ---- cpp/ql/src/change-notes/released/1.2.5.md | 8 ++++++++ cpp/ql/src/codeql-pack.release.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md | 4 ++++ .../Solorigate/lib/change-notes/released/1.7.27.md | 3 +++ .../campaigns/Solorigate/lib/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/src/CHANGELOG.md | 4 ++++ .../Solorigate/src/change-notes/released/1.7.27.md | 3 +++ .../campaigns/Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 4 ++++ csharp/ql/lib/change-notes/released/3.0.1.md | 3 +++ csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 4 ++++ csharp/ql/src/change-notes/released/1.0.10.md | 3 +++ csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 ++++ .../change-notes/released/1.0.10.md | 3 +++ go/ql/consistency-queries/codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 8 ++++++++ .../change-notes/2024-09-03-tags-and-interface-ids.md | 5 ----- .../2.1.1.md} | 9 ++++++--- go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 4 ++++ go/ql/src/change-notes/released/1.1.1.md | 3 +++ go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/automodel/src/CHANGELOG.md | 4 ++++ java/ql/automodel/src/change-notes/released/1.0.10.md | 3 +++ java/ql/automodel/src/codeql-pack.release.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 4 ++++ java/ql/lib/change-notes/released/4.1.1.md | 3 +++ java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 4 ++++ java/ql/src/change-notes/released/1.1.7.md | 3 +++ java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 4 ++++ javascript/ql/lib/change-notes/released/2.0.2.md | 3 +++ javascript/ql/lib/codeql-pack.release.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/CHANGELOG.md | 4 ++++ javascript/ql/src/change-notes/released/1.2.2.md | 3 +++ javascript/ql/src/codeql-pack.release.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/CHANGELOG.md | 4 ++++ misc/suite-helpers/change-notes/released/1.0.10.md | 3 +++ misc/suite-helpers/codeql-pack.release.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/CHANGELOG.md | 10 ++++++++++ .../ql/lib/change-notes/2024-09-24-std-lib-models.md | 4 ---- .../lib/change-notes/2024-10-01-comprehension-flow.md | 5 ----- .../2024-10-03-typetracking-through-comprehensions.md | 4 ---- .../ql/lib/change-notes/2024-10-09-finditer-match.md | 4 ---- python/ql/lib/change-notes/released/2.1.1.md | 9 +++++++++ python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 6 +++++- python/ql/src/change-notes/released/1.3.1.md | 3 +++ python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 6 ++++++ .../2.0.2.md} | 7 ++++--- ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 6 ++++++ .../1.1.5.md} | 7 ++++--- ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 ++++ shared/controlflow/change-notes/released/1.0.10.md | 3 +++ shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 4 ++++ shared/dataflow/change-notes/released/1.1.4.md | 3 +++ shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ++++ shared/mad/change-notes/released/1.0.10.md | 3 +++ shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ++++ shared/rangeanalysis/change-notes/released/1.0.10.md | 3 +++ shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ++++ shared/regex/change-notes/released/1.0.10.md | 3 +++ shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ++++ shared/ssa/change-notes/released/1.0.10.md | 3 +++ shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 ++++ shared/threat-models/change-notes/released/1.0.10.md | 3 +++ shared/threat-models/codeql-pack.release.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/CHANGELOG.md | 4 ++++ shared/tutorial/change-notes/released/1.0.10.md | 3 +++ shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/CHANGELOG.md | 4 ++++ shared/typeflow/change-notes/released/1.0.10.md | 3 +++ shared/typeflow/codeql-pack.release.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ++++ shared/typetracking/change-notes/released/1.0.10.md | 3 +++ shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ++++ shared/typos/change-notes/released/1.0.10.md | 3 +++ shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ++++ shared/util/change-notes/released/1.0.10.md | 3 +++ shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/CHANGELOG.md | 4 ++++ shared/xml/change-notes/released/1.0.10.md | 3 +++ shared/xml/codeql-pack.release.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ++++ shared/yaml/change-notes/released/1.0.10.md | 3 +++ shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 4 ++++ swift/ql/lib/change-notes/released/2.0.2.md | 3 +++ swift/ql/lib/codeql-pack.release.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/CHANGELOG.md | 4 ++++ swift/ql/src/change-notes/released/1.0.10.md | 3 +++ swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 150 files changed, 357 insertions(+), 123 deletions(-) delete mode 100644 cpp/ql/lib/change-notes/2024-10-07-range-analysis-of-getc.md delete mode 100644 cpp/ql/lib/change-notes/2024-10-09-fopen-taint.md create mode 100644 cpp/ql/lib/change-notes/released/2.0.2.md delete mode 100644 cpp/ql/src/change-notes/2024-09-26-wcharcharconversion-false-positives.md delete mode 100644 cpp/ql/src/change-notes/2024-10-02-uninitialized-local.md delete mode 100644 cpp/ql/src/change-notes/2024-10-07-unclear-array-index-validation.md create mode 100644 cpp/ql/src/change-notes/released/1.2.5.md create mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.27.md create mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.27.md create mode 100644 csharp/ql/lib/change-notes/released/3.0.1.md create mode 100644 csharp/ql/src/change-notes/released/1.0.10.md create mode 100644 go/ql/consistency-queries/change-notes/released/1.0.10.md delete mode 100644 go/ql/lib/change-notes/2024-09-03-tags-and-interface-ids.md rename go/ql/lib/change-notes/{2024-08-29-add-stdin-threat-models.md => released/2.1.1.md} (64%) create mode 100644 go/ql/src/change-notes/released/1.1.1.md create mode 100644 java/ql/automodel/src/change-notes/released/1.0.10.md create mode 100644 java/ql/lib/change-notes/released/4.1.1.md create mode 100644 java/ql/src/change-notes/released/1.1.7.md create mode 100644 javascript/ql/lib/change-notes/released/2.0.2.md create mode 100644 javascript/ql/src/change-notes/released/1.2.2.md create mode 100644 misc/suite-helpers/change-notes/released/1.0.10.md delete mode 100644 python/ql/lib/change-notes/2024-09-24-std-lib-models.md delete mode 100644 python/ql/lib/change-notes/2024-10-01-comprehension-flow.md delete mode 100644 python/ql/lib/change-notes/2024-10-03-typetracking-through-comprehensions.md delete mode 100644 python/ql/lib/change-notes/2024-10-09-finditer-match.md create mode 100644 python/ql/lib/change-notes/released/2.1.1.md create mode 100644 python/ql/src/change-notes/released/1.3.1.md rename ruby/ql/lib/change-notes/{2024-10-03-extraction-warnings.md => released/2.0.2.md} (77%) rename ruby/ql/src/change-notes/{2024-10-03-extraction-warnings.md => released/1.1.5.md} (82%) create mode 100644 shared/controlflow/change-notes/released/1.0.10.md create mode 100644 shared/dataflow/change-notes/released/1.1.4.md create mode 100644 shared/mad/change-notes/released/1.0.10.md create mode 100644 shared/rangeanalysis/change-notes/released/1.0.10.md create mode 100644 shared/regex/change-notes/released/1.0.10.md create mode 100644 shared/ssa/change-notes/released/1.0.10.md create mode 100644 shared/threat-models/change-notes/released/1.0.10.md create mode 100644 shared/tutorial/change-notes/released/1.0.10.md create mode 100644 shared/typeflow/change-notes/released/1.0.10.md create mode 100644 shared/typetracking/change-notes/released/1.0.10.md create mode 100644 shared/typos/change-notes/released/1.0.10.md create mode 100644 shared/util/change-notes/released/1.0.10.md create mode 100644 shared/xml/change-notes/released/1.0.10.md create mode 100644 shared/yaml/change-notes/released/1.0.10.md create mode 100644 swift/ql/lib/change-notes/released/2.0.2.md create mode 100644 swift/ql/src/change-notes/released/1.0.10.md diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index 5d39629f62b0..73c42c5dfa07 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,10 @@ +## 2.0.2 + +### Minor Analysis Improvements + +* Added taint flow model for `fopen` and related functions. +* The `SimpleRangeAnalysis` library (`semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis`) now generates more precise ranges for calls to `fgetc` and `getc`. + ## 2.0.1 No user-facing changes. diff --git a/cpp/ql/lib/change-notes/2024-10-07-range-analysis-of-getc.md b/cpp/ql/lib/change-notes/2024-10-07-range-analysis-of-getc.md deleted file mode 100644 index f796fba2ece2..000000000000 --- a/cpp/ql/lib/change-notes/2024-10-07-range-analysis-of-getc.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The `SimpleRangeAnalysis` library (`semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis`) now generates more precise ranges for calls to `fgetc` and `getc`. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2024-10-09-fopen-taint.md b/cpp/ql/lib/change-notes/2024-10-09-fopen-taint.md deleted file mode 100644 index d2516859a910..000000000000 --- a/cpp/ql/lib/change-notes/2024-10-09-fopen-taint.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added taint flow model for `fopen` and related functions. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/released/2.0.2.md b/cpp/ql/lib/change-notes/released/2.0.2.md new file mode 100644 index 000000000000..db3a11e55a8e --- /dev/null +++ b/cpp/ql/lib/change-notes/released/2.0.2.md @@ -0,0 +1,6 @@ +## 2.0.2 + +### Minor Analysis Improvements + +* Added taint flow model for `fopen` and related functions. +* The `SimpleRangeAnalysis` library (`semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis`) now generates more precise ranges for calls to `fgetc` and `getc`. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index fe974a4dbf37..81c7f1dbc13c 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.1 +lastReleaseVersion: 2.0.2 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index ba5db8c6e6f9..91af68ed6411 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 2.0.2-dev +version: 2.0.2 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 8eaccb0404dc..7896479549fc 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,12 @@ +## 1.2.5 + +### Minor Analysis Improvements + +* The `cpp/unclear-array-index-validation` ("Unclear validation of array index") query has been improved to reduce false positives increase true positives. +* Fixed false positives in the `cpp/uninitialized-local` ("Potentially uninitialized local variable") query if there are extraction errors in the function. +* The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to detect byte arrays. +* The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to recognize dynamic checks prior to possible dangerous widening. + ## 1.2.4 ### Minor Analysis Improvements diff --git a/cpp/ql/src/change-notes/2024-09-26-wcharcharconversion-false-positives.md b/cpp/ql/src/change-notes/2024-09-26-wcharcharconversion-false-positives.md deleted file mode 100644 index b0fa7a953c59..000000000000 --- a/cpp/ql/src/change-notes/2024-09-26-wcharcharconversion-false-positives.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to detect byte arrays. -* The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to recognize dynamic checks prior to possible dangerous widening. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-10-02-uninitialized-local.md b/cpp/ql/src/change-notes/2024-10-02-uninitialized-local.md deleted file mode 100644 index e34a942f38a6..000000000000 --- a/cpp/ql/src/change-notes/2024-10-02-uninitialized-local.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Fixed false positives in the `cpp/uninitialized-local` ("Potentially uninitialized local variable") query if there are extraction errors in the function. diff --git a/cpp/ql/src/change-notes/2024-10-07-unclear-array-index-validation.md b/cpp/ql/src/change-notes/2024-10-07-unclear-array-index-validation.md deleted file mode 100644 index b237afdd6be8..000000000000 --- a/cpp/ql/src/change-notes/2024-10-07-unclear-array-index-validation.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The `cpp/unclear-array-index-validation` ("Unclear validation of array index") query has been improved to reduce false positives increase true positives. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/released/1.2.5.md b/cpp/ql/src/change-notes/released/1.2.5.md new file mode 100644 index 000000000000..cf937d43e6b3 --- /dev/null +++ b/cpp/ql/src/change-notes/released/1.2.5.md @@ -0,0 +1,8 @@ +## 1.2.5 + +### Minor Analysis Improvements + +* The `cpp/unclear-array-index-validation` ("Unclear validation of array index") query has been improved to reduce false positives increase true positives. +* Fixed false positives in the `cpp/uninitialized-local` ("Potentially uninitialized local variable") query if there are extraction errors in the function. +* The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to detect byte arrays. +* The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to recognize dynamic checks prior to possible dangerous widening. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 172090f46b6d..40355f0807f9 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.4 +lastReleaseVersion: 1.2.5 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index d01ac2f048c2..eee6e064b22f 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.2.5-dev +version: 1.2.5 groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 989d5e74408f..eb646b9ce77f 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.27 + +No user-facing changes. + ## 1.7.26 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.27.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.27.md new file mode 100644 index 000000000000..7d323c891002 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.27.md @@ -0,0 +1,3 @@ +## 1.7.27 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index ca4c34e70d1b..5c0490dbda8e 100644 --- a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.26 +lastReleaseVersion: 1.7.27 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 3cab08a0f3ec..e02f2f0733ce 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.27-dev +version: 1.7.27 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 989d5e74408f..eb646b9ce77f 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.27 + +No user-facing changes. + ## 1.7.26 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.27.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.27.md new file mode 100644 index 000000000000..7d323c891002 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.27.md @@ -0,0 +1,3 @@ +## 1.7.27 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index ca4c34e70d1b..5c0490dbda8e 100644 --- a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.26 +lastReleaseVersion: 1.7.27 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index c46baf0b2518..d94e11459d4c 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.27-dev +version: 1.7.27 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 7e8378798830..302087e4f147 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 3.0.1 + +No user-facing changes. + ## 3.0.0 ### Breaking Changes diff --git a/csharp/ql/lib/change-notes/released/3.0.1.md b/csharp/ql/lib/change-notes/released/3.0.1.md new file mode 100644 index 000000000000..ac5998ace618 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/3.0.1.md @@ -0,0 +1,3 @@ +## 3.0.1 + +No user-facing changes. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 33d3a2cd1139..e3b15d965db6 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 3.0.0 +lastReleaseVersion: 3.0.1 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 55a99929ac87..1515544bc960 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 3.0.1-dev +version: 3.0.1 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 4c162b64d8f7..59a98aca72a2 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 ### Minor Analysis Improvements diff --git a/csharp/ql/src/change-notes/released/1.0.10.md b/csharp/ql/src/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/csharp/ql/src/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 6209cc5f88d5..90e7ec11d865 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.0.10-dev +version: 1.0.10 groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index 9589b67148fa..b62e06e3dff0 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.10.md b/go/ql/consistency-queries/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/go/ql/consistency-queries/codeql-pack.release.yml b/go/ql/consistency-queries/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 5a7ca8082a53..726aa918f891 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.10-dev +version: 1.0.10 groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index a9a8190e6acc..d3c6fcd4a611 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,11 @@ +## 2.1.1 + +### Minor Analysis Improvements + +* Added member predicates `StructTag.hasOwnFieldWithTag` and `Field.getTag`, which enable CodeQL queries to examine struct field tags. +* Added member predicate `InterfaceType.hasPrivateMethodWithQualifiedName`, which enables CodeQL queries to distinguish interfaces with matching non-exported method names that are declared in different packages, and are therefore incompatible. +* Local source models with the `stdin` source kind have been added for the variable `os.Stdin` and the functions `fmt.Scan`, `fmt.Scanf` and `fmt.Scanln`. You can optionally include threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see [Analyzing your code with CodeQL queries](https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>) and [Customizing your advanced setup for code scanning](https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models). + ## 2.1.0 ### Deprecated APIs diff --git a/go/ql/lib/change-notes/2024-09-03-tags-and-interface-ids.md b/go/ql/lib/change-notes/2024-09-03-tags-and-interface-ids.md deleted file mode 100644 index 749ae4cde998..000000000000 --- a/go/ql/lib/change-notes/2024-09-03-tags-and-interface-ids.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* Added member predicates `StructTag.hasOwnFieldWithTag` and `Field.getTag`, which enable CodeQL queries to examine struct field tags. -* Added member predicate `InterfaceType.hasPrivateMethodWithQualifiedName`, which enables CodeQL queries to distinguish interfaces with matching non-exported method names that are declared in different packages, and are therefore incompatible. diff --git a/go/ql/lib/change-notes/2024-08-29-add-stdin-threat-models.md b/go/ql/lib/change-notes/released/2.1.1.md similarity index 64% rename from go/ql/lib/change-notes/2024-08-29-add-stdin-threat-models.md rename to go/ql/lib/change-notes/released/2.1.1.md index d98ac68f1edc..7319120fd3cb 100644 --- a/go/ql/lib/change-notes/2024-08-29-add-stdin-threat-models.md +++ b/go/ql/lib/change-notes/released/2.1.1.md @@ -1,4 +1,7 @@ ---- -category: minorAnalysis ---- +## 2.1.1 + +### Minor Analysis Improvements + +* Added member predicates `StructTag.hasOwnFieldWithTag` and `Field.getTag`, which enable CodeQL queries to examine struct field tags. +* Added member predicate `InterfaceType.hasPrivateMethodWithQualifiedName`, which enables CodeQL queries to distinguish interfaces with matching non-exported method names that are declared in different packages, and are therefore incompatible. * Local source models with the `stdin` source kind have been added for the variable `os.Stdin` and the functions `fmt.Scan`, `fmt.Scanf` and `fmt.Scanln`. You can optionally include threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see [Analyzing your code with CodeQL queries](https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>) and [Customizing your advanced setup for code scanning](https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models). diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 487a1a58b2b8..576c2ea18d68 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.1.0 +lastReleaseVersion: 2.1.1 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 9cb5e3620117..ba6a48a29d49 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 2.1.1-dev +version: 2.1.1 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index 69a5ed3e9f83..bdb40a2d2bb4 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.1 + +No user-facing changes. + ## 1.1.0 ### Query Metadata Changes diff --git a/go/ql/src/change-notes/released/1.1.1.md b/go/ql/src/change-notes/released/1.1.1.md new file mode 100644 index 000000000000..7fb56d366105 --- /dev/null +++ b/go/ql/src/change-notes/released/1.1.1.md @@ -0,0 +1,3 @@ +## 1.1.1 + +No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 2ac15439f561..1a19084be3f7 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.0 +lastReleaseVersion: 1.1.1 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 0b3f5076bb6d..0dbc1fe67fae 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.1.1-dev +version: 1.1.1 groups: - go - queries diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index 4d632a2ae2d2..537e84b2c0e5 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/1.0.10.md b/java/ql/automodel/src/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/java/ql/automodel/src/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/java/ql/automodel/src/codeql-pack.release.yml b/java/ql/automodel/src/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index fe961cb4392c..7621f1900d53 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 1.0.10-dev +version: 1.0.10 groups: - java - automodel diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 5441126d72c9..6be0cdc10e5a 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.1.1 + +No user-facing changes. + ## 4.1.0 ### Deprecated APIs diff --git a/java/ql/lib/change-notes/released/4.1.1.md b/java/ql/lib/change-notes/released/4.1.1.md new file mode 100644 index 000000000000..23583cbad734 --- /dev/null +++ b/java/ql/lib/change-notes/released/4.1.1.md @@ -0,0 +1,3 @@ +## 4.1.1 + +No user-facing changes. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index d5b1bf88d10e..9c871cefc42c 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.1.0 +lastReleaseVersion: 4.1.1 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 0d4f67146c1b..23871cfb7d82 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 4.1.1-dev +version: 4.1.1 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 20e7a248aebb..a034dc0abf90 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.7 + +No user-facing changes. + ## 1.1.6 ### Minor Analysis Improvements diff --git a/java/ql/src/change-notes/released/1.1.7.md b/java/ql/src/change-notes/released/1.1.7.md new file mode 100644 index 000000000000..81505c0507a2 --- /dev/null +++ b/java/ql/src/change-notes/released/1.1.7.md @@ -0,0 +1,3 @@ +## 1.1.7 + +No user-facing changes. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 9e712a00a21d..759105565166 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.6 +lastReleaseVersion: 1.1.7 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index c8e95f52ca4a..82b14986199e 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.1.7-dev +version: 1.1.7 groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index bb77b4f1f496..6068cf26319d 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.2 + +No user-facing changes. + ## 2.0.1 No user-facing changes. diff --git a/javascript/ql/lib/change-notes/released/2.0.2.md b/javascript/ql/lib/change-notes/released/2.0.2.md new file mode 100644 index 000000000000..862ef0e9df7c --- /dev/null +++ b/javascript/ql/lib/change-notes/released/2.0.2.md @@ -0,0 +1,3 @@ +## 2.0.2 + +No user-facing changes. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index fe974a4dbf37..81c7f1dbc13c 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.1 +lastReleaseVersion: 2.0.2 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index bea3bbacd5fa..8cf13a5240ce 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.0.2-dev +version: 2.0.2 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index adf7daa3eb43..df7becd46de5 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.2.2 + +No user-facing changes. + ## 1.2.1 No user-facing changes. diff --git a/javascript/ql/src/change-notes/released/1.2.2.md b/javascript/ql/src/change-notes/released/1.2.2.md new file mode 100644 index 000000000000..7b520f6c258f --- /dev/null +++ b/javascript/ql/src/change-notes/released/1.2.2.md @@ -0,0 +1,3 @@ +## 1.2.2 + +No user-facing changes. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 73dd403938c9..0a70a9a01a7e 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.1 +lastReleaseVersion: 1.2.2 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 407aa03f7802..5aee59e9b015 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 1.2.2-dev +version: 1.2.2 groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 729794553521..e9c580c60cef 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/1.0.10.md b/misc/suite-helpers/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/misc/suite-helpers/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 76c86b26be6b..6b8eb63063ba 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.10-dev +version: 1.0.10 groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index 4cadb40bc2f5..4832015d920d 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,13 @@ +## 2.1.1 + +### Minor Analysis Improvements + +* Modelled that `re.finditer` returns an iterable of `re.Match` objects. This is now understood by the API graph in many cases. +* Type tracking, and hence the API graph, is now able to correctly trace trough comprehensions. +* More precise modelling of the dataflow through comprehensions. In particular, captured variables are now handled correctly. +* Dataflow out of yield is added, allowing proper tracing through generators. +* Added several models of standard library functions and classes, in anticipation of no longer extracting the standard library in a future release. + ## 2.1.0 ### New Features diff --git a/python/ql/lib/change-notes/2024-09-24-std-lib-models.md b/python/ql/lib/change-notes/2024-09-24-std-lib-models.md deleted file mode 100644 index 3166e0c8ff0f..000000000000 --- a/python/ql/lib/change-notes/2024-09-24-std-lib-models.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added several models of standard library functions and classes, in anticipation of no longer extracting the standard library in a future release. \ No newline at end of file diff --git a/python/ql/lib/change-notes/2024-10-01-comprehension-flow.md b/python/ql/lib/change-notes/2024-10-01-comprehension-flow.md deleted file mode 100644 index bc3165f05f33..000000000000 --- a/python/ql/lib/change-notes/2024-10-01-comprehension-flow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* More precise modelling of the dataflow through comprehensions. In particular, captured variables are now handled correctly. -* Dataflow out of yield is added, allowing proper tracing through generators. \ No newline at end of file diff --git a/python/ql/lib/change-notes/2024-10-03-typetracking-through-comprehensions.md b/python/ql/lib/change-notes/2024-10-03-typetracking-through-comprehensions.md deleted file mode 100644 index 72d853460305..000000000000 --- a/python/ql/lib/change-notes/2024-10-03-typetracking-through-comprehensions.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Type tracking, and hence the API graph, is now able to correctly trace trough comprehensions. \ No newline at end of file diff --git a/python/ql/lib/change-notes/2024-10-09-finditer-match.md b/python/ql/lib/change-notes/2024-10-09-finditer-match.md deleted file mode 100644 index ee2ccc1119a4..000000000000 --- a/python/ql/lib/change-notes/2024-10-09-finditer-match.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Modelled that `re.finditer` returns an iterable of `re.Match` objects. This is now understood by the API graph in many cases. \ No newline at end of file diff --git a/python/ql/lib/change-notes/released/2.1.1.md b/python/ql/lib/change-notes/released/2.1.1.md new file mode 100644 index 000000000000..949fcd07f7aa --- /dev/null +++ b/python/ql/lib/change-notes/released/2.1.1.md @@ -0,0 +1,9 @@ +## 2.1.1 + +### Minor Analysis Improvements + +* Modelled that `re.finditer` returns an iterable of `re.Match` objects. This is now understood by the API graph in many cases. +* Type tracking, and hence the API graph, is now able to correctly trace trough comprehensions. +* More precise modelling of the dataflow through comprehensions. In particular, captured variables are now handled correctly. +* Dataflow out of yield is added, allowing proper tracing through generators. +* Added several models of standard library functions and classes, in anticipation of no longer extracting the standard library in a future release. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index 487a1a58b2b8..576c2ea18d68 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.1.0 +lastReleaseVersion: 2.1.1 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 445940cdd889..dd92c1068daf 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 2.1.1-dev +version: 2.1.1 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index 21c9ebcf16f9..ea236eb11ba5 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,8 +1,12 @@ +## 1.3.1 + +No user-facing changes. + ## 1.3.0 ### New Queries -* The `py/cors-misconfiguration-with-credentials` query, which finds insecure CORS middleware configurations. +* The experimental `py/cors-misconfiguration-with-credentials` query, which finds insecure CORS middleware configurations. ## 1.2.2 diff --git a/python/ql/src/change-notes/released/1.3.1.md b/python/ql/src/change-notes/released/1.3.1.md new file mode 100644 index 000000000000..8dd9964197cb --- /dev/null +++ b/python/ql/src/change-notes/released/1.3.1.md @@ -0,0 +1,3 @@ +## 1.3.1 + +No user-facing changes. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index ec16350ed6fd..e71b6d081f15 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.3.0 +lastReleaseVersion: 1.3.1 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 3f5ee4e78041..52d6ee0b6032 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.3.1-dev +version: 1.3.1 groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index 59c058c1c45c..fcfaf0238c21 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.0.2 + +### Minor Analysis Improvements + +* The `ExtractionError` class has been split into `ExtractionError` and `ExtractionWarning`, reporting extraction errors and warnings respectively. + ## 2.0.1 No user-facing changes. diff --git a/ruby/ql/lib/change-notes/2024-10-03-extraction-warnings.md b/ruby/ql/lib/change-notes/released/2.0.2.md similarity index 77% rename from ruby/ql/lib/change-notes/2024-10-03-extraction-warnings.md rename to ruby/ql/lib/change-notes/released/2.0.2.md index 5d6128354c3b..9d7757a2e03e 100644 --- a/ruby/ql/lib/change-notes/2024-10-03-extraction-warnings.md +++ b/ruby/ql/lib/change-notes/released/2.0.2.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 2.0.2 + +### Minor Analysis Improvements + * The `ExtractionError` class has been split into `ExtractionError` and `ExtractionWarning`, reporting extraction errors and warnings respectively. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index fe974a4dbf37..81c7f1dbc13c 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.1 +lastReleaseVersion: 2.0.2 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index dc0b471a171d..53ea89afe3b1 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 2.0.2-dev +version: 2.0.2 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 5e9c68a56a01..363b517dec19 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.1.5 + +### Minor Analysis Improvements + +* The `rb/diagnostics/extraction-errors` diagnostic query has been split into `rb/diagnostics/extraction-errors` and `rb/diagnostics/extraction-warnings`, counting extraction errors and warnings respectively. + ## 1.1.4 No user-facing changes. diff --git a/ruby/ql/src/change-notes/2024-10-03-extraction-warnings.md b/ruby/ql/src/change-notes/released/1.1.5.md similarity index 82% rename from ruby/ql/src/change-notes/2024-10-03-extraction-warnings.md rename to ruby/ql/src/change-notes/released/1.1.5.md index ac97cd1e7ba2..fd55457a718c 100644 --- a/ruby/ql/src/change-notes/2024-10-03-extraction-warnings.md +++ b/ruby/ql/src/change-notes/released/1.1.5.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 1.1.5 + +### Minor Analysis Improvements + * The `rb/diagnostics/extraction-errors` diagnostic query has been split into `rb/diagnostics/extraction-errors` and `rb/diagnostics/extraction-warnings`, counting extraction errors and warnings respectively. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 26cbcd3f123b..df39a9de059d 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.4 +lastReleaseVersion: 1.1.5 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index b7eee713fbaa..2c0ea256429e 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.1.5-dev +version: 1.1.5 groups: - ruby - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index 52b731626290..7aaa7597d5bb 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/1.0.10.md b/shared/controlflow/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/controlflow/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 532b2fa69a09..0d1248c09815 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index 360dc9cc8bff..c9f031d51134 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.4 + +No user-facing changes. + ## 1.1.3 No user-facing changes. diff --git a/shared/dataflow/change-notes/released/1.1.4.md b/shared/dataflow/change-notes/released/1.1.4.md new file mode 100644 index 000000000000..b95051903c5a --- /dev/null +++ b/shared/dataflow/change-notes/released/1.1.4.md @@ -0,0 +1,3 @@ +## 1.1.4 + +No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 35e710ab1bf0..26cbcd3f123b 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.3 +lastReleaseVersion: 1.1.4 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index df5c8c4c38af..3d21af7c256b 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 1.1.4-dev +version: 1.1.4 groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 7857f62905c7..02a3541df616 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/mad/change-notes/released/1.0.10.md b/shared/mad/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/mad/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index ef3755c80bc4..b45f7415c81a 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 5878f9b564c0..992ad108bcd6 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/1.0.10.md b/shared/rangeanalysis/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index b4deed51c9d8..a11b83edace6 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index 01154f6c5f52..3a71d968b43c 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/regex/change-notes/released/1.0.10.md b/shared/regex/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/regex/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 5593197f674b..bfb63fdee77f 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 85bef6a32845..76edd23e4428 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/ssa/change-notes/released/1.0.10.md b/shared/ssa/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/ssa/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 7bc3773a575f..7e09739a333a 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index 9589b67148fa..b62e06e3dff0 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/1.0.10.md b/shared/threat-models/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/threat-models/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index dd4331d7e749..7609a088b6e9 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.10-dev +version: 1.0.10 library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index ba77e020439d..676b469b866a 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/1.0.10.md b/shared/tutorial/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/tutorial/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 2390ce7ad116..1cfbfb40c91c 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/CHANGELOG.md b/shared/typeflow/CHANGELOG.md index 93c030dee3e4..19badb815f98 100644 --- a/shared/typeflow/CHANGELOG.md +++ b/shared/typeflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/typeflow/change-notes/released/1.0.10.md b/shared/typeflow/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/typeflow/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/typeflow/codeql-pack.release.yml b/shared/typeflow/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/typeflow/codeql-pack.release.yml +++ b/shared/typeflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index 04f843aacb5f..430f9e468126 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true dependencies: diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index a4e57c221876..29b2bdbb3dae 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/1.0.10.md b/shared/typetracking/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/typetracking/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index e48446dc3e0b..d29f0c0bd6e4 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index acee82ce867b..0f6b529e512c 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/typos/change-notes/released/1.0.10.md b/shared/typos/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/typos/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 5eccd54b2afa..4e15f26a72c5 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index 2f918fd0416f..f81ed05cc13b 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/util/change-notes/released/1.0.10.md b/shared/util/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/util/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 508143471db4..d73aee511702 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true dependencies: null diff --git a/shared/xml/CHANGELOG.md b/shared/xml/CHANGELOG.md index 90afd761e7d4..bc002596b451 100644 --- a/shared/xml/CHANGELOG.md +++ b/shared/xml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/xml/change-notes/released/1.0.10.md b/shared/xml/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/xml/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/xml/codeql-pack.release.yml b/shared/xml/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/xml/codeql-pack.release.yml +++ b/shared/xml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index a81184e65886..56f477c27e19 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true dependencies: diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index 222c0ec037c6..a6804be01273 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/shared/yaml/change-notes/released/1.0.10.md b/shared/yaml/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/shared/yaml/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 1df4193b862f..b1e351ce1968 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.10-dev +version: 1.0.10 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index 5602ebc7d231..004e85afa62d 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.2 + +No user-facing changes. + ## 2.0.1 ### Minor Analysis Improvements diff --git a/swift/ql/lib/change-notes/released/2.0.2.md b/swift/ql/lib/change-notes/released/2.0.2.md new file mode 100644 index 000000000000..862ef0e9df7c --- /dev/null +++ b/swift/ql/lib/change-notes/released/2.0.2.md @@ -0,0 +1,3 @@ +## 2.0.2 + +No user-facing changes. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index fe974a4dbf37..81c7f1dbc13c 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.1 +lastReleaseVersion: 2.0.2 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 1904a1b1ca48..31dd6d915f3d 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 2.0.2-dev +version: 2.0.2 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index b47f96f9eb9e..daeeee421ba8 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/swift/ql/src/change-notes/released/1.0.10.md b/swift/ql/src/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/swift/ql/src/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 6fbae9403605..17bf94f219d8 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.0.10-dev +version: 1.0.10 groups: - swift - queries From aaf220d41e9c76fff506b501f2b5dcf657f7add0 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Fri, 18 Oct 2024 15:28:05 +0000 Subject: [PATCH 209/217] Fix typos in changelogs --- cpp/ql/src/CHANGELOG.md | 2 +- cpp/ql/src/change-notes/released/1.2.5.md | 2 +- python/ql/lib/CHANGELOG.md | 2 +- python/ql/lib/change-notes/released/2.1.1.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 7896479549fc..e73850bbfe96 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -2,7 +2,7 @@ ### Minor Analysis Improvements -* The `cpp/unclear-array-index-validation` ("Unclear validation of array index") query has been improved to reduce false positives increase true positives. +* The `cpp/unclear-array-index-validation` ("Unclear validation of array index") query has been improved to reduce false positives and increase true positives. * Fixed false positives in the `cpp/uninitialized-local` ("Potentially uninitialized local variable") query if there are extraction errors in the function. * The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to detect byte arrays. * The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to recognize dynamic checks prior to possible dangerous widening. diff --git a/cpp/ql/src/change-notes/released/1.2.5.md b/cpp/ql/src/change-notes/released/1.2.5.md index cf937d43e6b3..04aead25cb99 100644 --- a/cpp/ql/src/change-notes/released/1.2.5.md +++ b/cpp/ql/src/change-notes/released/1.2.5.md @@ -2,7 +2,7 @@ ### Minor Analysis Improvements -* The `cpp/unclear-array-index-validation` ("Unclear validation of array index") query has been improved to reduce false positives increase true positives. +* The `cpp/unclear-array-index-validation` ("Unclear validation of array index") query has been improved to reduce false positives and increase true positives. * Fixed false positives in the `cpp/uninitialized-local` ("Potentially uninitialized local variable") query if there are extraction errors in the function. * The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to detect byte arrays. * The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to recognize dynamic checks prior to possible dangerous widening. diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index 4832015d920d..c1f3765162e0 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -3,7 +3,7 @@ ### Minor Analysis Improvements * Modelled that `re.finditer` returns an iterable of `re.Match` objects. This is now understood by the API graph in many cases. -* Type tracking, and hence the API graph, is now able to correctly trace trough comprehensions. +* Type tracking, and hence the API graph, is now able to correctly trace through comprehensions. * More precise modelling of the dataflow through comprehensions. In particular, captured variables are now handled correctly. * Dataflow out of yield is added, allowing proper tracing through generators. * Added several models of standard library functions and classes, in anticipation of no longer extracting the standard library in a future release. diff --git a/python/ql/lib/change-notes/released/2.1.1.md b/python/ql/lib/change-notes/released/2.1.1.md index 949fcd07f7aa..bd2b31a218d9 100644 --- a/python/ql/lib/change-notes/released/2.1.1.md +++ b/python/ql/lib/change-notes/released/2.1.1.md @@ -3,7 +3,7 @@ ### Minor Analysis Improvements * Modelled that `re.finditer` returns an iterable of `re.Match` objects. This is now understood by the API graph in many cases. -* Type tracking, and hence the API graph, is now able to correctly trace trough comprehensions. +* Type tracking, and hence the API graph, is now able to correctly trace through comprehensions. * More precise modelling of the dataflow through comprehensions. In particular, captured variables are now handled correctly. * Dataflow out of yield is added, allowing proper tracing through generators. * Added several models of standard library functions and classes, in anticipation of no longer extracting the standard library in a future release. From 272f6c254128eef30e374f1a3b3b691fb64f5911 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 18 Oct 2024 15:56:02 +0000 Subject: [PATCH 210/217] Post-release preparation for codeql-cli-2.19.2 --- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 35 files changed, 35 insertions(+), 35 deletions(-) diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 91af68ed6411..2e28ea9dc252 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 2.0.2 +version: 2.0.3-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index eee6e064b22f..c43f40dfd12e 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.2.5 +version: 1.2.6-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index e02f2f0733ce..4f73477856f1 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.27 +version: 1.7.28-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index d94e11459d4c..396f60b6296f 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.27 +version: 1.7.28-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 1515544bc960..94a6fe88d2b5 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 3.0.1 +version: 3.0.2-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 90e7ec11d865..f9e30d36a52c 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.0.10 +version: 1.0.11-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 726aa918f891..0c4241ef565c 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.10 +version: 1.0.11-dev groups: - go - queries diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index ba6a48a29d49..643dc6a4bf15 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 2.1.1 +version: 2.1.2-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 0dbc1fe67fae..377e3cf2ed64 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.1.1 +version: 1.1.2-dev groups: - go - queries diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 7621f1900d53..2c47663bdb6c 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 1.0.10 +version: 1.0.11-dev groups: - java - automodel diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 23871cfb7d82..fbc0d1105860 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 4.1.1 +version: 4.1.2-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 82b14986199e..601c7fc7d331 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.1.7 +version: 1.1.8-dev groups: - java - queries diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 8cf13a5240ce..34347c17efd5 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.0.2 +version: 2.0.3-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 5aee59e9b015..1d1e261a43ca 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 1.2.2 +version: 1.2.3-dev groups: - javascript - queries diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 6b8eb63063ba..74364a1bc286 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.10 +version: 1.0.11-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index dd92c1068daf..bf974400c193 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 2.1.1 +version: 2.1.2-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 52d6ee0b6032..825f9a26dfbe 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.3.1 +version: 1.3.2-dev groups: - python - queries diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 53ea89afe3b1..a20bcc15cec7 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 2.0.2 +version: 2.0.3-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 2c0ea256429e..c21061faa0c8 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.1.5 +version: 1.1.6-dev groups: - ruby - queries diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 0d1248c09815..9ec1882c73cf 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 3d21af7c256b..aed05aceffb7 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 1.1.4 +version: 1.1.5-dev groups: shared library: true dependencies: diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index b45f7415c81a..1764a076c6d4 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index a11b83edace6..1ee936931e91 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true dependencies: diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index bfb63fdee77f..118445fe4e0a 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true dependencies: diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 7e09739a333a..1ed12762728b 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 7609a088b6e9..f03e6761ee77 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.10 +version: 1.0.11-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 1cfbfb40c91c..822ff4e936c3 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index 430f9e468126..08468e3fbcaa 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true dependencies: diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index d29f0c0bd6e4..cd6d1482196a 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true dependencies: diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 4e15f26a72c5..5bf928f6c915 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index d73aee511702..c087c5f64d9f 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true dependencies: null diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index 56f477c27e19..071b3d1543d9 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true dependencies: diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index b1e351ce1968..5be2bc73ea0e 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.10 +version: 1.0.11-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 31dd6d915f3d..e1d5a0f06692 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 2.0.2 +version: 2.0.3-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 17bf94f219d8..ef9b975f1695 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.0.10 +version: 1.0.11-dev groups: - swift - queries From 381f061e7feca9f6327443b33c425a298c8b5f6b Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 21 Oct 2024 09:29:28 +0200 Subject: [PATCH 211/217] Rust: Add CFG test for match with no arms --- .../library-tests/controlflow/Cfg.expected | 1697 +++++++++-------- .../ql/test/library-tests/controlflow/test.rs | 8 + 2 files changed, 863 insertions(+), 842 deletions(-) diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 85ea30a20bb2..3b811e27f2be 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -1,847 +1,860 @@ edges -| test.rs:4:5:7:5 | enter function_call | test.rs:5:9:5:45 | ExprStmt | | -| test.rs:4:5:7:5 | exit function_call (normal) | test.rs:4:5:7:5 | exit function_call | | -| test.rs:4:24:7:5 | BlockExpr | test.rs:4:5:7:5 | exit function_call (normal) | | -| test.rs:5:9:5:25 | PathExpr | test.rs:5:27:5:30 | true | | -| test.rs:5:9:5:44 | CallExpr | test.rs:6:9:6:28 | ExprStmt | | -| test.rs:5:9:5:45 | ExprStmt | test.rs:5:9:5:25 | PathExpr | | -| test.rs:5:27:5:30 | true | test.rs:5:33:5:37 | false | | -| test.rs:5:33:5:37 | false | test.rs:5:40:5:43 | true | | -| test.rs:5:40:5:43 | true | test.rs:5:9:5:44 | CallExpr | | -| test.rs:6:9:6:23 | PathExpr | test.rs:6:25:6:26 | 42 | | -| test.rs:6:9:6:27 | CallExpr | test.rs:4:24:7:5 | BlockExpr | | -| test.rs:6:9:6:28 | ExprStmt | test.rs:6:9:6:23 | PathExpr | | -| test.rs:6:25:6:26 | 42 | test.rs:6:9:6:27 | CallExpr | | -| test.rs:9:5:12:5 | enter method_call | test.rs:10:9:10:37 | LetStmt | | -| test.rs:9:5:12:5 | exit method_call (normal) | test.rs:9:5:12:5 | exit method_call | | -| test.rs:9:22:12:5 | BlockExpr | test.rs:9:5:12:5 | exit method_call (normal) | | -| test.rs:10:9:10:37 | LetStmt | test.rs:10:23:10:34 | PathExpr | | -| test.rs:10:13:10:19 | map | test.rs:11:9:11:28 | ExprStmt | match | -| test.rs:10:23:10:34 | PathExpr | test.rs:10:23:10:36 | CallExpr | | -| test.rs:10:23:10:36 | CallExpr | test.rs:10:13:10:19 | map | | -| test.rs:11:9:11:11 | map | test.rs:11:20:11:21 | 37 | | -| test.rs:11:9:11:27 | MethodCallExpr | test.rs:9:22:12:5 | BlockExpr | | -| test.rs:11:9:11:28 | ExprStmt | test.rs:11:9:11:11 | map | | -| test.rs:11:20:11:21 | 37 | test.rs:11:24:11:26 | "a" | | -| test.rs:11:24:11:26 | "a" | test.rs:11:9:11:27 | MethodCallExpr | | -| test.rs:17:5:33:5 | enter test_break_and_continue | test.rs:17:32:17:32 | n | | -| test.rs:17:5:33:5 | exit test_break_and_continue (normal) | test.rs:17:5:33:5 | exit test_break_and_continue | | -| test.rs:17:32:17:32 | n | test.rs:17:32:17:37 | Param | match | -| test.rs:17:32:17:37 | Param | test.rs:18:9:18:22 | LetStmt | | -| test.rs:18:9:18:22 | LetStmt | test.rs:18:21:18:21 | n | | -| test.rs:18:13:18:17 | i | test.rs:19:9:31:9 | ExprStmt | match | -| test.rs:18:21:18:21 | n | test.rs:18:13:18:17 | i | | -| test.rs:19:9:31:9 | ExprStmt | test.rs:20:13:20:24 | ExprStmt | | -| test.rs:19:9:31:9 | LoopExpr | test.rs:32:9:32:20 | ExprStmt | | -| test.rs:19:14:31:9 | BlockExpr | test.rs:20:13:20:24 | ExprStmt | | -| test.rs:20:13:20:13 | i | test.rs:20:17:20:20 | PathExpr | | -| test.rs:20:13:20:23 | ... = ... | test.rs:21:13:23:13 | ExprStmt | | -| test.rs:20:13:20:24 | ExprStmt | test.rs:20:13:20:13 | i | | -| test.rs:20:17:20:20 | PathExpr | test.rs:20:22:20:22 | i | | -| test.rs:20:17:20:23 | CallExpr | test.rs:20:13:20:23 | ... = ... | | -| test.rs:20:22:20:22 | i | test.rs:20:17:20:23 | CallExpr | | -| test.rs:21:13:23:13 | ExprStmt | test.rs:21:16:21:16 | i | | -| test.rs:21:13:23:13 | IfExpr | test.rs:24:13:26:13 | ExprStmt | | -| test.rs:21:16:21:16 | i | test.rs:21:20:21:24 | 10000 | | -| test.rs:21:16:21:24 | ... > ... | test.rs:21:13:23:13 | IfExpr | false | -| test.rs:21:16:21:24 | ... > ... | test.rs:22:17:22:29 | ExprStmt | true | -| test.rs:21:20:21:24 | 10000 | test.rs:21:16:21:24 | ... > ... | | -| test.rs:22:17:22:28 | ReturnExpr | test.rs:17:5:33:5 | exit test_break_and_continue (normal) | return | -| test.rs:22:17:22:29 | ExprStmt | test.rs:22:24:22:28 | false | | -| test.rs:22:24:22:28 | false | test.rs:22:17:22:28 | ReturnExpr | | -| test.rs:24:13:26:13 | ExprStmt | test.rs:24:16:24:16 | i | | -| test.rs:24:13:26:13 | IfExpr | test.rs:27:13:29:13 | ExprStmt | | -| test.rs:24:16:24:16 | i | test.rs:24:21:24:21 | 1 | | -| test.rs:24:16:24:21 | ... == ... | test.rs:24:13:26:13 | IfExpr | false | -| test.rs:24:16:24:21 | ... == ... | test.rs:25:17:25:22 | ExprStmt | true | -| test.rs:24:21:24:21 | 1 | test.rs:24:16:24:21 | ... == ... | | -| test.rs:25:17:25:21 | BreakExpr | test.rs:19:9:31:9 | LoopExpr | break | -| test.rs:25:17:25:22 | ExprStmt | test.rs:25:17:25:21 | BreakExpr | | -| test.rs:27:13:29:13 | ExprStmt | test.rs:27:16:27:16 | i | | -| test.rs:27:13:29:13 | IfExpr | test.rs:30:13:30:13 | i | | -| test.rs:27:16:27:16 | i | test.rs:27:20:27:20 | 2 | | -| test.rs:27:16:27:20 | ... % ... | test.rs:27:25:27:25 | 0 | | -| test.rs:27:16:27:25 | ... != ... | test.rs:27:13:29:13 | IfExpr | false | -| test.rs:27:16:27:25 | ... != ... | test.rs:28:17:28:25 | ExprStmt | true | -| test.rs:27:20:27:20 | 2 | test.rs:27:16:27:20 | ... % ... | | -| test.rs:27:25:27:25 | 0 | test.rs:27:16:27:25 | ... != ... | | -| test.rs:28:17:28:24 | ContinueExpr | test.rs:20:13:20:24 | ExprStmt | continue | -| test.rs:28:17:28:25 | ExprStmt | test.rs:28:17:28:24 | ContinueExpr | | -| test.rs:30:13:30:13 | i | test.rs:30:17:30:17 | i | | -| test.rs:30:13:30:21 | ... = ... | test.rs:19:14:31:9 | BlockExpr | | -| test.rs:30:17:30:17 | i | test.rs:30:21:30:21 | 2 | | -| test.rs:30:17:30:21 | ... / ... | test.rs:30:13:30:21 | ... = ... | | -| test.rs:30:21:30:21 | 2 | test.rs:30:17:30:21 | ... / ... | | -| test.rs:32:9:32:19 | ReturnExpr | test.rs:17:5:33:5 | exit test_break_and_continue (normal) | return | -| test.rs:32:9:32:20 | ExprStmt | test.rs:32:16:32:19 | true | | -| test.rs:32:16:32:19 | true | test.rs:32:9:32:19 | ReturnExpr | | -| test.rs:35:5:47:5 | enter test_break_with_labels | test.rs:35:31:35:31 | b | | -| test.rs:35:5:47:5 | exit test_break_with_labels (normal) | test.rs:35:5:47:5 | exit test_break_with_labels | | -| test.rs:35:31:35:31 | b | test.rs:35:31:35:37 | Param | match | -| test.rs:35:31:35:37 | Param | test.rs:36:9:45:9 | ExprStmt | | -| test.rs:35:48:47:5 | BlockExpr | test.rs:35:5:47:5 | exit test_break_with_labels (normal) | | -| test.rs:36:9:45:9 | ExprStmt | test.rs:38:17:42:17 | ExprStmt | | -| test.rs:36:9:45:9 | LoopExpr | test.rs:46:9:46:12 | true | | -| test.rs:36:22:45:9 | BlockExpr | test.rs:38:17:42:17 | ExprStmt | | -| test.rs:37:13:44:13 | LoopExpr | test.rs:36:22:45:9 | BlockExpr | | -| test.rs:38:17:42:17 | ExprStmt | test.rs:38:20:38:20 | b | | -| test.rs:38:17:42:17 | IfExpr | test.rs:43:17:43:29 | ExprStmt | | -| test.rs:38:20:38:20 | b | test.rs:39:21:39:26 | ExprStmt | true | -| test.rs:38:20:38:20 | b | test.rs:40:27:40:27 | b | false | -| test.rs:39:21:39:25 | BreakExpr | test.rs:37:13:44:13 | LoopExpr | break | -| test.rs:39:21:39:26 | ExprStmt | test.rs:39:21:39:25 | BreakExpr | | -| test.rs:40:24:42:17 | IfExpr | test.rs:38:17:42:17 | IfExpr | | -| test.rs:40:27:40:27 | b | test.rs:40:24:42:17 | IfExpr | false | -| test.rs:40:27:40:27 | b | test.rs:41:21:41:33 | ExprStmt | true | -| test.rs:41:21:41:32 | BreakExpr | test.rs:36:9:45:9 | LoopExpr | break | -| test.rs:41:21:41:33 | ExprStmt | test.rs:41:21:41:32 | BreakExpr | | -| test.rs:43:17:43:28 | BreakExpr | test.rs:37:13:44:13 | LoopExpr | break | -| test.rs:43:17:43:29 | ExprStmt | test.rs:43:17:43:28 | BreakExpr | | -| test.rs:46:9:46:12 | true | test.rs:35:48:47:5 | BlockExpr | | -| test.rs:49:5:61:5 | enter test_continue_with_labels | test.rs:49:34:49:34 | b | | -| test.rs:49:34:49:34 | b | test.rs:49:34:49:40 | Param | match | -| test.rs:49:34:49:40 | Param | test.rs:51:13:51:14 | ExprStmt | | -| test.rs:51:13:51:13 | 1 | test.rs:53:17:57:17 | ExprStmt | | -| test.rs:51:13:51:14 | ExprStmt | test.rs:51:13:51:13 | 1 | | -| test.rs:53:17:57:17 | ExprStmt | test.rs:53:20:53:20 | b | | -| test.rs:53:17:57:17 | IfExpr | test.rs:58:17:58:32 | ExprStmt | | -| test.rs:53:20:53:20 | b | test.rs:54:21:54:29 | ExprStmt | true | -| test.rs:53:20:53:20 | b | test.rs:55:27:55:27 | b | false | -| test.rs:54:21:54:28 | ContinueExpr | test.rs:53:17:57:17 | ExprStmt | continue | -| test.rs:54:21:54:29 | ExprStmt | test.rs:54:21:54:28 | ContinueExpr | | -| test.rs:55:24:57:17 | IfExpr | test.rs:53:17:57:17 | IfExpr | | -| test.rs:55:27:55:27 | b | test.rs:55:24:57:17 | IfExpr | false | -| test.rs:55:27:55:27 | b | test.rs:56:21:56:36 | ExprStmt | true | -| test.rs:56:21:56:35 | ContinueExpr | test.rs:51:13:51:14 | ExprStmt | continue | -| test.rs:56:21:56:36 | ExprStmt | test.rs:56:21:56:35 | ContinueExpr | | -| test.rs:58:17:58:31 | ContinueExpr | test.rs:53:17:57:17 | ExprStmt | continue | -| test.rs:58:17:58:32 | ExprStmt | test.rs:58:17:58:31 | ContinueExpr | | -| test.rs:63:5:75:5 | enter test_loop_label_shadowing | test.rs:63:34:63:34 | b | | -| test.rs:63:34:63:34 | b | test.rs:63:34:63:40 | Param | match | -| test.rs:63:34:63:40 | Param | test.rs:65:13:65:14 | ExprStmt | | -| test.rs:65:13:65:13 | 1 | test.rs:67:17:71:17 | ExprStmt | | -| test.rs:65:13:65:14 | ExprStmt | test.rs:65:13:65:13 | 1 | | -| test.rs:67:17:71:17 | ExprStmt | test.rs:67:20:67:20 | b | | -| test.rs:67:17:71:17 | IfExpr | test.rs:72:17:72:31 | ExprStmt | | -| test.rs:67:20:67:20 | b | test.rs:68:21:68:29 | ExprStmt | true | -| test.rs:67:20:67:20 | b | test.rs:69:27:69:27 | b | false | -| test.rs:68:21:68:28 | ContinueExpr | test.rs:67:17:71:17 | ExprStmt | continue | -| test.rs:68:21:68:29 | ExprStmt | test.rs:68:21:68:28 | ContinueExpr | | -| test.rs:69:24:71:17 | IfExpr | test.rs:67:17:71:17 | IfExpr | | -| test.rs:69:27:69:27 | b | test.rs:69:24:71:17 | IfExpr | false | -| test.rs:69:27:69:27 | b | test.rs:70:21:70:35 | ExprStmt | true | -| test.rs:70:21:70:34 | ContinueExpr | test.rs:67:17:71:17 | ExprStmt | continue | -| test.rs:70:21:70:35 | ExprStmt | test.rs:70:21:70:34 | ContinueExpr | | -| test.rs:72:17:72:30 | ContinueExpr | test.rs:67:17:71:17 | ExprStmt | continue | -| test.rs:72:17:72:31 | ExprStmt | test.rs:72:17:72:30 | ContinueExpr | | -| test.rs:77:5:86:5 | enter test_while | test.rs:77:19:77:19 | i | | -| test.rs:77:5:86:5 | exit test_while (normal) | test.rs:77:5:86:5 | exit test_while | | -| test.rs:77:19:77:19 | i | test.rs:77:19:77:24 | Param | match | -| test.rs:77:19:77:24 | Param | test.rs:78:9:78:25 | LetStmt | | -| test.rs:77:27:86:5 | BlockExpr | test.rs:77:5:86:5 | exit test_while (normal) | | -| test.rs:78:9:78:25 | LetStmt | test.rs:78:21:78:24 | true | | -| test.rs:78:13:78:17 | b | test.rs:79:15:79:15 | b | match | -| test.rs:78:21:78:24 | true | test.rs:78:13:78:17 | b | | -| test.rs:79:9:85:9 | WhileExpr | test.rs:77:27:86:5 | BlockExpr | | -| test.rs:79:15:79:15 | b | test.rs:79:9:85:9 | WhileExpr | false | -| test.rs:79:15:79:15 | b | test.rs:80:13:80:14 | ExprStmt | true | -| test.rs:79:17:85:9 | BlockExpr | test.rs:79:15:79:15 | b | | -| test.rs:80:13:80:13 | 1 | test.rs:81:13:83:13 | ExprStmt | | -| test.rs:80:13:80:14 | ExprStmt | test.rs:80:13:80:13 | 1 | | -| test.rs:81:13:83:13 | ExprStmt | test.rs:81:17:81:17 | i | | -| test.rs:81:13:83:13 | IfExpr | test.rs:84:13:84:22 | ExprStmt | | -| test.rs:81:17:81:17 | i | test.rs:81:21:81:21 | 0 | | -| test.rs:81:17:81:21 | ... > ... | test.rs:81:13:83:13 | IfExpr | false | -| test.rs:81:17:81:21 | ... > ... | test.rs:82:17:82:22 | ExprStmt | true | -| test.rs:81:21:81:21 | 0 | test.rs:81:17:81:21 | ... > ... | | -| test.rs:82:17:82:21 | BreakExpr | test.rs:79:9:85:9 | WhileExpr | break | -| test.rs:82:17:82:22 | ExprStmt | test.rs:82:17:82:21 | BreakExpr | | -| test.rs:84:13:84:13 | b | test.rs:84:17:84:21 | false | | -| test.rs:84:13:84:21 | ... = ... | test.rs:79:17:85:9 | BlockExpr | | -| test.rs:84:13:84:22 | ExprStmt | test.rs:84:13:84:13 | b | | -| test.rs:84:17:84:21 | false | test.rs:84:13:84:21 | ... = ... | | -| test.rs:88:5:95:5 | enter test_while_let | test.rs:89:9:89:29 | LetStmt | | -| test.rs:88:5:95:5 | exit test_while_let (normal) | test.rs:88:5:95:5 | exit test_while_let | | -| test.rs:88:25:95:5 | BlockExpr | test.rs:88:5:95:5 | exit test_while_let (normal) | | -| test.rs:89:9:89:29 | LetStmt | test.rs:89:24:89:24 | 1 | | -| test.rs:89:13:89:20 | iter | test.rs:90:15:90:39 | LetExpr | match | -| test.rs:89:24:89:24 | 1 | test.rs:89:27:89:28 | 10 | | -| test.rs:89:24:89:28 | RangeExpr | test.rs:89:13:89:20 | iter | | -| test.rs:89:27:89:28 | 10 | test.rs:89:24:89:28 | RangeExpr | | -| test.rs:90:9:94:9 | WhileExpr | test.rs:88:25:95:5 | BlockExpr | | -| test.rs:90:15:90:39 | LetExpr | test.rs:90:29:90:32 | iter | | -| test.rs:90:19:90:25 | TupleStructPat | test.rs:90:9:94:9 | WhileExpr | no-match | -| test.rs:90:19:90:25 | TupleStructPat | test.rs:90:24:90:24 | x | match | -| test.rs:90:24:90:24 | x | test.rs:91:17:91:17 | PathExpr | match | -| test.rs:90:29:90:32 | iter | test.rs:90:29:90:39 | MethodCallExpr | | -| test.rs:90:29:90:39 | MethodCallExpr | test.rs:90:19:90:25 | TupleStructPat | | -| test.rs:90:41:94:9 | BlockExpr | test.rs:90:15:90:39 | LetExpr | | -| test.rs:91:13:93:13 | IfExpr | test.rs:90:41:94:9 | BlockExpr | | -| test.rs:91:17:91:17 | PathExpr | test.rs:91:21:91:21 | 5 | | -| test.rs:91:17:91:21 | ... = ... | test.rs:91:13:93:13 | IfExpr | false | -| test.rs:91:17:91:21 | ... = ... | test.rs:92:17:92:22 | ExprStmt | true | -| test.rs:91:21:91:21 | 5 | test.rs:91:17:91:21 | ... = ... | | -| test.rs:92:17:92:21 | BreakExpr | test.rs:90:9:94:9 | WhileExpr | break | -| test.rs:92:17:92:22 | ExprStmt | test.rs:92:17:92:21 | BreakExpr | | -| test.rs:97:5:104:5 | enter test_for | test.rs:97:17:97:17 | j | | -| test.rs:97:5:104:5 | exit test_for (normal) | test.rs:97:5:104:5 | exit test_for | | -| test.rs:97:17:97:17 | j | test.rs:97:17:97:22 | Param | match | -| test.rs:97:17:97:22 | Param | test.rs:98:18:98:18 | 0 | | -| test.rs:97:25:104:5 | BlockExpr | test.rs:97:5:104:5 | exit test_for (normal) | | -| test.rs:98:9:103:9 | ForExpr | test.rs:97:25:104:5 | BlockExpr | | -| test.rs:98:13:98:13 | i | test.rs:98:9:103:9 | ForExpr | no-match | -| test.rs:98:13:98:13 | i | test.rs:99:13:101:13 | ExprStmt | match | -| test.rs:98:18:98:18 | 0 | test.rs:98:21:98:22 | 10 | | -| test.rs:98:18:98:22 | RangeExpr | test.rs:98:13:98:13 | i | | -| test.rs:98:21:98:22 | 10 | test.rs:98:18:98:22 | RangeExpr | | -| test.rs:98:24:103:9 | BlockExpr | test.rs:98:13:98:13 | i | | -| test.rs:99:13:101:13 | ExprStmt | test.rs:99:17:99:17 | i | | -| test.rs:99:13:101:13 | IfExpr | test.rs:102:13:102:14 | ExprStmt | | -| test.rs:99:17:99:17 | i | test.rs:99:22:99:22 | j | | -| test.rs:99:17:99:22 | ... == ... | test.rs:99:13:101:13 | IfExpr | false | -| test.rs:99:17:99:22 | ... == ... | test.rs:100:17:100:22 | ExprStmt | true | -| test.rs:99:22:99:22 | j | test.rs:99:17:99:22 | ... == ... | | -| test.rs:100:17:100:21 | BreakExpr | test.rs:98:9:103:9 | ForExpr | break | -| test.rs:100:17:100:22 | ExprStmt | test.rs:100:17:100:21 | BreakExpr | | -| test.rs:102:13:102:13 | 1 | test.rs:98:24:103:9 | BlockExpr | | -| test.rs:102:13:102:14 | ExprStmt | test.rs:102:13:102:13 | 1 | | -| test.rs:106:5:110:5 | enter break_with_return | test.rs:108:13:108:27 | ExprStmt | | -| test.rs:106:5:110:5 | exit break_with_return (normal) | test.rs:106:5:110:5 | exit break_with_return | | -| test.rs:108:13:108:27 | ExprStmt | test.rs:108:26:108:26 | 1 | | -| test.rs:108:19:108:26 | ReturnExpr | test.rs:106:5:110:5 | exit break_with_return (normal) | return | -| test.rs:108:26:108:26 | 1 | test.rs:108:19:108:26 | ReturnExpr | | -| test.rs:113:1:116:1 | enter test_nested_function | test.rs:113:25:113:25 | n | | -| test.rs:113:1:116:1 | exit test_nested_function (normal) | test.rs:113:1:116:1 | exit test_nested_function | | -| test.rs:113:25:113:25 | n | test.rs:113:25:113:30 | Param | match | -| test.rs:113:25:113:30 | Param | test.rs:114:5:114:28 | LetStmt | | -| test.rs:113:40:116:1 | BlockExpr | test.rs:113:1:116:1 | exit test_nested_function (normal) | | -| test.rs:114:5:114:28 | LetStmt | test.rs:114:19:114:27 | ClosureExpr | | -| test.rs:114:9:114:15 | add_one | test.rs:115:5:115:11 | add_one | match | -| test.rs:114:19:114:27 | ClosureExpr | test.rs:114:9:114:15 | add_one | | -| test.rs:114:19:114:27 | enter ClosureExpr | test.rs:114:20:114:20 | i | | -| test.rs:114:19:114:27 | exit ClosureExpr (normal) | test.rs:114:19:114:27 | exit ClosureExpr | | -| test.rs:114:20:114:20 | Param | test.rs:114:23:114:23 | i | | -| test.rs:114:20:114:20 | i | test.rs:114:20:114:20 | Param | match | -| test.rs:114:23:114:23 | i | test.rs:114:27:114:27 | 1 | | -| test.rs:114:23:114:27 | ... + ... | test.rs:114:19:114:27 | exit ClosureExpr (normal) | | -| test.rs:114:27:114:27 | 1 | test.rs:114:23:114:27 | ... + ... | | -| test.rs:115:5:115:11 | add_one | test.rs:115:13:115:19 | add_one | | -| test.rs:115:5:115:23 | CallExpr | test.rs:113:40:116:1 | BlockExpr | | -| test.rs:115:13:115:19 | add_one | test.rs:115:21:115:21 | n | | -| test.rs:115:13:115:22 | CallExpr | test.rs:115:5:115:23 | CallExpr | | -| test.rs:115:21:115:21 | n | test.rs:115:13:115:22 | CallExpr | | -| test.rs:120:5:126:5 | enter test_if_else | test.rs:120:21:120:21 | n | | -| test.rs:120:5:126:5 | exit test_if_else (normal) | test.rs:120:5:126:5 | exit test_if_else | | -| test.rs:120:21:120:21 | n | test.rs:120:21:120:26 | Param | match | -| test.rs:120:21:120:26 | Param | test.rs:121:12:121:12 | n | | -| test.rs:120:36:126:5 | BlockExpr | test.rs:120:5:126:5 | exit test_if_else (normal) | | -| test.rs:121:9:125:9 | IfExpr | test.rs:120:36:126:5 | BlockExpr | | -| test.rs:121:12:121:12 | n | test.rs:121:17:121:17 | 0 | | -| test.rs:121:12:121:17 | ... <= ... | test.rs:122:13:122:13 | 0 | true | -| test.rs:121:12:121:17 | ... <= ... | test.rs:124:13:124:13 | n | false | -| test.rs:121:17:121:17 | 0 | test.rs:121:12:121:17 | ... <= ... | | -| test.rs:121:19:123:9 | BlockExpr | test.rs:121:9:125:9 | IfExpr | | -| test.rs:122:13:122:13 | 0 | test.rs:121:19:123:9 | BlockExpr | | -| test.rs:123:16:125:9 | BlockExpr | test.rs:121:9:125:9 | IfExpr | | -| test.rs:124:13:124:13 | n | test.rs:124:17:124:17 | 1 | | -| test.rs:124:13:124:17 | ... - ... | test.rs:123:16:125:9 | BlockExpr | | -| test.rs:124:17:124:17 | 1 | test.rs:124:13:124:17 | ... - ... | | -| test.rs:128:5:134:5 | enter test_if_let_else | test.rs:128:25:128:25 | a | | -| test.rs:128:5:134:5 | exit test_if_let_else (normal) | test.rs:128:5:134:5 | exit test_if_let_else | | -| test.rs:128:25:128:25 | a | test.rs:128:25:128:38 | Param | match | -| test.rs:128:25:128:38 | Param | test.rs:129:12:129:26 | LetExpr | | -| test.rs:128:48:134:5 | BlockExpr | test.rs:128:5:134:5 | exit test_if_let_else (normal) | | -| test.rs:129:9:133:9 | IfExpr | test.rs:128:48:134:5 | BlockExpr | | -| test.rs:129:12:129:26 | LetExpr | test.rs:129:26:129:26 | a | | -| test.rs:129:16:129:22 | TupleStructPat | test.rs:129:21:129:21 | n | match | -| test.rs:129:16:129:22 | TupleStructPat | test.rs:132:13:132:13 | 0 | no-match | -| test.rs:129:21:129:21 | n | test.rs:130:13:130:13 | n | match | -| test.rs:129:26:129:26 | a | test.rs:129:16:129:22 | TupleStructPat | | -| test.rs:129:28:131:9 | BlockExpr | test.rs:129:9:133:9 | IfExpr | | -| test.rs:130:13:130:13 | n | test.rs:129:28:131:9 | BlockExpr | | -| test.rs:131:16:133:9 | BlockExpr | test.rs:129:9:133:9 | IfExpr | | -| test.rs:132:13:132:13 | 0 | test.rs:131:16:133:9 | BlockExpr | | -| test.rs:136:5:141:5 | enter test_if_let | test.rs:136:20:136:20 | a | | -| test.rs:136:5:141:5 | exit test_if_let (normal) | test.rs:136:5:141:5 | exit test_if_let | | -| test.rs:136:20:136:20 | a | test.rs:136:20:136:33 | Param | match | -| test.rs:136:20:136:33 | Param | test.rs:137:9:139:9 | ExprStmt | | -| test.rs:136:43:141:5 | BlockExpr | test.rs:136:5:141:5 | exit test_if_let (normal) | | -| test.rs:137:9:139:9 | ExprStmt | test.rs:137:12:137:26 | LetExpr | | -| test.rs:137:9:139:9 | IfExpr | test.rs:140:9:140:9 | 0 | | -| test.rs:137:12:137:26 | LetExpr | test.rs:137:26:137:26 | a | | -| test.rs:137:16:137:22 | TupleStructPat | test.rs:137:9:139:9 | IfExpr | no-match | -| test.rs:137:16:137:22 | TupleStructPat | test.rs:137:21:137:21 | n | match | -| test.rs:137:21:137:21 | n | test.rs:138:13:138:13 | n | match | -| test.rs:137:26:137:26 | a | test.rs:137:16:137:22 | TupleStructPat | | -| test.rs:137:28:139:9 | BlockExpr | test.rs:137:9:139:9 | IfExpr | | -| test.rs:138:13:138:13 | n | test.rs:137:28:139:9 | BlockExpr | | -| test.rs:140:9:140:9 | 0 | test.rs:136:43:141:5 | BlockExpr | | -| test.rs:143:5:149:5 | enter test_nested_if | test.rs:143:23:143:23 | a | | -| test.rs:143:5:149:5 | exit test_nested_if (normal) | test.rs:143:5:149:5 | exit test_nested_if | | -| test.rs:143:23:143:23 | a | test.rs:143:23:143:28 | Param | match | -| test.rs:143:23:143:28 | Param | test.rs:144:16:144:16 | a | | -| test.rs:143:38:149:5 | BlockExpr | test.rs:143:5:149:5 | exit test_nested_if (normal) | | -| test.rs:144:9:148:9 | IfExpr | test.rs:143:38:149:5 | BlockExpr | | -| test.rs:144:13:144:48 | [boolean(false)] IfExpr | test.rs:147:13:147:13 | 0 | false | -| test.rs:144:13:144:48 | [boolean(true)] IfExpr | test.rs:145:13:145:13 | 1 | true | -| test.rs:144:16:144:16 | a | test.rs:144:20:144:20 | 0 | | -| test.rs:144:16:144:20 | ... < ... | test.rs:144:24:144:24 | a | true | -| test.rs:144:16:144:20 | ... < ... | test.rs:144:41:144:41 | a | false | -| test.rs:144:20:144:20 | 0 | test.rs:144:16:144:20 | ... < ... | | -| test.rs:144:22:144:32 | [boolean(false)] BlockExpr | test.rs:144:13:144:48 | [boolean(false)] IfExpr | false | -| test.rs:144:22:144:32 | [boolean(true)] BlockExpr | test.rs:144:13:144:48 | [boolean(true)] IfExpr | true | -| test.rs:144:24:144:24 | a | test.rs:144:29:144:30 | 10 | | -| test.rs:144:24:144:30 | ... < ... | test.rs:144:22:144:32 | [boolean(false)] BlockExpr | false | -| test.rs:144:24:144:30 | ... < ... | test.rs:144:22:144:32 | [boolean(true)] BlockExpr | true | -| test.rs:144:28:144:30 | - ... | test.rs:144:24:144:30 | ... < ... | | -| test.rs:144:29:144:30 | 10 | test.rs:144:28:144:30 | - ... | | -| test.rs:144:39:144:48 | [boolean(false)] BlockExpr | test.rs:144:13:144:48 | [boolean(false)] IfExpr | false | -| test.rs:144:39:144:48 | [boolean(true)] BlockExpr | test.rs:144:13:144:48 | [boolean(true)] IfExpr | true | -| test.rs:144:41:144:41 | a | test.rs:144:45:144:46 | 10 | | -| test.rs:144:41:144:46 | ... > ... | test.rs:144:39:144:48 | [boolean(false)] BlockExpr | false | -| test.rs:144:41:144:46 | ... > ... | test.rs:144:39:144:48 | [boolean(true)] BlockExpr | true | -| test.rs:144:45:144:46 | 10 | test.rs:144:41:144:46 | ... > ... | | -| test.rs:144:51:146:9 | BlockExpr | test.rs:144:9:148:9 | IfExpr | | -| test.rs:145:13:145:13 | 1 | test.rs:144:51:146:9 | BlockExpr | | -| test.rs:146:16:148:9 | BlockExpr | test.rs:144:9:148:9 | IfExpr | | -| test.rs:147:13:147:13 | 0 | test.rs:146:16:148:9 | BlockExpr | | -| test.rs:151:5:160:5 | enter test_nested_if_match | test.rs:151:29:151:29 | a | | -| test.rs:151:5:160:5 | exit test_nested_if_match (normal) | test.rs:151:5:160:5 | exit test_nested_if_match | | -| test.rs:151:29:151:29 | a | test.rs:151:29:151:34 | Param | match | -| test.rs:151:29:151:34 | Param | test.rs:152:19:152:19 | a | | -| test.rs:151:44:160:5 | BlockExpr | test.rs:151:5:160:5 | exit test_nested_if_match (normal) | | -| test.rs:152:9:159:9 | IfExpr | test.rs:151:44:160:5 | BlockExpr | | -| test.rs:152:13:155:9 | [boolean(false)] MatchExpr | test.rs:158:13:158:13 | 0 | false | -| test.rs:152:13:155:9 | [boolean(true)] MatchExpr | test.rs:156:13:156:13 | 1 | true | -| test.rs:152:19:152:19 | a | test.rs:153:13:153:13 | LiteralPat | | -| test.rs:153:13:153:13 | LiteralPat | test.rs:153:18:153:21 | true | match | -| test.rs:153:13:153:13 | LiteralPat | test.rs:154:13:154:13 | WildcardPat | no-match | -| test.rs:153:18:153:21 | true | test.rs:152:13:155:9 | [boolean(true)] MatchExpr | true | -| test.rs:154:13:154:13 | WildcardPat | test.rs:154:18:154:22 | false | match | -| test.rs:154:18:154:22 | false | test.rs:152:13:155:9 | [boolean(false)] MatchExpr | false | -| test.rs:155:12:157:9 | BlockExpr | test.rs:152:9:159:9 | IfExpr | | -| test.rs:156:13:156:13 | 1 | test.rs:155:12:157:9 | BlockExpr | | -| test.rs:157:16:159:9 | BlockExpr | test.rs:152:9:159:9 | IfExpr | | -| test.rs:158:13:158:13 | 0 | test.rs:157:16:159:9 | BlockExpr | | -| test.rs:162:5:171:5 | enter test_nested_if_block | test.rs:162:29:162:29 | a | | -| test.rs:162:5:171:5 | exit test_nested_if_block (normal) | test.rs:162:5:171:5 | exit test_nested_if_block | | -| test.rs:162:29:162:29 | a | test.rs:162:29:162:34 | Param | match | -| test.rs:162:29:162:34 | Param | test.rs:164:13:164:15 | ExprStmt | | -| test.rs:162:44:171:5 | BlockExpr | test.rs:162:5:171:5 | exit test_nested_if_block (normal) | | -| test.rs:163:9:170:9 | IfExpr | test.rs:162:44:171:5 | BlockExpr | | -| test.rs:163:12:166:9 | [boolean(false)] BlockExpr | test.rs:169:13:169:13 | 0 | false | -| test.rs:163:12:166:9 | [boolean(true)] BlockExpr | test.rs:167:13:167:13 | 1 | true | -| test.rs:164:13:164:14 | TupleExpr | test.rs:165:13:165:13 | a | | -| test.rs:164:13:164:15 | ExprStmt | test.rs:164:13:164:14 | TupleExpr | | -| test.rs:165:13:165:13 | a | test.rs:165:17:165:17 | 0 | | -| test.rs:165:13:165:17 | ... > ... | test.rs:163:12:166:9 | [boolean(false)] BlockExpr | false | -| test.rs:165:13:165:17 | ... > ... | test.rs:163:12:166:9 | [boolean(true)] BlockExpr | true | -| test.rs:165:17:165:17 | 0 | test.rs:165:13:165:17 | ... > ... | | -| test.rs:166:11:168:9 | BlockExpr | test.rs:163:9:170:9 | IfExpr | | -| test.rs:167:13:167:13 | 1 | test.rs:166:11:168:9 | BlockExpr | | -| test.rs:168:16:170:9 | BlockExpr | test.rs:163:9:170:9 | IfExpr | | -| test.rs:169:13:169:13 | 0 | test.rs:168:16:170:9 | BlockExpr | | -| test.rs:173:5:180:5 | enter test_if_assignment | test.rs:173:27:173:27 | a | | -| test.rs:173:5:180:5 | exit test_if_assignment (normal) | test.rs:173:5:180:5 | exit test_if_assignment | | -| test.rs:173:27:173:27 | a | test.rs:173:27:173:32 | Param | match | -| test.rs:173:27:173:32 | Param | test.rs:174:9:174:26 | LetStmt | | -| test.rs:173:42:180:5 | BlockExpr | test.rs:173:5:180:5 | exit test_if_assignment (normal) | | -| test.rs:174:9:174:26 | LetStmt | test.rs:174:21:174:25 | false | | -| test.rs:174:13:174:17 | x | test.rs:175:12:175:12 | x | match | -| test.rs:174:21:174:25 | false | test.rs:174:13:174:17 | x | | -| test.rs:175:9:179:9 | IfExpr | test.rs:173:42:180:5 | BlockExpr | | -| test.rs:175:12:175:12 | x | test.rs:175:16:175:19 | true | | -| test.rs:175:12:175:19 | ... = ... | test.rs:176:13:176:13 | 1 | true | -| test.rs:175:12:175:19 | ... = ... | test.rs:178:13:178:13 | 0 | false | -| test.rs:175:16:175:19 | true | test.rs:175:12:175:19 | ... = ... | | -| test.rs:175:21:177:9 | BlockExpr | test.rs:175:9:179:9 | IfExpr | | -| test.rs:176:13:176:13 | 1 | test.rs:175:21:177:9 | BlockExpr | | -| test.rs:177:16:179:9 | BlockExpr | test.rs:175:9:179:9 | IfExpr | | -| test.rs:178:13:178:13 | 0 | test.rs:177:16:179:9 | BlockExpr | | -| test.rs:182:5:193:5 | enter test_if_loop1 | test.rs:182:22:182:22 | a | | -| test.rs:182:5:193:5 | exit test_if_loop1 (normal) | test.rs:182:5:193:5 | exit test_if_loop1 | | -| test.rs:182:22:182:22 | a | test.rs:182:22:182:27 | Param | match | -| test.rs:182:22:182:27 | Param | test.rs:184:13:186:14 | ExprStmt | | -| test.rs:182:37:193:5 | BlockExpr | test.rs:182:5:193:5 | exit test_if_loop1 (normal) | | -| test.rs:183:9:192:9 | IfExpr | test.rs:182:37:193:5 | BlockExpr | | -| test.rs:183:13:188:9 | [boolean(false)] LoopExpr | test.rs:191:13:191:13 | 0 | false | -| test.rs:183:13:188:9 | [boolean(true)] LoopExpr | test.rs:189:13:189:13 | 1 | true | -| test.rs:183:18:188:9 | BlockExpr | test.rs:184:13:186:14 | ExprStmt | | -| test.rs:184:13:186:13 | IfExpr | test.rs:187:13:187:19 | ExprStmt | | -| test.rs:184:13:186:14 | ExprStmt | test.rs:184:16:184:16 | a | | -| test.rs:184:16:184:16 | a | test.rs:184:20:184:20 | 0 | | -| test.rs:184:16:184:20 | ... > ... | test.rs:184:13:186:13 | IfExpr | false | -| test.rs:184:16:184:20 | ... > ... | test.rs:185:17:185:29 | ExprStmt | true | -| test.rs:184:20:184:20 | 0 | test.rs:184:16:184:20 | ... > ... | | -| test.rs:185:17:185:28 | [boolean(false)] BreakExpr | test.rs:183:13:188:9 | [boolean(false)] LoopExpr | break | -| test.rs:185:17:185:28 | [boolean(true)] BreakExpr | test.rs:183:13:188:9 | [boolean(true)] LoopExpr | break | -| test.rs:185:17:185:29 | ExprStmt | test.rs:185:23:185:23 | a | | -| test.rs:185:23:185:23 | a | test.rs:185:27:185:28 | 10 | | -| test.rs:185:23:185:28 | ... > ... | test.rs:185:17:185:28 | [boolean(false)] BreakExpr | false | -| test.rs:185:23:185:28 | ... > ... | test.rs:185:17:185:28 | [boolean(true)] BreakExpr | true | -| test.rs:185:27:185:28 | 10 | test.rs:185:23:185:28 | ... > ... | | -| test.rs:187:13:187:13 | a | test.rs:187:17:187:18 | 10 | | -| test.rs:187:13:187:18 | ... < ... | test.rs:183:18:188:9 | BlockExpr | | -| test.rs:187:13:187:19 | ExprStmt | test.rs:187:13:187:13 | a | | -| test.rs:187:17:187:18 | 10 | test.rs:187:13:187:18 | ... < ... | | -| test.rs:188:12:190:9 | BlockExpr | test.rs:183:9:192:9 | IfExpr | | -| test.rs:189:13:189:13 | 1 | test.rs:188:12:190:9 | BlockExpr | | -| test.rs:190:16:192:9 | BlockExpr | test.rs:183:9:192:9 | IfExpr | | -| test.rs:191:13:191:13 | 0 | test.rs:190:16:192:9 | BlockExpr | | -| test.rs:195:5:206:5 | enter test_if_loop2 | test.rs:195:22:195:22 | a | | -| test.rs:195:5:206:5 | exit test_if_loop2 (normal) | test.rs:195:5:206:5 | exit test_if_loop2 | | -| test.rs:195:22:195:22 | a | test.rs:195:22:195:27 | Param | match | -| test.rs:195:22:195:27 | Param | test.rs:197:13:199:14 | ExprStmt | | -| test.rs:195:37:206:5 | BlockExpr | test.rs:195:5:206:5 | exit test_if_loop2 (normal) | | -| test.rs:196:9:205:9 | IfExpr | test.rs:195:37:206:5 | BlockExpr | | -| test.rs:196:13:201:9 | [boolean(false)] LoopExpr | test.rs:204:13:204:13 | 0 | false | -| test.rs:196:13:201:9 | [boolean(true)] LoopExpr | test.rs:202:13:202:13 | 1 | true | -| test.rs:196:26:201:9 | BlockExpr | test.rs:197:13:199:14 | ExprStmt | | -| test.rs:197:13:199:13 | IfExpr | test.rs:200:13:200:19 | ExprStmt | | -| test.rs:197:13:199:14 | ExprStmt | test.rs:197:16:197:16 | a | | -| test.rs:197:16:197:16 | a | test.rs:197:20:197:20 | 0 | | -| test.rs:197:16:197:20 | ... > ... | test.rs:197:13:199:13 | IfExpr | false | -| test.rs:197:16:197:20 | ... > ... | test.rs:198:17:198:36 | ExprStmt | true | -| test.rs:197:20:197:20 | 0 | test.rs:197:16:197:20 | ... > ... | | -| test.rs:198:17:198:35 | [boolean(false)] BreakExpr | test.rs:196:13:201:9 | [boolean(false)] LoopExpr | break | -| test.rs:198:17:198:35 | [boolean(true)] BreakExpr | test.rs:196:13:201:9 | [boolean(true)] LoopExpr | break | -| test.rs:198:17:198:36 | ExprStmt | test.rs:198:30:198:30 | a | | -| test.rs:198:30:198:30 | a | test.rs:198:34:198:35 | 10 | | -| test.rs:198:30:198:35 | ... > ... | test.rs:198:17:198:35 | [boolean(false)] BreakExpr | false | -| test.rs:198:30:198:35 | ... > ... | test.rs:198:17:198:35 | [boolean(true)] BreakExpr | true | -| test.rs:198:34:198:35 | 10 | test.rs:198:30:198:35 | ... > ... | | -| test.rs:200:13:200:13 | a | test.rs:200:17:200:18 | 10 | | -| test.rs:200:13:200:18 | ... < ... | test.rs:196:26:201:9 | BlockExpr | | -| test.rs:200:13:200:19 | ExprStmt | test.rs:200:13:200:13 | a | | -| test.rs:200:17:200:18 | 10 | test.rs:200:13:200:18 | ... < ... | | -| test.rs:201:12:203:9 | BlockExpr | test.rs:196:9:205:9 | IfExpr | | -| test.rs:202:13:202:13 | 1 | test.rs:201:12:203:9 | BlockExpr | | -| test.rs:203:16:205:9 | BlockExpr | test.rs:196:9:205:9 | IfExpr | | -| test.rs:204:13:204:13 | 0 | test.rs:203:16:205:9 | BlockExpr | | -| test.rs:208:5:216:5 | enter test_labelled_block | test.rs:208:28:208:28 | a | | -| test.rs:208:5:216:5 | exit test_labelled_block (normal) | test.rs:208:5:216:5 | exit test_labelled_block | | -| test.rs:208:28:208:28 | a | test.rs:208:28:208:33 | Param | match | -| test.rs:208:28:208:33 | Param | test.rs:210:13:210:31 | ExprStmt | | -| test.rs:208:43:216:5 | BlockExpr | test.rs:208:5:216:5 | exit test_labelled_block (normal) | | -| test.rs:209:9:215:9 | IfExpr | test.rs:208:43:216:5 | BlockExpr | | -| test.rs:209:13:211:9 | [boolean(false)] BlockExpr | test.rs:214:13:214:13 | 0 | false | -| test.rs:209:13:211:9 | [boolean(true)] BlockExpr | test.rs:212:13:212:13 | 1 | true | -| test.rs:210:13:210:30 | [boolean(false)] BreakExpr | test.rs:209:13:211:9 | [boolean(false)] BlockExpr | break | -| test.rs:210:13:210:30 | [boolean(true)] BreakExpr | test.rs:209:13:211:9 | [boolean(true)] BlockExpr | break | -| test.rs:210:13:210:31 | ExprStmt | test.rs:210:26:210:26 | a | | -| test.rs:210:26:210:26 | a | test.rs:210:30:210:30 | 0 | | -| test.rs:210:26:210:30 | ... > ... | test.rs:210:13:210:30 | [boolean(false)] BreakExpr | false | -| test.rs:210:26:210:30 | ... > ... | test.rs:210:13:210:30 | [boolean(true)] BreakExpr | true | -| test.rs:210:30:210:30 | 0 | test.rs:210:26:210:30 | ... > ... | | -| test.rs:211:12:213:9 | BlockExpr | test.rs:209:9:215:9 | IfExpr | | -| test.rs:212:13:212:13 | 1 | test.rs:211:12:213:9 | BlockExpr | | -| test.rs:213:16:215:9 | BlockExpr | test.rs:209:9:215:9 | IfExpr | | -| test.rs:214:13:214:13 | 0 | test.rs:213:16:215:9 | BlockExpr | | -| test.rs:221:5:224:5 | enter test_and_operator | test.rs:221:26:221:26 | a | | -| test.rs:221:5:224:5 | exit test_and_operator (normal) | test.rs:221:5:224:5 | exit test_and_operator | | -| test.rs:221:26:221:26 | a | test.rs:221:26:221:32 | Param | match | -| test.rs:221:26:221:32 | Param | test.rs:221:35:221:35 | b | | -| test.rs:221:35:221:35 | b | test.rs:221:35:221:41 | Param | match | -| test.rs:221:35:221:41 | Param | test.rs:221:44:221:44 | c | | -| test.rs:221:44:221:44 | c | test.rs:221:44:221:50 | Param | match | -| test.rs:221:44:221:50 | Param | test.rs:222:9:222:28 | LetStmt | | -| test.rs:221:61:224:5 | BlockExpr | test.rs:221:5:224:5 | exit test_and_operator (normal) | | -| test.rs:222:9:222:28 | LetStmt | test.rs:222:17:222:17 | a | | -| test.rs:222:13:222:13 | d | test.rs:223:9:223:9 | d | match | -| test.rs:222:17:222:17 | a | test.rs:222:17:222:22 | [boolean(false)] ... && ... | false | -| test.rs:222:17:222:17 | a | test.rs:222:22:222:22 | b | true | -| test.rs:222:17:222:22 | [boolean(false)] ... && ... | test.rs:222:17:222:27 | ... && ... | false | -| test.rs:222:17:222:22 | [boolean(true)] ... && ... | test.rs:222:27:222:27 | c | true | -| test.rs:222:17:222:27 | ... && ... | test.rs:222:13:222:13 | d | | -| test.rs:222:22:222:22 | b | test.rs:222:17:222:22 | [boolean(false)] ... && ... | false | -| test.rs:222:22:222:22 | b | test.rs:222:17:222:22 | [boolean(true)] ... && ... | true | -| test.rs:222:27:222:27 | c | test.rs:222:17:222:27 | ... && ... | | -| test.rs:223:9:223:9 | d | test.rs:221:61:224:5 | BlockExpr | | -| test.rs:226:5:229:5 | enter test_or_operator | test.rs:226:25:226:25 | a | | -| test.rs:226:5:229:5 | exit test_or_operator (normal) | test.rs:226:5:229:5 | exit test_or_operator | | -| test.rs:226:25:226:25 | a | test.rs:226:25:226:31 | Param | match | -| test.rs:226:25:226:31 | Param | test.rs:226:34:226:34 | b | | -| test.rs:226:34:226:34 | b | test.rs:226:34:226:40 | Param | match | -| test.rs:226:34:226:40 | Param | test.rs:226:43:226:43 | c | | -| test.rs:226:43:226:43 | c | test.rs:226:43:226:49 | Param | match | -| test.rs:226:43:226:49 | Param | test.rs:227:9:227:28 | LetStmt | | -| test.rs:226:60:229:5 | BlockExpr | test.rs:226:5:229:5 | exit test_or_operator (normal) | | -| test.rs:227:9:227:28 | LetStmt | test.rs:227:17:227:17 | a | | -| test.rs:227:13:227:13 | d | test.rs:228:9:228:9 | d | match | -| test.rs:227:17:227:17 | a | test.rs:227:17:227:22 | [boolean(true)] ... \|\| ... | true | -| test.rs:227:17:227:17 | a | test.rs:227:22:227:22 | b | false | -| test.rs:227:17:227:22 | [boolean(false)] ... \|\| ... | test.rs:227:27:227:27 | c | false | -| test.rs:227:17:227:22 | [boolean(true)] ... \|\| ... | test.rs:227:17:227:27 | ... \|\| ... | true | -| test.rs:227:17:227:27 | ... \|\| ... | test.rs:227:13:227:13 | d | | -| test.rs:227:22:227:22 | b | test.rs:227:17:227:22 | [boolean(false)] ... \|\| ... | false | -| test.rs:227:22:227:22 | b | test.rs:227:17:227:22 | [boolean(true)] ... \|\| ... | true | -| test.rs:227:27:227:27 | c | test.rs:227:17:227:27 | ... \|\| ... | | -| test.rs:228:9:228:9 | d | test.rs:226:60:229:5 | BlockExpr | | -| test.rs:231:5:234:5 | enter test_or_operator_2 | test.rs:231:27:231:27 | a | | -| test.rs:231:5:234:5 | exit test_or_operator_2 (normal) | test.rs:231:5:234:5 | exit test_or_operator_2 | | -| test.rs:231:27:231:27 | a | test.rs:231:27:231:33 | Param | match | -| test.rs:231:27:231:33 | Param | test.rs:231:36:231:36 | b | | -| test.rs:231:36:231:36 | b | test.rs:231:36:231:41 | Param | match | -| test.rs:231:36:231:41 | Param | test.rs:231:44:231:44 | c | | -| test.rs:231:44:231:44 | c | test.rs:231:44:231:50 | Param | match | -| test.rs:231:44:231:50 | Param | test.rs:232:9:232:36 | LetStmt | | -| test.rs:231:61:234:5 | BlockExpr | test.rs:231:5:234:5 | exit test_or_operator_2 (normal) | | -| test.rs:232:9:232:36 | LetStmt | test.rs:232:17:232:17 | a | | -| test.rs:232:13:232:13 | d | test.rs:233:9:233:9 | d | match | -| test.rs:232:17:232:17 | a | test.rs:232:17:232:30 | [boolean(true)] ... \|\| ... | true | -| test.rs:232:17:232:17 | a | test.rs:232:23:232:23 | b | false | -| test.rs:232:17:232:30 | [boolean(false)] ... \|\| ... | test.rs:232:35:232:35 | c | false | -| test.rs:232:17:232:30 | [boolean(true)] ... \|\| ... | test.rs:232:17:232:35 | ... \|\| ... | true | -| test.rs:232:17:232:35 | ... \|\| ... | test.rs:232:13:232:13 | d | | -| test.rs:232:23:232:23 | b | test.rs:232:28:232:29 | 28 | | -| test.rs:232:23:232:29 | ... == ... | test.rs:232:17:232:30 | [boolean(false)] ... \|\| ... | false | -| test.rs:232:23:232:29 | ... == ... | test.rs:232:17:232:30 | [boolean(true)] ... \|\| ... | true | -| test.rs:232:28:232:29 | 28 | test.rs:232:23:232:29 | ... == ... | | -| test.rs:232:35:232:35 | c | test.rs:232:17:232:35 | ... \|\| ... | | -| test.rs:233:9:233:9 | d | test.rs:231:61:234:5 | BlockExpr | | -| test.rs:236:5:239:5 | enter test_not_operator | test.rs:236:26:236:26 | a | | -| test.rs:236:5:239:5 | exit test_not_operator (normal) | test.rs:236:5:239:5 | exit test_not_operator | | -| test.rs:236:26:236:26 | a | test.rs:236:26:236:32 | Param | match | -| test.rs:236:26:236:32 | Param | test.rs:237:9:237:19 | LetStmt | | -| test.rs:236:43:239:5 | BlockExpr | test.rs:236:5:239:5 | exit test_not_operator (normal) | | -| test.rs:237:9:237:19 | LetStmt | test.rs:237:18:237:18 | a | | -| test.rs:237:13:237:13 | d | test.rs:238:9:238:9 | d | match | -| test.rs:237:17:237:18 | ! ... | test.rs:237:13:237:13 | d | | -| test.rs:237:18:237:18 | a | test.rs:237:17:237:18 | ! ... | | -| test.rs:238:9:238:9 | d | test.rs:236:43:239:5 | BlockExpr | | -| test.rs:241:5:247:5 | enter test_if_and_operator | test.rs:241:29:241:29 | a | | -| test.rs:241:5:247:5 | exit test_if_and_operator (normal) | test.rs:241:5:247:5 | exit test_if_and_operator | | -| test.rs:241:29:241:29 | a | test.rs:241:29:241:35 | Param | match | -| test.rs:241:29:241:35 | Param | test.rs:241:38:241:38 | b | | -| test.rs:241:38:241:38 | b | test.rs:241:38:241:43 | Param | match | -| test.rs:241:38:241:43 | Param | test.rs:241:46:241:46 | c | | -| test.rs:241:46:241:46 | c | test.rs:241:46:241:52 | Param | match | -| test.rs:241:46:241:52 | Param | test.rs:242:12:242:12 | a | | -| test.rs:241:63:247:5 | BlockExpr | test.rs:241:5:247:5 | exit test_if_and_operator (normal) | | -| test.rs:242:9:246:9 | IfExpr | test.rs:241:63:247:5 | BlockExpr | | -| test.rs:242:12:242:12 | a | test.rs:242:12:242:17 | [boolean(false)] ... && ... | false | -| test.rs:242:12:242:12 | a | test.rs:242:17:242:17 | b | true | -| test.rs:242:12:242:17 | [boolean(false)] ... && ... | test.rs:242:12:242:22 | [boolean(false)] ... && ... | false | -| test.rs:242:12:242:17 | [boolean(true)] ... && ... | test.rs:242:22:242:22 | c | true | -| test.rs:242:12:242:22 | [boolean(false)] ... && ... | test.rs:245:13:245:17 | false | false | -| test.rs:242:12:242:22 | [boolean(true)] ... && ... | test.rs:243:13:243:16 | true | true | -| test.rs:242:17:242:17 | b | test.rs:242:12:242:17 | [boolean(false)] ... && ... | false | -| test.rs:242:17:242:17 | b | test.rs:242:12:242:17 | [boolean(true)] ... && ... | true | -| test.rs:242:22:242:22 | c | test.rs:242:12:242:22 | [boolean(false)] ... && ... | false | -| test.rs:242:22:242:22 | c | test.rs:242:12:242:22 | [boolean(true)] ... && ... | true | -| test.rs:242:24:244:9 | BlockExpr | test.rs:242:9:246:9 | IfExpr | | -| test.rs:243:13:243:16 | true | test.rs:242:24:244:9 | BlockExpr | | -| test.rs:244:16:246:9 | BlockExpr | test.rs:242:9:246:9 | IfExpr | | -| test.rs:245:13:245:17 | false | test.rs:244:16:246:9 | BlockExpr | | -| test.rs:249:5:255:5 | enter test_if_or_operator | test.rs:249:28:249:28 | a | | -| test.rs:249:5:255:5 | exit test_if_or_operator (normal) | test.rs:249:5:255:5 | exit test_if_or_operator | | -| test.rs:249:28:249:28 | a | test.rs:249:28:249:34 | Param | match | -| test.rs:249:28:249:34 | Param | test.rs:249:37:249:37 | b | | -| test.rs:249:37:249:37 | b | test.rs:249:37:249:42 | Param | match | -| test.rs:249:37:249:42 | Param | test.rs:249:45:249:45 | c | | -| test.rs:249:45:249:45 | c | test.rs:249:45:249:51 | Param | match | -| test.rs:249:45:249:51 | Param | test.rs:250:12:250:12 | a | | -| test.rs:249:62:255:5 | BlockExpr | test.rs:249:5:255:5 | exit test_if_or_operator (normal) | | -| test.rs:250:9:254:9 | IfExpr | test.rs:249:62:255:5 | BlockExpr | | -| test.rs:250:12:250:12 | a | test.rs:250:12:250:17 | [boolean(true)] ... \|\| ... | true | -| test.rs:250:12:250:12 | a | test.rs:250:17:250:17 | b | false | -| test.rs:250:12:250:17 | [boolean(false)] ... \|\| ... | test.rs:250:22:250:22 | c | false | -| test.rs:250:12:250:17 | [boolean(true)] ... \|\| ... | test.rs:250:12:250:22 | [boolean(true)] ... \|\| ... | true | -| test.rs:250:12:250:22 | [boolean(false)] ... \|\| ... | test.rs:253:13:253:17 | false | false | -| test.rs:250:12:250:22 | [boolean(true)] ... \|\| ... | test.rs:251:13:251:16 | true | true | -| test.rs:250:17:250:17 | b | test.rs:250:12:250:17 | [boolean(false)] ... \|\| ... | false | -| test.rs:250:17:250:17 | b | test.rs:250:12:250:17 | [boolean(true)] ... \|\| ... | true | -| test.rs:250:22:250:22 | c | test.rs:250:12:250:22 | [boolean(false)] ... \|\| ... | false | -| test.rs:250:22:250:22 | c | test.rs:250:12:250:22 | [boolean(true)] ... \|\| ... | true | -| test.rs:250:24:252:9 | BlockExpr | test.rs:250:9:254:9 | IfExpr | | -| test.rs:251:13:251:16 | true | test.rs:250:24:252:9 | BlockExpr | | -| test.rs:252:16:254:9 | BlockExpr | test.rs:250:9:254:9 | IfExpr | | -| test.rs:253:13:253:17 | false | test.rs:252:16:254:9 | BlockExpr | | -| test.rs:257:5:263:5 | enter test_if_not_operator | test.rs:257:29:257:29 | a | | -| test.rs:257:5:263:5 | exit test_if_not_operator (normal) | test.rs:257:5:263:5 | exit test_if_not_operator | | -| test.rs:257:29:257:29 | a | test.rs:257:29:257:35 | Param | match | -| test.rs:257:29:257:35 | Param | test.rs:258:13:258:13 | a | | -| test.rs:257:46:263:5 | BlockExpr | test.rs:257:5:263:5 | exit test_if_not_operator (normal) | | -| test.rs:258:9:262:9 | IfExpr | test.rs:257:46:263:5 | BlockExpr | | -| test.rs:258:12:258:13 | [boolean(false)] ! ... | test.rs:261:13:261:17 | false | false | -| test.rs:258:12:258:13 | [boolean(true)] ! ... | test.rs:259:13:259:16 | true | true | -| test.rs:258:13:258:13 | a | test.rs:258:12:258:13 | [boolean(false)] ! ... | true | -| test.rs:258:13:258:13 | a | test.rs:258:12:258:13 | [boolean(true)] ! ... | false | -| test.rs:258:15:260:9 | BlockExpr | test.rs:258:9:262:9 | IfExpr | | -| test.rs:259:13:259:16 | true | test.rs:258:15:260:9 | BlockExpr | | -| test.rs:260:16:262:9 | BlockExpr | test.rs:258:9:262:9 | IfExpr | | -| test.rs:261:13:261:17 | false | test.rs:260:16:262:9 | BlockExpr | | -| test.rs:268:5:270:5 | enter test_question_mark_operator_1 | test.rs:268:38:268:38 | s | | -| test.rs:268:5:270:5 | exit test_question_mark_operator_1 (normal) | test.rs:268:5:270:5 | exit test_question_mark_operator_1 | | -| test.rs:268:38:268:38 | s | test.rs:268:38:268:44 | Param | match | -| test.rs:268:38:268:44 | Param | test.rs:269:9:269:11 | PathExpr | | -| test.rs:268:62:270:5 | BlockExpr | test.rs:268:5:270:5 | exit test_question_mark_operator_1 (normal) | | -| test.rs:269:9:269:11 | PathExpr | test.rs:269:9:269:26 | MethodCallExpr | | -| test.rs:269:9:269:26 | MethodCallExpr | test.rs:269:9:269:27 | TryExpr | | -| test.rs:269:9:269:27 | TryExpr | test.rs:268:5:270:5 | exit test_question_mark_operator_1 (normal) | return | -| test.rs:269:9:269:27 | TryExpr | test.rs:269:31:269:31 | 4 | match | -| test.rs:269:9:269:31 | ... + ... | test.rs:268:62:270:5 | BlockExpr | | -| test.rs:269:31:269:31 | 4 | test.rs:269:9:269:31 | ... + ... | | -| test.rs:272:5:277:5 | enter test_question_mark_operator_2 | test.rs:272:38:272:38 | b | | -| test.rs:272:5:277:5 | exit test_question_mark_operator_2 (normal) | test.rs:272:5:277:5 | exit test_question_mark_operator_2 | | -| test.rs:272:38:272:38 | b | test.rs:272:38:272:52 | Param | match | -| test.rs:272:38:272:52 | Param | test.rs:273:15:273:15 | b | | -| test.rs:272:71:277:5 | BlockExpr | test.rs:272:5:277:5 | exit test_question_mark_operator_2 (normal) | | -| test.rs:273:9:276:9 | MatchExpr | test.rs:272:71:277:5 | BlockExpr | | -| test.rs:273:15:273:15 | b | test.rs:273:15:273:16 | TryExpr | | -| test.rs:273:15:273:16 | TryExpr | test.rs:272:5:277:5 | exit test_question_mark_operator_2 (normal) | return | -| test.rs:273:15:273:16 | TryExpr | test.rs:274:13:274:16 | LiteralPat | match | -| test.rs:274:13:274:16 | LiteralPat | test.rs:274:21:274:24 | PathExpr | match | -| test.rs:274:13:274:16 | LiteralPat | test.rs:275:13:275:17 | LiteralPat | no-match | -| test.rs:274:21:274:24 | PathExpr | test.rs:274:26:274:30 | false | | -| test.rs:274:21:274:31 | CallExpr | test.rs:273:9:276:9 | MatchExpr | | -| test.rs:274:26:274:30 | false | test.rs:274:21:274:31 | CallExpr | | -| test.rs:275:13:275:17 | LiteralPat | test.rs:275:22:275:25 | PathExpr | match | -| test.rs:275:22:275:25 | PathExpr | test.rs:275:27:275:30 | true | | -| test.rs:275:22:275:31 | CallExpr | test.rs:273:9:276:9 | MatchExpr | | -| test.rs:275:27:275:30 | true | test.rs:275:22:275:31 | CallExpr | | -| test.rs:282:5:288:5 | enter test_match | test.rs:282:19:282:29 | maybe_digit | | -| test.rs:282:5:288:5 | exit test_match (normal) | test.rs:282:5:288:5 | exit test_match | | -| test.rs:282:19:282:29 | maybe_digit | test.rs:282:19:282:42 | Param | match | -| test.rs:282:19:282:42 | Param | test.rs:283:15:283:25 | maybe_digit | | -| test.rs:282:52:288:5 | BlockExpr | test.rs:282:5:288:5 | exit test_match (normal) | | -| test.rs:283:9:287:9 | MatchExpr | test.rs:282:52:288:5 | BlockExpr | | -| test.rs:283:15:283:25 | maybe_digit | test.rs:284:13:284:27 | TupleStructPat | | -| test.rs:284:13:284:27 | TupleStructPat | test.rs:284:26:284:26 | x | match | -| test.rs:284:13:284:27 | TupleStructPat | test.rs:285:13:285:27 | TupleStructPat | no-match | -| test.rs:284:26:284:26 | x | test.rs:284:32:284:32 | x | match | -| test.rs:284:32:284:32 | x | test.rs:284:36:284:37 | 10 | | -| test.rs:284:32:284:37 | ... < ... | test.rs:284:42:284:42 | x | true | -| test.rs:284:32:284:37 | ... < ... | test.rs:285:13:285:27 | TupleStructPat | false | -| test.rs:284:36:284:37 | 10 | test.rs:284:32:284:37 | ... < ... | | -| test.rs:284:42:284:42 | x | test.rs:284:46:284:46 | 5 | | -| test.rs:284:42:284:46 | ... + ... | test.rs:283:9:287:9 | MatchExpr | | -| test.rs:284:46:284:46 | 5 | test.rs:284:42:284:46 | ... + ... | | +| test.rs:5:5:8:5 | enter function_call | test.rs:6:9:6:45 | ExprStmt | | +| test.rs:5:5:8:5 | exit function_call (normal) | test.rs:5:5:8:5 | exit function_call | | +| test.rs:5:24:8:5 | BlockExpr | test.rs:5:5:8:5 | exit function_call (normal) | | +| test.rs:6:9:6:25 | PathExpr | test.rs:6:27:6:30 | true | | +| test.rs:6:9:6:44 | CallExpr | test.rs:7:9:7:28 | ExprStmt | | +| test.rs:6:9:6:45 | ExprStmt | test.rs:6:9:6:25 | PathExpr | | +| test.rs:6:27:6:30 | true | test.rs:6:33:6:37 | false | | +| test.rs:6:33:6:37 | false | test.rs:6:40:6:43 | true | | +| test.rs:6:40:6:43 | true | test.rs:6:9:6:44 | CallExpr | | +| test.rs:7:9:7:23 | PathExpr | test.rs:7:25:7:26 | 42 | | +| test.rs:7:9:7:27 | CallExpr | test.rs:5:24:8:5 | BlockExpr | | +| test.rs:7:9:7:28 | ExprStmt | test.rs:7:9:7:23 | PathExpr | | +| test.rs:7:25:7:26 | 42 | test.rs:7:9:7:27 | CallExpr | | +| test.rs:10:5:13:5 | enter method_call | test.rs:11:9:11:37 | LetStmt | | +| test.rs:10:5:13:5 | exit method_call (normal) | test.rs:10:5:13:5 | exit method_call | | +| test.rs:10:22:13:5 | BlockExpr | test.rs:10:5:13:5 | exit method_call (normal) | | +| test.rs:11:9:11:37 | LetStmt | test.rs:11:23:11:34 | PathExpr | | +| test.rs:11:13:11:19 | map | test.rs:12:9:12:28 | ExprStmt | match | +| test.rs:11:23:11:34 | PathExpr | test.rs:11:23:11:36 | CallExpr | | +| test.rs:11:23:11:36 | CallExpr | test.rs:11:13:11:19 | map | | +| test.rs:12:9:12:11 | map | test.rs:12:20:12:21 | 37 | | +| test.rs:12:9:12:27 | MethodCallExpr | test.rs:10:22:13:5 | BlockExpr | | +| test.rs:12:9:12:28 | ExprStmt | test.rs:12:9:12:11 | map | | +| test.rs:12:20:12:21 | 37 | test.rs:12:24:12:26 | "a" | | +| test.rs:12:24:12:26 | "a" | test.rs:12:9:12:27 | MethodCallExpr | | +| test.rs:18:5:34:5 | enter test_break_and_continue | test.rs:18:32:18:32 | n | | +| test.rs:18:5:34:5 | exit test_break_and_continue (normal) | test.rs:18:5:34:5 | exit test_break_and_continue | | +| test.rs:18:32:18:32 | n | test.rs:18:32:18:37 | Param | match | +| test.rs:18:32:18:37 | Param | test.rs:19:9:19:22 | LetStmt | | +| test.rs:19:9:19:22 | LetStmt | test.rs:19:21:19:21 | n | | +| test.rs:19:13:19:17 | i | test.rs:20:9:32:9 | ExprStmt | match | +| test.rs:19:21:19:21 | n | test.rs:19:13:19:17 | i | | +| test.rs:20:9:32:9 | ExprStmt | test.rs:21:13:21:24 | ExprStmt | | +| test.rs:20:9:32:9 | LoopExpr | test.rs:33:9:33:20 | ExprStmt | | +| test.rs:20:14:32:9 | BlockExpr | test.rs:21:13:21:24 | ExprStmt | | +| test.rs:21:13:21:13 | i | test.rs:21:17:21:20 | PathExpr | | +| test.rs:21:13:21:23 | ... = ... | test.rs:22:13:24:13 | ExprStmt | | +| test.rs:21:13:21:24 | ExprStmt | test.rs:21:13:21:13 | i | | +| test.rs:21:17:21:20 | PathExpr | test.rs:21:22:21:22 | i | | +| test.rs:21:17:21:23 | CallExpr | test.rs:21:13:21:23 | ... = ... | | +| test.rs:21:22:21:22 | i | test.rs:21:17:21:23 | CallExpr | | +| test.rs:22:13:24:13 | ExprStmt | test.rs:22:16:22:16 | i | | +| test.rs:22:13:24:13 | IfExpr | test.rs:25:13:27:13 | ExprStmt | | +| test.rs:22:16:22:16 | i | test.rs:22:20:22:24 | 10000 | | +| test.rs:22:16:22:24 | ... > ... | test.rs:22:13:24:13 | IfExpr | false | +| test.rs:22:16:22:24 | ... > ... | test.rs:23:17:23:29 | ExprStmt | true | +| test.rs:22:20:22:24 | 10000 | test.rs:22:16:22:24 | ... > ... | | +| test.rs:23:17:23:28 | ReturnExpr | test.rs:18:5:34:5 | exit test_break_and_continue (normal) | return | +| test.rs:23:17:23:29 | ExprStmt | test.rs:23:24:23:28 | false | | +| test.rs:23:24:23:28 | false | test.rs:23:17:23:28 | ReturnExpr | | +| test.rs:25:13:27:13 | ExprStmt | test.rs:25:16:25:16 | i | | +| test.rs:25:13:27:13 | IfExpr | test.rs:28:13:30:13 | ExprStmt | | +| test.rs:25:16:25:16 | i | test.rs:25:21:25:21 | 1 | | +| test.rs:25:16:25:21 | ... == ... | test.rs:25:13:27:13 | IfExpr | false | +| test.rs:25:16:25:21 | ... == ... | test.rs:26:17:26:22 | ExprStmt | true | +| test.rs:25:21:25:21 | 1 | test.rs:25:16:25:21 | ... == ... | | +| test.rs:26:17:26:21 | BreakExpr | test.rs:20:9:32:9 | LoopExpr | break | +| test.rs:26:17:26:22 | ExprStmt | test.rs:26:17:26:21 | BreakExpr | | +| test.rs:28:13:30:13 | ExprStmt | test.rs:28:16:28:16 | i | | +| test.rs:28:13:30:13 | IfExpr | test.rs:31:13:31:13 | i | | +| test.rs:28:16:28:16 | i | test.rs:28:20:28:20 | 2 | | +| test.rs:28:16:28:20 | ... % ... | test.rs:28:25:28:25 | 0 | | +| test.rs:28:16:28:25 | ... != ... | test.rs:28:13:30:13 | IfExpr | false | +| test.rs:28:16:28:25 | ... != ... | test.rs:29:17:29:25 | ExprStmt | true | +| test.rs:28:20:28:20 | 2 | test.rs:28:16:28:20 | ... % ... | | +| test.rs:28:25:28:25 | 0 | test.rs:28:16:28:25 | ... != ... | | +| test.rs:29:17:29:24 | ContinueExpr | test.rs:21:13:21:24 | ExprStmt | continue | +| test.rs:29:17:29:25 | ExprStmt | test.rs:29:17:29:24 | ContinueExpr | | +| test.rs:31:13:31:13 | i | test.rs:31:17:31:17 | i | | +| test.rs:31:13:31:21 | ... = ... | test.rs:20:14:32:9 | BlockExpr | | +| test.rs:31:17:31:17 | i | test.rs:31:21:31:21 | 2 | | +| test.rs:31:17:31:21 | ... / ... | test.rs:31:13:31:21 | ... = ... | | +| test.rs:31:21:31:21 | 2 | test.rs:31:17:31:21 | ... / ... | | +| test.rs:33:9:33:19 | ReturnExpr | test.rs:18:5:34:5 | exit test_break_and_continue (normal) | return | +| test.rs:33:9:33:20 | ExprStmt | test.rs:33:16:33:19 | true | | +| test.rs:33:16:33:19 | true | test.rs:33:9:33:19 | ReturnExpr | | +| test.rs:36:5:48:5 | enter test_break_with_labels | test.rs:36:31:36:31 | b | | +| test.rs:36:5:48:5 | exit test_break_with_labels (normal) | test.rs:36:5:48:5 | exit test_break_with_labels | | +| test.rs:36:31:36:31 | b | test.rs:36:31:36:37 | Param | match | +| test.rs:36:31:36:37 | Param | test.rs:37:9:46:9 | ExprStmt | | +| test.rs:36:48:48:5 | BlockExpr | test.rs:36:5:48:5 | exit test_break_with_labels (normal) | | +| test.rs:37:9:46:9 | ExprStmt | test.rs:39:17:43:17 | ExprStmt | | +| test.rs:37:9:46:9 | LoopExpr | test.rs:47:9:47:12 | true | | +| test.rs:37:22:46:9 | BlockExpr | test.rs:39:17:43:17 | ExprStmt | | +| test.rs:38:13:45:13 | LoopExpr | test.rs:37:22:46:9 | BlockExpr | | +| test.rs:39:17:43:17 | ExprStmt | test.rs:39:20:39:20 | b | | +| test.rs:39:17:43:17 | IfExpr | test.rs:44:17:44:29 | ExprStmt | | +| test.rs:39:20:39:20 | b | test.rs:40:21:40:26 | ExprStmt | true | +| test.rs:39:20:39:20 | b | test.rs:41:27:41:27 | b | false | +| test.rs:40:21:40:25 | BreakExpr | test.rs:38:13:45:13 | LoopExpr | break | +| test.rs:40:21:40:26 | ExprStmt | test.rs:40:21:40:25 | BreakExpr | | +| test.rs:41:24:43:17 | IfExpr | test.rs:39:17:43:17 | IfExpr | | +| test.rs:41:27:41:27 | b | test.rs:41:24:43:17 | IfExpr | false | +| test.rs:41:27:41:27 | b | test.rs:42:21:42:33 | ExprStmt | true | +| test.rs:42:21:42:32 | BreakExpr | test.rs:37:9:46:9 | LoopExpr | break | +| test.rs:42:21:42:33 | ExprStmt | test.rs:42:21:42:32 | BreakExpr | | +| test.rs:44:17:44:28 | BreakExpr | test.rs:38:13:45:13 | LoopExpr | break | +| test.rs:44:17:44:29 | ExprStmt | test.rs:44:17:44:28 | BreakExpr | | +| test.rs:47:9:47:12 | true | test.rs:36:48:48:5 | BlockExpr | | +| test.rs:50:5:62:5 | enter test_continue_with_labels | test.rs:50:34:50:34 | b | | +| test.rs:50:34:50:34 | b | test.rs:50:34:50:40 | Param | match | +| test.rs:50:34:50:40 | Param | test.rs:52:13:52:14 | ExprStmt | | +| test.rs:52:13:52:13 | 1 | test.rs:54:17:58:17 | ExprStmt | | +| test.rs:52:13:52:14 | ExprStmt | test.rs:52:13:52:13 | 1 | | +| test.rs:54:17:58:17 | ExprStmt | test.rs:54:20:54:20 | b | | +| test.rs:54:17:58:17 | IfExpr | test.rs:59:17:59:32 | ExprStmt | | +| test.rs:54:20:54:20 | b | test.rs:55:21:55:29 | ExprStmt | true | +| test.rs:54:20:54:20 | b | test.rs:56:27:56:27 | b | false | +| test.rs:55:21:55:28 | ContinueExpr | test.rs:54:17:58:17 | ExprStmt | continue | +| test.rs:55:21:55:29 | ExprStmt | test.rs:55:21:55:28 | ContinueExpr | | +| test.rs:56:24:58:17 | IfExpr | test.rs:54:17:58:17 | IfExpr | | +| test.rs:56:27:56:27 | b | test.rs:56:24:58:17 | IfExpr | false | +| test.rs:56:27:56:27 | b | test.rs:57:21:57:36 | ExprStmt | true | +| test.rs:57:21:57:35 | ContinueExpr | test.rs:52:13:52:14 | ExprStmt | continue | +| test.rs:57:21:57:36 | ExprStmt | test.rs:57:21:57:35 | ContinueExpr | | +| test.rs:59:17:59:31 | ContinueExpr | test.rs:54:17:58:17 | ExprStmt | continue | +| test.rs:59:17:59:32 | ExprStmt | test.rs:59:17:59:31 | ContinueExpr | | +| test.rs:64:5:76:5 | enter test_loop_label_shadowing | test.rs:64:34:64:34 | b | | +| test.rs:64:34:64:34 | b | test.rs:64:34:64:40 | Param | match | +| test.rs:64:34:64:40 | Param | test.rs:66:13:66:14 | ExprStmt | | +| test.rs:66:13:66:13 | 1 | test.rs:68:17:72:17 | ExprStmt | | +| test.rs:66:13:66:14 | ExprStmt | test.rs:66:13:66:13 | 1 | | +| test.rs:68:17:72:17 | ExprStmt | test.rs:68:20:68:20 | b | | +| test.rs:68:17:72:17 | IfExpr | test.rs:73:17:73:31 | ExprStmt | | +| test.rs:68:20:68:20 | b | test.rs:69:21:69:29 | ExprStmt | true | +| test.rs:68:20:68:20 | b | test.rs:70:27:70:27 | b | false | +| test.rs:69:21:69:28 | ContinueExpr | test.rs:68:17:72:17 | ExprStmt | continue | +| test.rs:69:21:69:29 | ExprStmt | test.rs:69:21:69:28 | ContinueExpr | | +| test.rs:70:24:72:17 | IfExpr | test.rs:68:17:72:17 | IfExpr | | +| test.rs:70:27:70:27 | b | test.rs:70:24:72:17 | IfExpr | false | +| test.rs:70:27:70:27 | b | test.rs:71:21:71:35 | ExprStmt | true | +| test.rs:71:21:71:34 | ContinueExpr | test.rs:68:17:72:17 | ExprStmt | continue | +| test.rs:71:21:71:35 | ExprStmt | test.rs:71:21:71:34 | ContinueExpr | | +| test.rs:73:17:73:30 | ContinueExpr | test.rs:68:17:72:17 | ExprStmt | continue | +| test.rs:73:17:73:31 | ExprStmt | test.rs:73:17:73:30 | ContinueExpr | | +| test.rs:78:5:87:5 | enter test_while | test.rs:78:19:78:19 | i | | +| test.rs:78:5:87:5 | exit test_while (normal) | test.rs:78:5:87:5 | exit test_while | | +| test.rs:78:19:78:19 | i | test.rs:78:19:78:24 | Param | match | +| test.rs:78:19:78:24 | Param | test.rs:79:9:79:25 | LetStmt | | +| test.rs:78:27:87:5 | BlockExpr | test.rs:78:5:87:5 | exit test_while (normal) | | +| test.rs:79:9:79:25 | LetStmt | test.rs:79:21:79:24 | true | | +| test.rs:79:13:79:17 | b | test.rs:80:15:80:15 | b | match | +| test.rs:79:21:79:24 | true | test.rs:79:13:79:17 | b | | +| test.rs:80:9:86:9 | WhileExpr | test.rs:78:27:87:5 | BlockExpr | | +| test.rs:80:15:80:15 | b | test.rs:80:9:86:9 | WhileExpr | false | +| test.rs:80:15:80:15 | b | test.rs:81:13:81:14 | ExprStmt | true | +| test.rs:80:17:86:9 | BlockExpr | test.rs:80:15:80:15 | b | | +| test.rs:81:13:81:13 | 1 | test.rs:82:13:84:13 | ExprStmt | | +| test.rs:81:13:81:14 | ExprStmt | test.rs:81:13:81:13 | 1 | | +| test.rs:82:13:84:13 | ExprStmt | test.rs:82:17:82:17 | i | | +| test.rs:82:13:84:13 | IfExpr | test.rs:85:13:85:22 | ExprStmt | | +| test.rs:82:17:82:17 | i | test.rs:82:21:82:21 | 0 | | +| test.rs:82:17:82:21 | ... > ... | test.rs:82:13:84:13 | IfExpr | false | +| test.rs:82:17:82:21 | ... > ... | test.rs:83:17:83:22 | ExprStmt | true | +| test.rs:82:21:82:21 | 0 | test.rs:82:17:82:21 | ... > ... | | +| test.rs:83:17:83:21 | BreakExpr | test.rs:80:9:86:9 | WhileExpr | break | +| test.rs:83:17:83:22 | ExprStmt | test.rs:83:17:83:21 | BreakExpr | | +| test.rs:85:13:85:13 | b | test.rs:85:17:85:21 | false | | +| test.rs:85:13:85:21 | ... = ... | test.rs:80:17:86:9 | BlockExpr | | +| test.rs:85:13:85:22 | ExprStmt | test.rs:85:13:85:13 | b | | +| test.rs:85:17:85:21 | false | test.rs:85:13:85:21 | ... = ... | | +| test.rs:89:5:96:5 | enter test_while_let | test.rs:90:9:90:29 | LetStmt | | +| test.rs:89:5:96:5 | exit test_while_let (normal) | test.rs:89:5:96:5 | exit test_while_let | | +| test.rs:89:25:96:5 | BlockExpr | test.rs:89:5:96:5 | exit test_while_let (normal) | | +| test.rs:90:9:90:29 | LetStmt | test.rs:90:24:90:24 | 1 | | +| test.rs:90:13:90:20 | iter | test.rs:91:15:91:39 | LetExpr | match | +| test.rs:90:24:90:24 | 1 | test.rs:90:27:90:28 | 10 | | +| test.rs:90:24:90:28 | RangeExpr | test.rs:90:13:90:20 | iter | | +| test.rs:90:27:90:28 | 10 | test.rs:90:24:90:28 | RangeExpr | | +| test.rs:91:9:95:9 | WhileExpr | test.rs:89:25:96:5 | BlockExpr | | +| test.rs:91:15:91:39 | LetExpr | test.rs:91:29:91:32 | iter | | +| test.rs:91:19:91:25 | TupleStructPat | test.rs:91:9:95:9 | WhileExpr | no-match | +| test.rs:91:19:91:25 | TupleStructPat | test.rs:91:24:91:24 | x | match | +| test.rs:91:24:91:24 | x | test.rs:92:17:92:17 | PathExpr | match | +| test.rs:91:29:91:32 | iter | test.rs:91:29:91:39 | MethodCallExpr | | +| test.rs:91:29:91:39 | MethodCallExpr | test.rs:91:19:91:25 | TupleStructPat | | +| test.rs:91:41:95:9 | BlockExpr | test.rs:91:15:91:39 | LetExpr | | +| test.rs:92:13:94:13 | IfExpr | test.rs:91:41:95:9 | BlockExpr | | +| test.rs:92:17:92:17 | PathExpr | test.rs:92:21:92:21 | 5 | | +| test.rs:92:17:92:21 | ... = ... | test.rs:92:13:94:13 | IfExpr | false | +| test.rs:92:17:92:21 | ... = ... | test.rs:93:17:93:22 | ExprStmt | true | +| test.rs:92:21:92:21 | 5 | test.rs:92:17:92:21 | ... = ... | | +| test.rs:93:17:93:21 | BreakExpr | test.rs:91:9:95:9 | WhileExpr | break | +| test.rs:93:17:93:22 | ExprStmt | test.rs:93:17:93:21 | BreakExpr | | +| test.rs:98:5:105:5 | enter test_for | test.rs:98:17:98:17 | j | | +| test.rs:98:5:105:5 | exit test_for (normal) | test.rs:98:5:105:5 | exit test_for | | +| test.rs:98:17:98:17 | j | test.rs:98:17:98:22 | Param | match | +| test.rs:98:17:98:22 | Param | test.rs:99:18:99:18 | 0 | | +| test.rs:98:25:105:5 | BlockExpr | test.rs:98:5:105:5 | exit test_for (normal) | | +| test.rs:99:9:104:9 | ForExpr | test.rs:98:25:105:5 | BlockExpr | | +| test.rs:99:13:99:13 | i | test.rs:99:9:104:9 | ForExpr | no-match | +| test.rs:99:13:99:13 | i | test.rs:100:13:102:13 | ExprStmt | match | +| test.rs:99:18:99:18 | 0 | test.rs:99:21:99:22 | 10 | | +| test.rs:99:18:99:22 | RangeExpr | test.rs:99:13:99:13 | i | | +| test.rs:99:21:99:22 | 10 | test.rs:99:18:99:22 | RangeExpr | | +| test.rs:99:24:104:9 | BlockExpr | test.rs:99:13:99:13 | i | | +| test.rs:100:13:102:13 | ExprStmt | test.rs:100:17:100:17 | i | | +| test.rs:100:13:102:13 | IfExpr | test.rs:103:13:103:14 | ExprStmt | | +| test.rs:100:17:100:17 | i | test.rs:100:22:100:22 | j | | +| test.rs:100:17:100:22 | ... == ... | test.rs:100:13:102:13 | IfExpr | false | +| test.rs:100:17:100:22 | ... == ... | test.rs:101:17:101:22 | ExprStmt | true | +| test.rs:100:22:100:22 | j | test.rs:100:17:100:22 | ... == ... | | +| test.rs:101:17:101:21 | BreakExpr | test.rs:99:9:104:9 | ForExpr | break | +| test.rs:101:17:101:22 | ExprStmt | test.rs:101:17:101:21 | BreakExpr | | +| test.rs:103:13:103:13 | 1 | test.rs:99:24:104:9 | BlockExpr | | +| test.rs:103:13:103:14 | ExprStmt | test.rs:103:13:103:13 | 1 | | +| test.rs:107:5:111:5 | enter break_with_return | test.rs:109:13:109:27 | ExprStmt | | +| test.rs:107:5:111:5 | exit break_with_return (normal) | test.rs:107:5:111:5 | exit break_with_return | | +| test.rs:109:13:109:27 | ExprStmt | test.rs:109:26:109:26 | 1 | | +| test.rs:109:19:109:26 | ReturnExpr | test.rs:107:5:111:5 | exit break_with_return (normal) | return | +| test.rs:109:26:109:26 | 1 | test.rs:109:19:109:26 | ReturnExpr | | +| test.rs:114:1:117:1 | enter test_nested_function | test.rs:114:25:114:25 | n | | +| test.rs:114:1:117:1 | exit test_nested_function (normal) | test.rs:114:1:117:1 | exit test_nested_function | | +| test.rs:114:25:114:25 | n | test.rs:114:25:114:30 | Param | match | +| test.rs:114:25:114:30 | Param | test.rs:115:5:115:28 | LetStmt | | +| test.rs:114:40:117:1 | BlockExpr | test.rs:114:1:117:1 | exit test_nested_function (normal) | | +| test.rs:115:5:115:28 | LetStmt | test.rs:115:19:115:27 | ClosureExpr | | +| test.rs:115:9:115:15 | add_one | test.rs:116:5:116:11 | add_one | match | +| test.rs:115:19:115:27 | ClosureExpr | test.rs:115:9:115:15 | add_one | | +| test.rs:115:19:115:27 | enter ClosureExpr | test.rs:115:20:115:20 | i | | +| test.rs:115:19:115:27 | exit ClosureExpr (normal) | test.rs:115:19:115:27 | exit ClosureExpr | | +| test.rs:115:20:115:20 | Param | test.rs:115:23:115:23 | i | | +| test.rs:115:20:115:20 | i | test.rs:115:20:115:20 | Param | match | +| test.rs:115:23:115:23 | i | test.rs:115:27:115:27 | 1 | | +| test.rs:115:23:115:27 | ... + ... | test.rs:115:19:115:27 | exit ClosureExpr (normal) | | +| test.rs:115:27:115:27 | 1 | test.rs:115:23:115:27 | ... + ... | | +| test.rs:116:5:116:11 | add_one | test.rs:116:13:116:19 | add_one | | +| test.rs:116:5:116:23 | CallExpr | test.rs:114:40:117:1 | BlockExpr | | +| test.rs:116:13:116:19 | add_one | test.rs:116:21:116:21 | n | | +| test.rs:116:13:116:22 | CallExpr | test.rs:116:5:116:23 | CallExpr | | +| test.rs:116:21:116:21 | n | test.rs:116:13:116:22 | CallExpr | | +| test.rs:121:5:127:5 | enter test_if_else | test.rs:121:21:121:21 | n | | +| test.rs:121:5:127:5 | exit test_if_else (normal) | test.rs:121:5:127:5 | exit test_if_else | | +| test.rs:121:21:121:21 | n | test.rs:121:21:121:26 | Param | match | +| test.rs:121:21:121:26 | Param | test.rs:122:12:122:12 | n | | +| test.rs:121:36:127:5 | BlockExpr | test.rs:121:5:127:5 | exit test_if_else (normal) | | +| test.rs:122:9:126:9 | IfExpr | test.rs:121:36:127:5 | BlockExpr | | +| test.rs:122:12:122:12 | n | test.rs:122:17:122:17 | 0 | | +| test.rs:122:12:122:17 | ... <= ... | test.rs:123:13:123:13 | 0 | true | +| test.rs:122:12:122:17 | ... <= ... | test.rs:125:13:125:13 | n | false | +| test.rs:122:17:122:17 | 0 | test.rs:122:12:122:17 | ... <= ... | | +| test.rs:122:19:124:9 | BlockExpr | test.rs:122:9:126:9 | IfExpr | | +| test.rs:123:13:123:13 | 0 | test.rs:122:19:124:9 | BlockExpr | | +| test.rs:124:16:126:9 | BlockExpr | test.rs:122:9:126:9 | IfExpr | | +| test.rs:125:13:125:13 | n | test.rs:125:17:125:17 | 1 | | +| test.rs:125:13:125:17 | ... - ... | test.rs:124:16:126:9 | BlockExpr | | +| test.rs:125:17:125:17 | 1 | test.rs:125:13:125:17 | ... - ... | | +| test.rs:129:5:135:5 | enter test_if_let_else | test.rs:129:25:129:25 | a | | +| test.rs:129:5:135:5 | exit test_if_let_else (normal) | test.rs:129:5:135:5 | exit test_if_let_else | | +| test.rs:129:25:129:25 | a | test.rs:129:25:129:38 | Param | match | +| test.rs:129:25:129:38 | Param | test.rs:130:12:130:26 | LetExpr | | +| test.rs:129:48:135:5 | BlockExpr | test.rs:129:5:135:5 | exit test_if_let_else (normal) | | +| test.rs:130:9:134:9 | IfExpr | test.rs:129:48:135:5 | BlockExpr | | +| test.rs:130:12:130:26 | LetExpr | test.rs:130:26:130:26 | a | | +| test.rs:130:16:130:22 | TupleStructPat | test.rs:130:21:130:21 | n | match | +| test.rs:130:16:130:22 | TupleStructPat | test.rs:133:13:133:13 | 0 | no-match | +| test.rs:130:21:130:21 | n | test.rs:131:13:131:13 | n | match | +| test.rs:130:26:130:26 | a | test.rs:130:16:130:22 | TupleStructPat | | +| test.rs:130:28:132:9 | BlockExpr | test.rs:130:9:134:9 | IfExpr | | +| test.rs:131:13:131:13 | n | test.rs:130:28:132:9 | BlockExpr | | +| test.rs:132:16:134:9 | BlockExpr | test.rs:130:9:134:9 | IfExpr | | +| test.rs:133:13:133:13 | 0 | test.rs:132:16:134:9 | BlockExpr | | +| test.rs:137:5:142:5 | enter test_if_let | test.rs:137:20:137:20 | a | | +| test.rs:137:5:142:5 | exit test_if_let (normal) | test.rs:137:5:142:5 | exit test_if_let | | +| test.rs:137:20:137:20 | a | test.rs:137:20:137:33 | Param | match | +| test.rs:137:20:137:33 | Param | test.rs:138:9:140:9 | ExprStmt | | +| test.rs:137:43:142:5 | BlockExpr | test.rs:137:5:142:5 | exit test_if_let (normal) | | +| test.rs:138:9:140:9 | ExprStmt | test.rs:138:12:138:26 | LetExpr | | +| test.rs:138:9:140:9 | IfExpr | test.rs:141:9:141:9 | 0 | | +| test.rs:138:12:138:26 | LetExpr | test.rs:138:26:138:26 | a | | +| test.rs:138:16:138:22 | TupleStructPat | test.rs:138:9:140:9 | IfExpr | no-match | +| test.rs:138:16:138:22 | TupleStructPat | test.rs:138:21:138:21 | n | match | +| test.rs:138:21:138:21 | n | test.rs:139:13:139:13 | n | match | +| test.rs:138:26:138:26 | a | test.rs:138:16:138:22 | TupleStructPat | | +| test.rs:138:28:140:9 | BlockExpr | test.rs:138:9:140:9 | IfExpr | | +| test.rs:139:13:139:13 | n | test.rs:138:28:140:9 | BlockExpr | | +| test.rs:141:9:141:9 | 0 | test.rs:137:43:142:5 | BlockExpr | | +| test.rs:144:5:150:5 | enter test_nested_if | test.rs:144:23:144:23 | a | | +| test.rs:144:5:150:5 | exit test_nested_if (normal) | test.rs:144:5:150:5 | exit test_nested_if | | +| test.rs:144:23:144:23 | a | test.rs:144:23:144:28 | Param | match | +| test.rs:144:23:144:28 | Param | test.rs:145:16:145:16 | a | | +| test.rs:144:38:150:5 | BlockExpr | test.rs:144:5:150:5 | exit test_nested_if (normal) | | +| test.rs:145:9:149:9 | IfExpr | test.rs:144:38:150:5 | BlockExpr | | +| test.rs:145:13:145:48 | [boolean(false)] IfExpr | test.rs:148:13:148:13 | 0 | false | +| test.rs:145:13:145:48 | [boolean(true)] IfExpr | test.rs:146:13:146:13 | 1 | true | +| test.rs:145:16:145:16 | a | test.rs:145:20:145:20 | 0 | | +| test.rs:145:16:145:20 | ... < ... | test.rs:145:24:145:24 | a | true | +| test.rs:145:16:145:20 | ... < ... | test.rs:145:41:145:41 | a | false | +| test.rs:145:20:145:20 | 0 | test.rs:145:16:145:20 | ... < ... | | +| test.rs:145:22:145:32 | [boolean(false)] BlockExpr | test.rs:145:13:145:48 | [boolean(false)] IfExpr | false | +| test.rs:145:22:145:32 | [boolean(true)] BlockExpr | test.rs:145:13:145:48 | [boolean(true)] IfExpr | true | +| test.rs:145:24:145:24 | a | test.rs:145:29:145:30 | 10 | | +| test.rs:145:24:145:30 | ... < ... | test.rs:145:22:145:32 | [boolean(false)] BlockExpr | false | +| test.rs:145:24:145:30 | ... < ... | test.rs:145:22:145:32 | [boolean(true)] BlockExpr | true | +| test.rs:145:28:145:30 | - ... | test.rs:145:24:145:30 | ... < ... | | +| test.rs:145:29:145:30 | 10 | test.rs:145:28:145:30 | - ... | | +| test.rs:145:39:145:48 | [boolean(false)] BlockExpr | test.rs:145:13:145:48 | [boolean(false)] IfExpr | false | +| test.rs:145:39:145:48 | [boolean(true)] BlockExpr | test.rs:145:13:145:48 | [boolean(true)] IfExpr | true | +| test.rs:145:41:145:41 | a | test.rs:145:45:145:46 | 10 | | +| test.rs:145:41:145:46 | ... > ... | test.rs:145:39:145:48 | [boolean(false)] BlockExpr | false | +| test.rs:145:41:145:46 | ... > ... | test.rs:145:39:145:48 | [boolean(true)] BlockExpr | true | +| test.rs:145:45:145:46 | 10 | test.rs:145:41:145:46 | ... > ... | | +| test.rs:145:51:147:9 | BlockExpr | test.rs:145:9:149:9 | IfExpr | | +| test.rs:146:13:146:13 | 1 | test.rs:145:51:147:9 | BlockExpr | | +| test.rs:147:16:149:9 | BlockExpr | test.rs:145:9:149:9 | IfExpr | | +| test.rs:148:13:148:13 | 0 | test.rs:147:16:149:9 | BlockExpr | | +| test.rs:152:5:161:5 | enter test_nested_if_match | test.rs:152:29:152:29 | a | | +| test.rs:152:5:161:5 | exit test_nested_if_match (normal) | test.rs:152:5:161:5 | exit test_nested_if_match | | +| test.rs:152:29:152:29 | a | test.rs:152:29:152:34 | Param | match | +| test.rs:152:29:152:34 | Param | test.rs:153:19:153:19 | a | | +| test.rs:152:44:161:5 | BlockExpr | test.rs:152:5:161:5 | exit test_nested_if_match (normal) | | +| test.rs:153:9:160:9 | IfExpr | test.rs:152:44:161:5 | BlockExpr | | +| test.rs:153:13:156:9 | [boolean(false)] MatchExpr | test.rs:159:13:159:13 | 0 | false | +| test.rs:153:13:156:9 | [boolean(true)] MatchExpr | test.rs:157:13:157:13 | 1 | true | +| test.rs:153:19:153:19 | a | test.rs:154:13:154:13 | LiteralPat | | +| test.rs:154:13:154:13 | LiteralPat | test.rs:154:18:154:21 | true | match | +| test.rs:154:13:154:13 | LiteralPat | test.rs:155:13:155:13 | WildcardPat | no-match | +| test.rs:154:18:154:21 | true | test.rs:153:13:156:9 | [boolean(true)] MatchExpr | true | +| test.rs:155:13:155:13 | WildcardPat | test.rs:155:18:155:22 | false | match | +| test.rs:155:18:155:22 | false | test.rs:153:13:156:9 | [boolean(false)] MatchExpr | false | +| test.rs:156:12:158:9 | BlockExpr | test.rs:153:9:160:9 | IfExpr | | +| test.rs:157:13:157:13 | 1 | test.rs:156:12:158:9 | BlockExpr | | +| test.rs:158:16:160:9 | BlockExpr | test.rs:153:9:160:9 | IfExpr | | +| test.rs:159:13:159:13 | 0 | test.rs:158:16:160:9 | BlockExpr | | +| test.rs:163:5:172:5 | enter test_nested_if_block | test.rs:163:29:163:29 | a | | +| test.rs:163:5:172:5 | exit test_nested_if_block (normal) | test.rs:163:5:172:5 | exit test_nested_if_block | | +| test.rs:163:29:163:29 | a | test.rs:163:29:163:34 | Param | match | +| test.rs:163:29:163:34 | Param | test.rs:165:13:165:15 | ExprStmt | | +| test.rs:163:44:172:5 | BlockExpr | test.rs:163:5:172:5 | exit test_nested_if_block (normal) | | +| test.rs:164:9:171:9 | IfExpr | test.rs:163:44:172:5 | BlockExpr | | +| test.rs:164:12:167:9 | [boolean(false)] BlockExpr | test.rs:170:13:170:13 | 0 | false | +| test.rs:164:12:167:9 | [boolean(true)] BlockExpr | test.rs:168:13:168:13 | 1 | true | +| test.rs:165:13:165:14 | TupleExpr | test.rs:166:13:166:13 | a | | +| test.rs:165:13:165:15 | ExprStmt | test.rs:165:13:165:14 | TupleExpr | | +| test.rs:166:13:166:13 | a | test.rs:166:17:166:17 | 0 | | +| test.rs:166:13:166:17 | ... > ... | test.rs:164:12:167:9 | [boolean(false)] BlockExpr | false | +| test.rs:166:13:166:17 | ... > ... | test.rs:164:12:167:9 | [boolean(true)] BlockExpr | true | +| test.rs:166:17:166:17 | 0 | test.rs:166:13:166:17 | ... > ... | | +| test.rs:167:11:169:9 | BlockExpr | test.rs:164:9:171:9 | IfExpr | | +| test.rs:168:13:168:13 | 1 | test.rs:167:11:169:9 | BlockExpr | | +| test.rs:169:16:171:9 | BlockExpr | test.rs:164:9:171:9 | IfExpr | | +| test.rs:170:13:170:13 | 0 | test.rs:169:16:171:9 | BlockExpr | | +| test.rs:174:5:181:5 | enter test_if_assignment | test.rs:174:27:174:27 | a | | +| test.rs:174:5:181:5 | exit test_if_assignment (normal) | test.rs:174:5:181:5 | exit test_if_assignment | | +| test.rs:174:27:174:27 | a | test.rs:174:27:174:32 | Param | match | +| test.rs:174:27:174:32 | Param | test.rs:175:9:175:26 | LetStmt | | +| test.rs:174:42:181:5 | BlockExpr | test.rs:174:5:181:5 | exit test_if_assignment (normal) | | +| test.rs:175:9:175:26 | LetStmt | test.rs:175:21:175:25 | false | | +| test.rs:175:13:175:17 | x | test.rs:176:12:176:12 | x | match | +| test.rs:175:21:175:25 | false | test.rs:175:13:175:17 | x | | +| test.rs:176:9:180:9 | IfExpr | test.rs:174:42:181:5 | BlockExpr | | +| test.rs:176:12:176:12 | x | test.rs:176:16:176:19 | true | | +| test.rs:176:12:176:19 | ... = ... | test.rs:177:13:177:13 | 1 | true | +| test.rs:176:12:176:19 | ... = ... | test.rs:179:13:179:13 | 0 | false | +| test.rs:176:16:176:19 | true | test.rs:176:12:176:19 | ... = ... | | +| test.rs:176:21:178:9 | BlockExpr | test.rs:176:9:180:9 | IfExpr | | +| test.rs:177:13:177:13 | 1 | test.rs:176:21:178:9 | BlockExpr | | +| test.rs:178:16:180:9 | BlockExpr | test.rs:176:9:180:9 | IfExpr | | +| test.rs:179:13:179:13 | 0 | test.rs:178:16:180:9 | BlockExpr | | +| test.rs:183:5:194:5 | enter test_if_loop1 | test.rs:183:22:183:22 | a | | +| test.rs:183:5:194:5 | exit test_if_loop1 (normal) | test.rs:183:5:194:5 | exit test_if_loop1 | | +| test.rs:183:22:183:22 | a | test.rs:183:22:183:27 | Param | match | +| test.rs:183:22:183:27 | Param | test.rs:185:13:187:14 | ExprStmt | | +| test.rs:183:37:194:5 | BlockExpr | test.rs:183:5:194:5 | exit test_if_loop1 (normal) | | +| test.rs:184:9:193:9 | IfExpr | test.rs:183:37:194:5 | BlockExpr | | +| test.rs:184:13:189:9 | [boolean(false)] LoopExpr | test.rs:192:13:192:13 | 0 | false | +| test.rs:184:13:189:9 | [boolean(true)] LoopExpr | test.rs:190:13:190:13 | 1 | true | +| test.rs:184:18:189:9 | BlockExpr | test.rs:185:13:187:14 | ExprStmt | | +| test.rs:185:13:187:13 | IfExpr | test.rs:188:13:188:19 | ExprStmt | | +| test.rs:185:13:187:14 | ExprStmt | test.rs:185:16:185:16 | a | | +| test.rs:185:16:185:16 | a | test.rs:185:20:185:20 | 0 | | +| test.rs:185:16:185:20 | ... > ... | test.rs:185:13:187:13 | IfExpr | false | +| test.rs:185:16:185:20 | ... > ... | test.rs:186:17:186:29 | ExprStmt | true | +| test.rs:185:20:185:20 | 0 | test.rs:185:16:185:20 | ... > ... | | +| test.rs:186:17:186:28 | [boolean(false)] BreakExpr | test.rs:184:13:189:9 | [boolean(false)] LoopExpr | break | +| test.rs:186:17:186:28 | [boolean(true)] BreakExpr | test.rs:184:13:189:9 | [boolean(true)] LoopExpr | break | +| test.rs:186:17:186:29 | ExprStmt | test.rs:186:23:186:23 | a | | +| test.rs:186:23:186:23 | a | test.rs:186:27:186:28 | 10 | | +| test.rs:186:23:186:28 | ... > ... | test.rs:186:17:186:28 | [boolean(false)] BreakExpr | false | +| test.rs:186:23:186:28 | ... > ... | test.rs:186:17:186:28 | [boolean(true)] BreakExpr | true | +| test.rs:186:27:186:28 | 10 | test.rs:186:23:186:28 | ... > ... | | +| test.rs:188:13:188:13 | a | test.rs:188:17:188:18 | 10 | | +| test.rs:188:13:188:18 | ... < ... | test.rs:184:18:189:9 | BlockExpr | | +| test.rs:188:13:188:19 | ExprStmt | test.rs:188:13:188:13 | a | | +| test.rs:188:17:188:18 | 10 | test.rs:188:13:188:18 | ... < ... | | +| test.rs:189:12:191:9 | BlockExpr | test.rs:184:9:193:9 | IfExpr | | +| test.rs:190:13:190:13 | 1 | test.rs:189:12:191:9 | BlockExpr | | +| test.rs:191:16:193:9 | BlockExpr | test.rs:184:9:193:9 | IfExpr | | +| test.rs:192:13:192:13 | 0 | test.rs:191:16:193:9 | BlockExpr | | +| test.rs:196:5:207:5 | enter test_if_loop2 | test.rs:196:22:196:22 | a | | +| test.rs:196:5:207:5 | exit test_if_loop2 (normal) | test.rs:196:5:207:5 | exit test_if_loop2 | | +| test.rs:196:22:196:22 | a | test.rs:196:22:196:27 | Param | match | +| test.rs:196:22:196:27 | Param | test.rs:198:13:200:14 | ExprStmt | | +| test.rs:196:37:207:5 | BlockExpr | test.rs:196:5:207:5 | exit test_if_loop2 (normal) | | +| test.rs:197:9:206:9 | IfExpr | test.rs:196:37:207:5 | BlockExpr | | +| test.rs:197:13:202:9 | [boolean(false)] LoopExpr | test.rs:205:13:205:13 | 0 | false | +| test.rs:197:13:202:9 | [boolean(true)] LoopExpr | test.rs:203:13:203:13 | 1 | true | +| test.rs:197:26:202:9 | BlockExpr | test.rs:198:13:200:14 | ExprStmt | | +| test.rs:198:13:200:13 | IfExpr | test.rs:201:13:201:19 | ExprStmt | | +| test.rs:198:13:200:14 | ExprStmt | test.rs:198:16:198:16 | a | | +| test.rs:198:16:198:16 | a | test.rs:198:20:198:20 | 0 | | +| test.rs:198:16:198:20 | ... > ... | test.rs:198:13:200:13 | IfExpr | false | +| test.rs:198:16:198:20 | ... > ... | test.rs:199:17:199:36 | ExprStmt | true | +| test.rs:198:20:198:20 | 0 | test.rs:198:16:198:20 | ... > ... | | +| test.rs:199:17:199:35 | [boolean(false)] BreakExpr | test.rs:197:13:202:9 | [boolean(false)] LoopExpr | break | +| test.rs:199:17:199:35 | [boolean(true)] BreakExpr | test.rs:197:13:202:9 | [boolean(true)] LoopExpr | break | +| test.rs:199:17:199:36 | ExprStmt | test.rs:199:30:199:30 | a | | +| test.rs:199:30:199:30 | a | test.rs:199:34:199:35 | 10 | | +| test.rs:199:30:199:35 | ... > ... | test.rs:199:17:199:35 | [boolean(false)] BreakExpr | false | +| test.rs:199:30:199:35 | ... > ... | test.rs:199:17:199:35 | [boolean(true)] BreakExpr | true | +| test.rs:199:34:199:35 | 10 | test.rs:199:30:199:35 | ... > ... | | +| test.rs:201:13:201:13 | a | test.rs:201:17:201:18 | 10 | | +| test.rs:201:13:201:18 | ... < ... | test.rs:197:26:202:9 | BlockExpr | | +| test.rs:201:13:201:19 | ExprStmt | test.rs:201:13:201:13 | a | | +| test.rs:201:17:201:18 | 10 | test.rs:201:13:201:18 | ... < ... | | +| test.rs:202:12:204:9 | BlockExpr | test.rs:197:9:206:9 | IfExpr | | +| test.rs:203:13:203:13 | 1 | test.rs:202:12:204:9 | BlockExpr | | +| test.rs:204:16:206:9 | BlockExpr | test.rs:197:9:206:9 | IfExpr | | +| test.rs:205:13:205:13 | 0 | test.rs:204:16:206:9 | BlockExpr | | +| test.rs:209:5:217:5 | enter test_labelled_block | test.rs:209:28:209:28 | a | | +| test.rs:209:5:217:5 | exit test_labelled_block (normal) | test.rs:209:5:217:5 | exit test_labelled_block | | +| test.rs:209:28:209:28 | a | test.rs:209:28:209:33 | Param | match | +| test.rs:209:28:209:33 | Param | test.rs:211:13:211:31 | ExprStmt | | +| test.rs:209:43:217:5 | BlockExpr | test.rs:209:5:217:5 | exit test_labelled_block (normal) | | +| test.rs:210:9:216:9 | IfExpr | test.rs:209:43:217:5 | BlockExpr | | +| test.rs:210:13:212:9 | [boolean(false)] BlockExpr | test.rs:215:13:215:13 | 0 | false | +| test.rs:210:13:212:9 | [boolean(true)] BlockExpr | test.rs:213:13:213:13 | 1 | true | +| test.rs:211:13:211:30 | [boolean(false)] BreakExpr | test.rs:210:13:212:9 | [boolean(false)] BlockExpr | break | +| test.rs:211:13:211:30 | [boolean(true)] BreakExpr | test.rs:210:13:212:9 | [boolean(true)] BlockExpr | break | +| test.rs:211:13:211:31 | ExprStmt | test.rs:211:26:211:26 | a | | +| test.rs:211:26:211:26 | a | test.rs:211:30:211:30 | 0 | | +| test.rs:211:26:211:30 | ... > ... | test.rs:211:13:211:30 | [boolean(false)] BreakExpr | false | +| test.rs:211:26:211:30 | ... > ... | test.rs:211:13:211:30 | [boolean(true)] BreakExpr | true | +| test.rs:211:30:211:30 | 0 | test.rs:211:26:211:30 | ... > ... | | +| test.rs:212:12:214:9 | BlockExpr | test.rs:210:9:216:9 | IfExpr | | +| test.rs:213:13:213:13 | 1 | test.rs:212:12:214:9 | BlockExpr | | +| test.rs:214:16:216:9 | BlockExpr | test.rs:210:9:216:9 | IfExpr | | +| test.rs:215:13:215:13 | 0 | test.rs:214:16:216:9 | BlockExpr | | +| test.rs:222:5:225:5 | enter test_and_operator | test.rs:222:26:222:26 | a | | +| test.rs:222:5:225:5 | exit test_and_operator (normal) | test.rs:222:5:225:5 | exit test_and_operator | | +| test.rs:222:26:222:26 | a | test.rs:222:26:222:32 | Param | match | +| test.rs:222:26:222:32 | Param | test.rs:222:35:222:35 | b | | +| test.rs:222:35:222:35 | b | test.rs:222:35:222:41 | Param | match | +| test.rs:222:35:222:41 | Param | test.rs:222:44:222:44 | c | | +| test.rs:222:44:222:44 | c | test.rs:222:44:222:50 | Param | match | +| test.rs:222:44:222:50 | Param | test.rs:223:9:223:28 | LetStmt | | +| test.rs:222:61:225:5 | BlockExpr | test.rs:222:5:225:5 | exit test_and_operator (normal) | | +| test.rs:223:9:223:28 | LetStmt | test.rs:223:17:223:17 | a | | +| test.rs:223:13:223:13 | d | test.rs:224:9:224:9 | d | match | +| test.rs:223:17:223:17 | a | test.rs:223:17:223:22 | [boolean(false)] ... && ... | false | +| test.rs:223:17:223:17 | a | test.rs:223:22:223:22 | b | true | +| test.rs:223:17:223:22 | [boolean(false)] ... && ... | test.rs:223:17:223:27 | ... && ... | false | +| test.rs:223:17:223:22 | [boolean(true)] ... && ... | test.rs:223:27:223:27 | c | true | +| test.rs:223:17:223:27 | ... && ... | test.rs:223:13:223:13 | d | | +| test.rs:223:22:223:22 | b | test.rs:223:17:223:22 | [boolean(false)] ... && ... | false | +| test.rs:223:22:223:22 | b | test.rs:223:17:223:22 | [boolean(true)] ... && ... | true | +| test.rs:223:27:223:27 | c | test.rs:223:17:223:27 | ... && ... | | +| test.rs:224:9:224:9 | d | test.rs:222:61:225:5 | BlockExpr | | +| test.rs:227:5:230:5 | enter test_or_operator | test.rs:227:25:227:25 | a | | +| test.rs:227:5:230:5 | exit test_or_operator (normal) | test.rs:227:5:230:5 | exit test_or_operator | | +| test.rs:227:25:227:25 | a | test.rs:227:25:227:31 | Param | match | +| test.rs:227:25:227:31 | Param | test.rs:227:34:227:34 | b | | +| test.rs:227:34:227:34 | b | test.rs:227:34:227:40 | Param | match | +| test.rs:227:34:227:40 | Param | test.rs:227:43:227:43 | c | | +| test.rs:227:43:227:43 | c | test.rs:227:43:227:49 | Param | match | +| test.rs:227:43:227:49 | Param | test.rs:228:9:228:28 | LetStmt | | +| test.rs:227:60:230:5 | BlockExpr | test.rs:227:5:230:5 | exit test_or_operator (normal) | | +| test.rs:228:9:228:28 | LetStmt | test.rs:228:17:228:17 | a | | +| test.rs:228:13:228:13 | d | test.rs:229:9:229:9 | d | match | +| test.rs:228:17:228:17 | a | test.rs:228:17:228:22 | [boolean(true)] ... \|\| ... | true | +| test.rs:228:17:228:17 | a | test.rs:228:22:228:22 | b | false | +| test.rs:228:17:228:22 | [boolean(false)] ... \|\| ... | test.rs:228:27:228:27 | c | false | +| test.rs:228:17:228:22 | [boolean(true)] ... \|\| ... | test.rs:228:17:228:27 | ... \|\| ... | true | +| test.rs:228:17:228:27 | ... \|\| ... | test.rs:228:13:228:13 | d | | +| test.rs:228:22:228:22 | b | test.rs:228:17:228:22 | [boolean(false)] ... \|\| ... | false | +| test.rs:228:22:228:22 | b | test.rs:228:17:228:22 | [boolean(true)] ... \|\| ... | true | +| test.rs:228:27:228:27 | c | test.rs:228:17:228:27 | ... \|\| ... | | +| test.rs:229:9:229:9 | d | test.rs:227:60:230:5 | BlockExpr | | +| test.rs:232:5:235:5 | enter test_or_operator_2 | test.rs:232:27:232:27 | a | | +| test.rs:232:5:235:5 | exit test_or_operator_2 (normal) | test.rs:232:5:235:5 | exit test_or_operator_2 | | +| test.rs:232:27:232:27 | a | test.rs:232:27:232:33 | Param | match | +| test.rs:232:27:232:33 | Param | test.rs:232:36:232:36 | b | | +| test.rs:232:36:232:36 | b | test.rs:232:36:232:41 | Param | match | +| test.rs:232:36:232:41 | Param | test.rs:232:44:232:44 | c | | +| test.rs:232:44:232:44 | c | test.rs:232:44:232:50 | Param | match | +| test.rs:232:44:232:50 | Param | test.rs:233:9:233:36 | LetStmt | | +| test.rs:232:61:235:5 | BlockExpr | test.rs:232:5:235:5 | exit test_or_operator_2 (normal) | | +| test.rs:233:9:233:36 | LetStmt | test.rs:233:17:233:17 | a | | +| test.rs:233:13:233:13 | d | test.rs:234:9:234:9 | d | match | +| test.rs:233:17:233:17 | a | test.rs:233:17:233:30 | [boolean(true)] ... \|\| ... | true | +| test.rs:233:17:233:17 | a | test.rs:233:23:233:23 | b | false | +| test.rs:233:17:233:30 | [boolean(false)] ... \|\| ... | test.rs:233:35:233:35 | c | false | +| test.rs:233:17:233:30 | [boolean(true)] ... \|\| ... | test.rs:233:17:233:35 | ... \|\| ... | true | +| test.rs:233:17:233:35 | ... \|\| ... | test.rs:233:13:233:13 | d | | +| test.rs:233:23:233:23 | b | test.rs:233:28:233:29 | 28 | | +| test.rs:233:23:233:29 | ... == ... | test.rs:233:17:233:30 | [boolean(false)] ... \|\| ... | false | +| test.rs:233:23:233:29 | ... == ... | test.rs:233:17:233:30 | [boolean(true)] ... \|\| ... | true | +| test.rs:233:28:233:29 | 28 | test.rs:233:23:233:29 | ... == ... | | +| test.rs:233:35:233:35 | c | test.rs:233:17:233:35 | ... \|\| ... | | +| test.rs:234:9:234:9 | d | test.rs:232:61:235:5 | BlockExpr | | +| test.rs:237:5:240:5 | enter test_not_operator | test.rs:237:26:237:26 | a | | +| test.rs:237:5:240:5 | exit test_not_operator (normal) | test.rs:237:5:240:5 | exit test_not_operator | | +| test.rs:237:26:237:26 | a | test.rs:237:26:237:32 | Param | match | +| test.rs:237:26:237:32 | Param | test.rs:238:9:238:19 | LetStmt | | +| test.rs:237:43:240:5 | BlockExpr | test.rs:237:5:240:5 | exit test_not_operator (normal) | | +| test.rs:238:9:238:19 | LetStmt | test.rs:238:18:238:18 | a | | +| test.rs:238:13:238:13 | d | test.rs:239:9:239:9 | d | match | +| test.rs:238:17:238:18 | ! ... | test.rs:238:13:238:13 | d | | +| test.rs:238:18:238:18 | a | test.rs:238:17:238:18 | ! ... | | +| test.rs:239:9:239:9 | d | test.rs:237:43:240:5 | BlockExpr | | +| test.rs:242:5:248:5 | enter test_if_and_operator | test.rs:242:29:242:29 | a | | +| test.rs:242:5:248:5 | exit test_if_and_operator (normal) | test.rs:242:5:248:5 | exit test_if_and_operator | | +| test.rs:242:29:242:29 | a | test.rs:242:29:242:35 | Param | match | +| test.rs:242:29:242:35 | Param | test.rs:242:38:242:38 | b | | +| test.rs:242:38:242:38 | b | test.rs:242:38:242:43 | Param | match | +| test.rs:242:38:242:43 | Param | test.rs:242:46:242:46 | c | | +| test.rs:242:46:242:46 | c | test.rs:242:46:242:52 | Param | match | +| test.rs:242:46:242:52 | Param | test.rs:243:12:243:12 | a | | +| test.rs:242:63:248:5 | BlockExpr | test.rs:242:5:248:5 | exit test_if_and_operator (normal) | | +| test.rs:243:9:247:9 | IfExpr | test.rs:242:63:248:5 | BlockExpr | | +| test.rs:243:12:243:12 | a | test.rs:243:12:243:17 | [boolean(false)] ... && ... | false | +| test.rs:243:12:243:12 | a | test.rs:243:17:243:17 | b | true | +| test.rs:243:12:243:17 | [boolean(false)] ... && ... | test.rs:243:12:243:22 | [boolean(false)] ... && ... | false | +| test.rs:243:12:243:17 | [boolean(true)] ... && ... | test.rs:243:22:243:22 | c | true | +| test.rs:243:12:243:22 | [boolean(false)] ... && ... | test.rs:246:13:246:17 | false | false | +| test.rs:243:12:243:22 | [boolean(true)] ... && ... | test.rs:244:13:244:16 | true | true | +| test.rs:243:17:243:17 | b | test.rs:243:12:243:17 | [boolean(false)] ... && ... | false | +| test.rs:243:17:243:17 | b | test.rs:243:12:243:17 | [boolean(true)] ... && ... | true | +| test.rs:243:22:243:22 | c | test.rs:243:12:243:22 | [boolean(false)] ... && ... | false | +| test.rs:243:22:243:22 | c | test.rs:243:12:243:22 | [boolean(true)] ... && ... | true | +| test.rs:243:24:245:9 | BlockExpr | test.rs:243:9:247:9 | IfExpr | | +| test.rs:244:13:244:16 | true | test.rs:243:24:245:9 | BlockExpr | | +| test.rs:245:16:247:9 | BlockExpr | test.rs:243:9:247:9 | IfExpr | | +| test.rs:246:13:246:17 | false | test.rs:245:16:247:9 | BlockExpr | | +| test.rs:250:5:256:5 | enter test_if_or_operator | test.rs:250:28:250:28 | a | | +| test.rs:250:5:256:5 | exit test_if_or_operator (normal) | test.rs:250:5:256:5 | exit test_if_or_operator | | +| test.rs:250:28:250:28 | a | test.rs:250:28:250:34 | Param | match | +| test.rs:250:28:250:34 | Param | test.rs:250:37:250:37 | b | | +| test.rs:250:37:250:37 | b | test.rs:250:37:250:42 | Param | match | +| test.rs:250:37:250:42 | Param | test.rs:250:45:250:45 | c | | +| test.rs:250:45:250:45 | c | test.rs:250:45:250:51 | Param | match | +| test.rs:250:45:250:51 | Param | test.rs:251:12:251:12 | a | | +| test.rs:250:62:256:5 | BlockExpr | test.rs:250:5:256:5 | exit test_if_or_operator (normal) | | +| test.rs:251:9:255:9 | IfExpr | test.rs:250:62:256:5 | BlockExpr | | +| test.rs:251:12:251:12 | a | test.rs:251:12:251:17 | [boolean(true)] ... \|\| ... | true | +| test.rs:251:12:251:12 | a | test.rs:251:17:251:17 | b | false | +| test.rs:251:12:251:17 | [boolean(false)] ... \|\| ... | test.rs:251:22:251:22 | c | false | +| test.rs:251:12:251:17 | [boolean(true)] ... \|\| ... | test.rs:251:12:251:22 | [boolean(true)] ... \|\| ... | true | +| test.rs:251:12:251:22 | [boolean(false)] ... \|\| ... | test.rs:254:13:254:17 | false | false | +| test.rs:251:12:251:22 | [boolean(true)] ... \|\| ... | test.rs:252:13:252:16 | true | true | +| test.rs:251:17:251:17 | b | test.rs:251:12:251:17 | [boolean(false)] ... \|\| ... | false | +| test.rs:251:17:251:17 | b | test.rs:251:12:251:17 | [boolean(true)] ... \|\| ... | true | +| test.rs:251:22:251:22 | c | test.rs:251:12:251:22 | [boolean(false)] ... \|\| ... | false | +| test.rs:251:22:251:22 | c | test.rs:251:12:251:22 | [boolean(true)] ... \|\| ... | true | +| test.rs:251:24:253:9 | BlockExpr | test.rs:251:9:255:9 | IfExpr | | +| test.rs:252:13:252:16 | true | test.rs:251:24:253:9 | BlockExpr | | +| test.rs:253:16:255:9 | BlockExpr | test.rs:251:9:255:9 | IfExpr | | +| test.rs:254:13:254:17 | false | test.rs:253:16:255:9 | BlockExpr | | +| test.rs:258:5:264:5 | enter test_if_not_operator | test.rs:258:29:258:29 | a | | +| test.rs:258:5:264:5 | exit test_if_not_operator (normal) | test.rs:258:5:264:5 | exit test_if_not_operator | | +| test.rs:258:29:258:29 | a | test.rs:258:29:258:35 | Param | match | +| test.rs:258:29:258:35 | Param | test.rs:259:13:259:13 | a | | +| test.rs:258:46:264:5 | BlockExpr | test.rs:258:5:264:5 | exit test_if_not_operator (normal) | | +| test.rs:259:9:263:9 | IfExpr | test.rs:258:46:264:5 | BlockExpr | | +| test.rs:259:12:259:13 | [boolean(false)] ! ... | test.rs:262:13:262:17 | false | false | +| test.rs:259:12:259:13 | [boolean(true)] ! ... | test.rs:260:13:260:16 | true | true | +| test.rs:259:13:259:13 | a | test.rs:259:12:259:13 | [boolean(false)] ! ... | true | +| test.rs:259:13:259:13 | a | test.rs:259:12:259:13 | [boolean(true)] ! ... | false | +| test.rs:259:15:261:9 | BlockExpr | test.rs:259:9:263:9 | IfExpr | | +| test.rs:260:13:260:16 | true | test.rs:259:15:261:9 | BlockExpr | | +| test.rs:261:16:263:9 | BlockExpr | test.rs:259:9:263:9 | IfExpr | | +| test.rs:262:13:262:17 | false | test.rs:261:16:263:9 | BlockExpr | | +| test.rs:269:5:271:5 | enter test_question_mark_operator_1 | test.rs:269:38:269:38 | s | | +| test.rs:269:5:271:5 | exit test_question_mark_operator_1 (normal) | test.rs:269:5:271:5 | exit test_question_mark_operator_1 | | +| test.rs:269:38:269:38 | s | test.rs:269:38:269:44 | Param | match | +| test.rs:269:38:269:44 | Param | test.rs:270:9:270:11 | PathExpr | | +| test.rs:269:62:271:5 | BlockExpr | test.rs:269:5:271:5 | exit test_question_mark_operator_1 (normal) | | +| test.rs:270:9:270:11 | PathExpr | test.rs:270:9:270:26 | MethodCallExpr | | +| test.rs:270:9:270:26 | MethodCallExpr | test.rs:270:9:270:27 | TryExpr | | +| test.rs:270:9:270:27 | TryExpr | test.rs:269:5:271:5 | exit test_question_mark_operator_1 (normal) | return | +| test.rs:270:9:270:27 | TryExpr | test.rs:270:31:270:31 | 4 | match | +| test.rs:270:9:270:31 | ... + ... | test.rs:269:62:271:5 | BlockExpr | | +| test.rs:270:31:270:31 | 4 | test.rs:270:9:270:31 | ... + ... | | +| test.rs:273:5:278:5 | enter test_question_mark_operator_2 | test.rs:273:38:273:38 | b | | +| test.rs:273:5:278:5 | exit test_question_mark_operator_2 (normal) | test.rs:273:5:278:5 | exit test_question_mark_operator_2 | | +| test.rs:273:38:273:38 | b | test.rs:273:38:273:52 | Param | match | +| test.rs:273:38:273:52 | Param | test.rs:274:15:274:15 | b | | +| test.rs:273:71:278:5 | BlockExpr | test.rs:273:5:278:5 | exit test_question_mark_operator_2 (normal) | | +| test.rs:274:9:277:9 | MatchExpr | test.rs:273:71:278:5 | BlockExpr | | +| test.rs:274:15:274:15 | b | test.rs:274:15:274:16 | TryExpr | | +| test.rs:274:15:274:16 | TryExpr | test.rs:273:5:278:5 | exit test_question_mark_operator_2 (normal) | return | +| test.rs:274:15:274:16 | TryExpr | test.rs:275:13:275:16 | LiteralPat | match | +| test.rs:275:13:275:16 | LiteralPat | test.rs:275:21:275:24 | PathExpr | match | +| test.rs:275:13:275:16 | LiteralPat | test.rs:276:13:276:17 | LiteralPat | no-match | +| test.rs:275:21:275:24 | PathExpr | test.rs:275:26:275:30 | false | | +| test.rs:275:21:275:31 | CallExpr | test.rs:274:9:277:9 | MatchExpr | | +| test.rs:275:26:275:30 | false | test.rs:275:21:275:31 | CallExpr | | +| test.rs:276:13:276:17 | LiteralPat | test.rs:276:22:276:25 | PathExpr | match | +| test.rs:276:22:276:25 | PathExpr | test.rs:276:27:276:30 | true | | +| test.rs:276:22:276:31 | CallExpr | test.rs:274:9:277:9 | MatchExpr | | +| test.rs:276:27:276:30 | true | test.rs:276:22:276:31 | CallExpr | | +| test.rs:283:5:289:5 | enter test_match | test.rs:283:19:283:29 | maybe_digit | | +| test.rs:283:5:289:5 | exit test_match (normal) | test.rs:283:5:289:5 | exit test_match | | +| test.rs:283:19:283:29 | maybe_digit | test.rs:283:19:283:42 | Param | match | +| test.rs:283:19:283:42 | Param | test.rs:284:15:284:25 | maybe_digit | | +| test.rs:283:52:289:5 | BlockExpr | test.rs:283:5:289:5 | exit test_match (normal) | | +| test.rs:284:9:288:9 | MatchExpr | test.rs:283:52:289:5 | BlockExpr | | +| test.rs:284:15:284:25 | maybe_digit | test.rs:285:13:285:27 | TupleStructPat | | | test.rs:285:13:285:27 | TupleStructPat | test.rs:285:26:285:26 | x | match | -| test.rs:285:13:285:27 | TupleStructPat | test.rs:286:13:286:24 | PathPat | no-match | +| test.rs:285:13:285:27 | TupleStructPat | test.rs:286:13:286:27 | TupleStructPat | no-match | | test.rs:285:26:285:26 | x | test.rs:285:32:285:32 | x | match | -| test.rs:285:32:285:32 | x | test.rs:283:9:287:9 | MatchExpr | | -| test.rs:286:13:286:24 | PathPat | test.rs:286:29:286:29 | 5 | match | -| test.rs:286:29:286:29 | 5 | test.rs:283:9:287:9 | MatchExpr | | -| test.rs:290:5:299:5 | enter test_match_with_return_in_scrutinee | test.rs:290:44:290:54 | maybe_digit | | -| test.rs:290:5:299:5 | exit test_match_with_return_in_scrutinee (normal) | test.rs:290:5:299:5 | exit test_match_with_return_in_scrutinee | | -| test.rs:290:44:290:54 | maybe_digit | test.rs:290:44:290:67 | Param | match | -| test.rs:290:44:290:67 | Param | test.rs:291:19:291:29 | maybe_digit | | -| test.rs:290:77:299:5 | BlockExpr | test.rs:290:5:299:5 | exit test_match_with_return_in_scrutinee (normal) | | -| test.rs:291:9:298:9 | MatchExpr | test.rs:290:77:299:5 | BlockExpr | | -| test.rs:291:16:295:9 | IfExpr | test.rs:296:13:296:27 | TupleStructPat | | -| test.rs:291:19:291:29 | maybe_digit | test.rs:291:34:291:37 | PathExpr | | -| test.rs:291:19:291:40 | ... == ... | test.rs:292:13:292:21 | ExprStmt | true | -| test.rs:291:19:291:40 | ... == ... | test.rs:294:13:294:23 | maybe_digit | false | -| test.rs:291:34:291:37 | PathExpr | test.rs:291:39:291:39 | 3 | | -| test.rs:291:34:291:40 | CallExpr | test.rs:291:19:291:40 | ... == ... | | -| test.rs:291:39:291:39 | 3 | test.rs:291:34:291:40 | CallExpr | | -| test.rs:292:13:292:20 | ReturnExpr | test.rs:290:5:299:5 | exit test_match_with_return_in_scrutinee (normal) | return | -| test.rs:292:13:292:21 | ExprStmt | test.rs:292:20:292:20 | 3 | | -| test.rs:292:20:292:20 | 3 | test.rs:292:13:292:20 | ReturnExpr | | -| test.rs:293:16:295:9 | BlockExpr | test.rs:291:16:295:9 | IfExpr | | -| test.rs:294:13:294:23 | maybe_digit | test.rs:293:16:295:9 | BlockExpr | | -| test.rs:296:13:296:27 | TupleStructPat | test.rs:296:26:296:26 | x | match | -| test.rs:296:13:296:27 | TupleStructPat | test.rs:297:13:297:24 | PathPat | no-match | -| test.rs:296:26:296:26 | x | test.rs:296:32:296:32 | x | match | -| test.rs:296:32:296:32 | x | test.rs:296:36:296:36 | 5 | | -| test.rs:296:32:296:36 | ... + ... | test.rs:291:9:298:9 | MatchExpr | | -| test.rs:296:36:296:36 | 5 | test.rs:296:32:296:36 | ... + ... | | -| test.rs:297:13:297:24 | PathPat | test.rs:297:29:297:29 | 5 | match | -| test.rs:297:29:297:29 | 5 | test.rs:291:9:298:9 | MatchExpr | | -| test.rs:301:5:306:5 | enter test_match_and | test.rs:301:23:301:26 | cond | | -| test.rs:301:5:306:5 | exit test_match_and (normal) | test.rs:301:5:306:5 | exit test_match_and | | -| test.rs:301:23:301:26 | cond | test.rs:301:23:301:32 | Param | match | -| test.rs:301:23:301:32 | Param | test.rs:301:35:301:35 | r | | -| test.rs:301:35:301:35 | r | test.rs:301:35:301:48 | Param | match | -| test.rs:301:35:301:48 | Param | test.rs:302:16:302:16 | r | | -| test.rs:301:59:306:5 | BlockExpr | test.rs:301:5:306:5 | exit test_match_and (normal) | | -| test.rs:302:9:305:18 | ... && ... | test.rs:301:59:306:5 | BlockExpr | | -| test.rs:302:10:305:9 | [boolean(false)] MatchExpr | test.rs:302:9:305:18 | ... && ... | false | -| test.rs:302:10:305:9 | [boolean(true)] MatchExpr | test.rs:305:15:305:18 | cond | true | -| test.rs:302:16:302:16 | r | test.rs:303:13:303:19 | TupleStructPat | | -| test.rs:303:13:303:19 | TupleStructPat | test.rs:303:18:303:18 | a | match | -| test.rs:303:13:303:19 | TupleStructPat | test.rs:304:13:304:13 | WildcardPat | no-match | -| test.rs:303:18:303:18 | a | test.rs:303:24:303:24 | a | match | -| test.rs:303:24:303:24 | a | test.rs:302:10:305:9 | [boolean(false)] MatchExpr | false | -| test.rs:303:24:303:24 | a | test.rs:302:10:305:9 | [boolean(true)] MatchExpr | true | -| test.rs:304:13:304:13 | WildcardPat | test.rs:304:18:304:22 | false | match | -| test.rs:304:18:304:22 | false | test.rs:302:10:305:9 | [boolean(false)] MatchExpr | false | -| test.rs:305:15:305:18 | cond | test.rs:302:9:305:18 | ... && ... | | -| test.rs:311:5:314:5 | enter test_let_match | test.rs:311:23:311:23 | a | | -| test.rs:311:5:314:5 | exit test_let_match (normal) | test.rs:311:5:314:5 | exit test_let_match | | -| test.rs:311:23:311:23 | a | test.rs:311:23:311:36 | Param | match | -| test.rs:311:23:311:36 | Param | test.rs:312:9:312:49 | LetStmt | | -| test.rs:311:39:314:5 | BlockExpr | test.rs:311:5:314:5 | exit test_let_match (normal) | | -| test.rs:312:9:312:49 | LetStmt | test.rs:312:23:312:23 | a | | -| test.rs:312:13:312:19 | TupleStructPat | test.rs:312:18:312:18 | n | match | -| test.rs:312:13:312:19 | TupleStructPat | test.rs:312:32:312:46 | "Expected some" | no-match | -| test.rs:312:18:312:18 | n | test.rs:313:9:313:9 | n | match | -| test.rs:312:23:312:23 | a | test.rs:312:13:312:19 | TupleStructPat | | -| test.rs:312:32:312:46 | "Expected some" | test.rs:312:30:312:48 | BlockExpr | | -| test.rs:313:9:313:9 | n | test.rs:311:39:314:5 | BlockExpr | | -| test.rs:316:5:322:5 | enter test_let_with_return | test.rs:316:29:316:29 | m | | -| test.rs:316:5:322:5 | exit test_let_with_return (normal) | test.rs:316:5:322:5 | exit test_let_with_return | | -| test.rs:316:29:316:29 | m | test.rs:316:29:316:42 | Param | match | -| test.rs:316:29:316:42 | Param | test.rs:317:9:320:10 | LetStmt | | -| test.rs:316:45:322:5 | BlockExpr | test.rs:316:5:322:5 | exit test_let_with_return (normal) | | -| test.rs:317:9:320:10 | LetStmt | test.rs:317:25:317:25 | m | | -| test.rs:317:13:317:15 | ret | test.rs:321:9:321:12 | true | match | -| test.rs:317:19:320:9 | MatchExpr | test.rs:317:13:317:15 | ret | | -| test.rs:317:25:317:25 | m | test.rs:318:13:318:21 | TupleStructPat | | -| test.rs:318:13:318:21 | TupleStructPat | test.rs:318:18:318:20 | ret | match | -| test.rs:318:13:318:21 | TupleStructPat | test.rs:319:13:319:16 | None | no-match | -| test.rs:318:18:318:20 | ret | test.rs:318:26:318:28 | ret | match | -| test.rs:318:26:318:28 | ret | test.rs:317:19:320:9 | MatchExpr | | -| test.rs:319:13:319:16 | None | test.rs:319:28:319:32 | false | match | -| test.rs:319:21:319:32 | ReturnExpr | test.rs:316:5:322:5 | exit test_let_with_return (normal) | return | -| test.rs:319:28:319:32 | false | test.rs:319:21:319:32 | ReturnExpr | | -| test.rs:321:9:321:12 | true | test.rs:316:45:322:5 | BlockExpr | | -| test.rs:327:5:330:5 | enter empty_tuple_pattern | test.rs:327:28:327:31 | unit | | -| test.rs:327:5:330:5 | exit empty_tuple_pattern (normal) | test.rs:327:5:330:5 | exit empty_tuple_pattern | | -| test.rs:327:28:327:31 | unit | test.rs:327:28:327:35 | Param | match | -| test.rs:327:28:327:35 | Param | test.rs:328:9:328:22 | LetStmt | | -| test.rs:328:9:328:22 | LetStmt | test.rs:328:18:328:21 | unit | | -| test.rs:328:13:328:14 | TuplePat | test.rs:329:9:329:15 | ExprStmt | match | -| test.rs:328:18:328:21 | unit | test.rs:328:13:328:14 | TuplePat | | -| test.rs:329:9:329:14 | ReturnExpr | test.rs:327:5:330:5 | exit empty_tuple_pattern (normal) | return | -| test.rs:329:9:329:15 | ExprStmt | test.rs:329:9:329:14 | ReturnExpr | | -| test.rs:334:5:338:5 | enter empty_struct_pattern | test.rs:334:29:334:30 | st | | -| test.rs:334:5:338:5 | exit empty_struct_pattern (normal) | test.rs:334:5:338:5 | exit empty_struct_pattern | | -| test.rs:334:29:334:30 | st | test.rs:334:29:334:40 | Param | match | -| test.rs:334:29:334:40 | Param | test.rs:335:15:335:16 | st | | -| test.rs:334:50:338:5 | BlockExpr | test.rs:334:5:338:5 | exit empty_struct_pattern (normal) | | -| test.rs:335:9:337:9 | MatchExpr | test.rs:334:50:338:5 | BlockExpr | | -| test.rs:335:15:335:16 | st | test.rs:336:13:336:23 | RecordPat | | -| test.rs:336:13:336:23 | RecordPat | test.rs:336:28:336:28 | 1 | match | -| test.rs:336:28:336:28 | 1 | test.rs:335:9:337:9 | MatchExpr | | -| test.rs:340:5:347:5 | enter range_pattern | test.rs:341:15:341:16 | 42 | | -| test.rs:340:5:347:5 | exit range_pattern (normal) | test.rs:340:5:347:5 | exit range_pattern | | -| test.rs:340:31:347:5 | BlockExpr | test.rs:340:5:347:5 | exit range_pattern (normal) | | -| test.rs:341:9:346:9 | MatchExpr | test.rs:340:31:347:5 | BlockExpr | | -| test.rs:341:15:341:16 | 42 | test.rs:342:13:342:15 | RangePat | | -| test.rs:342:13:342:15 | RangePat | test.rs:342:15:342:15 | LiteralPat | match | -| test.rs:342:13:342:15 | RangePat | test.rs:343:13:343:16 | RangePat | no-match | -| test.rs:342:15:342:15 | LiteralPat | test.rs:342:20:342:20 | 1 | match | -| test.rs:342:15:342:15 | LiteralPat | test.rs:343:13:343:16 | RangePat | no-match | -| test.rs:342:20:342:20 | 1 | test.rs:341:9:346:9 | MatchExpr | | -| test.rs:343:13:343:13 | LiteralPat | test.rs:343:16:343:16 | LiteralPat | match | -| test.rs:343:13:343:13 | LiteralPat | test.rs:344:13:344:15 | RangePat | no-match | -| test.rs:343:13:343:16 | RangePat | test.rs:343:13:343:13 | LiteralPat | match | -| test.rs:343:13:343:16 | RangePat | test.rs:344:13:344:15 | RangePat | no-match | -| test.rs:343:16:343:16 | LiteralPat | test.rs:343:21:343:21 | 2 | match | -| test.rs:343:16:343:16 | LiteralPat | test.rs:344:13:344:15 | RangePat | no-match | -| test.rs:343:21:343:21 | 2 | test.rs:341:9:346:9 | MatchExpr | | -| test.rs:344:13:344:13 | LiteralPat | test.rs:344:20:344:20 | 3 | match | -| test.rs:344:13:344:13 | LiteralPat | test.rs:345:13:345:14 | RestPat | no-match | -| test.rs:344:13:344:15 | RangePat | test.rs:344:13:344:13 | LiteralPat | match | -| test.rs:344:13:344:15 | RangePat | test.rs:345:13:345:14 | RestPat | no-match | -| test.rs:344:20:344:20 | 3 | test.rs:341:9:346:9 | MatchExpr | | -| test.rs:345:13:345:14 | RestPat | test.rs:345:19:345:19 | 4 | match | -| test.rs:345:19:345:19 | 4 | test.rs:341:9:346:9 | MatchExpr | | -| test.rs:351:5:356:5 | enter test_infinite_loop | test.rs:352:9:354:9 | ExprStmt | | -| test.rs:352:9:354:9 | ExprStmt | test.rs:353:13:353:13 | 1 | | -| test.rs:352:14:354:9 | BlockExpr | test.rs:353:13:353:13 | 1 | | -| test.rs:353:13:353:13 | 1 | test.rs:352:14:354:9 | BlockExpr | | -| test.rs:359:1:364:1 | enter dead_code | test.rs:360:5:362:5 | ExprStmt | | -| test.rs:359:1:364:1 | exit dead_code (normal) | test.rs:359:1:364:1 | exit dead_code | | -| test.rs:360:5:362:5 | ExprStmt | test.rs:360:9:360:12 | true | | -| test.rs:360:9:360:12 | true | test.rs:361:9:361:17 | ExprStmt | true | -| test.rs:361:9:361:16 | ReturnExpr | test.rs:359:1:364:1 | exit dead_code (normal) | return | -| test.rs:361:9:361:17 | ExprStmt | test.rs:361:16:361:16 | 0 | | -| test.rs:361:16:361:16 | 0 | test.rs:361:9:361:16 | ReturnExpr | | -| test.rs:366:1:379:1 | enter labelled_block1 | test.rs:367:5:378:6 | LetStmt | | -| test.rs:366:1:379:1 | exit labelled_block1 (normal) | test.rs:366:1:379:1 | exit labelled_block1 | | -| test.rs:366:29:379:1 | BlockExpr | test.rs:366:1:379:1 | exit labelled_block1 (normal) | | -| test.rs:367:5:378:6 | LetStmt | test.rs:368:9:368:19 | ExprStmt | | -| test.rs:367:9:367:14 | result | test.rs:366:29:379:1 | BlockExpr | match | -| test.rs:367:18:378:5 | BlockExpr | test.rs:367:9:367:14 | result | | -| test.rs:368:9:368:16 | PathExpr | test.rs:368:9:368:18 | CallExpr | | -| test.rs:368:9:368:18 | CallExpr | test.rs:369:9:371:9 | ExprStmt | | -| test.rs:368:9:368:19 | ExprStmt | test.rs:368:9:368:16 | PathExpr | | -| test.rs:369:9:371:9 | ExprStmt | test.rs:369:12:369:28 | PathExpr | | -| test.rs:369:9:371:9 | IfExpr | test.rs:372:9:372:24 | ExprStmt | | -| test.rs:369:12:369:28 | PathExpr | test.rs:369:12:369:30 | CallExpr | | -| test.rs:369:12:369:30 | CallExpr | test.rs:369:9:371:9 | IfExpr | false | -| test.rs:369:12:369:30 | CallExpr | test.rs:370:13:370:27 | ExprStmt | true | -| test.rs:370:13:370:26 | BreakExpr | test.rs:367:18:378:5 | BlockExpr | break | -| test.rs:370:13:370:27 | ExprStmt | test.rs:370:26:370:26 | 1 | | -| test.rs:370:26:370:26 | 1 | test.rs:370:13:370:26 | BreakExpr | | -| test.rs:372:9:372:21 | PathExpr | test.rs:372:9:372:23 | CallExpr | | -| test.rs:372:9:372:23 | CallExpr | test.rs:373:9:375:9 | ExprStmt | | -| test.rs:372:9:372:24 | ExprStmt | test.rs:372:9:372:21 | PathExpr | | -| test.rs:373:9:375:9 | ExprStmt | test.rs:373:12:373:28 | PathExpr | | -| test.rs:373:9:375:9 | IfExpr | test.rs:376:9:376:24 | ExprStmt | | -| test.rs:373:12:373:28 | PathExpr | test.rs:373:12:373:30 | CallExpr | | -| test.rs:373:12:373:30 | CallExpr | test.rs:373:9:375:9 | IfExpr | false | -| test.rs:373:12:373:30 | CallExpr | test.rs:374:13:374:27 | ExprStmt | true | -| test.rs:374:13:374:26 | BreakExpr | test.rs:367:18:378:5 | BlockExpr | break | -| test.rs:374:13:374:27 | ExprStmt | test.rs:374:26:374:26 | 2 | | -| test.rs:374:26:374:26 | 2 | test.rs:374:13:374:26 | BreakExpr | | -| test.rs:376:9:376:21 | PathExpr | test.rs:376:9:376:23 | CallExpr | | -| test.rs:376:9:376:23 | CallExpr | test.rs:377:9:377:9 | 3 | | -| test.rs:376:9:376:24 | ExprStmt | test.rs:376:9:376:21 | PathExpr | | -| test.rs:377:9:377:9 | 3 | test.rs:367:18:378:5 | BlockExpr | | -| test.rs:381:1:389:1 | enter labelled_block2 | test.rs:382:5:388:6 | LetStmt | | -| test.rs:381:1:389:1 | exit labelled_block2 (normal) | test.rs:381:1:389:1 | exit labelled_block2 | | -| test.rs:381:29:389:1 | BlockExpr | test.rs:381:1:389:1 | exit labelled_block2 (normal) | | -| test.rs:382:5:388:6 | LetStmt | test.rs:383:9:383:34 | LetStmt | | -| test.rs:382:9:382:14 | result | test.rs:381:29:389:1 | BlockExpr | match | -| test.rs:382:18:388:5 | BlockExpr | test.rs:382:9:382:14 | result | | -| test.rs:383:9:383:34 | LetStmt | test.rs:383:30:383:33 | PathExpr | | -| test.rs:383:13:383:13 | x | test.rs:384:9:386:10 | LetStmt | match | -| test.rs:383:30:383:33 | PathExpr | test.rs:383:13:383:13 | x | | -| test.rs:384:9:386:10 | LetStmt | test.rs:384:23:384:23 | x | | -| test.rs:384:13:384:19 | TupleStructPat | test.rs:384:18:384:18 | y | match | -| test.rs:384:13:384:19 | TupleStructPat | test.rs:385:13:385:27 | ExprStmt | no-match | -| test.rs:384:18:384:18 | y | test.rs:387:9:387:9 | x | match | -| test.rs:384:23:384:23 | x | test.rs:384:13:384:19 | TupleStructPat | | -| test.rs:385:13:385:26 | BreakExpr | test.rs:382:18:388:5 | BlockExpr | break | -| test.rs:385:13:385:27 | ExprStmt | test.rs:385:26:385:26 | 1 | | -| test.rs:385:26:385:26 | 1 | test.rs:385:13:385:26 | BreakExpr | | -| test.rs:387:9:387:9 | x | test.rs:382:18:388:5 | BlockExpr | | -| test.rs:391:1:397:1 | enter test_nested_function | test.rs:392:5:392:18 | LetStmt | | -| test.rs:391:1:397:1 | exit test_nested_function (normal) | test.rs:391:1:397:1 | exit test_nested_function | | -| test.rs:391:27:397:1 | BlockExpr | test.rs:391:1:397:1 | exit test_nested_function (normal) | | -| test.rs:392:5:392:18 | LetStmt | test.rs:392:17:392:17 | 0 | | -| test.rs:392:9:392:13 | x | test.rs:393:5:395:5 | nested | match | -| test.rs:392:17:392:17 | 0 | test.rs:392:9:392:13 | x | | -| test.rs:393:5:395:5 | enter nested | test.rs:393:15:393:15 | x | | -| test.rs:393:5:395:5 | exit nested (normal) | test.rs:393:5:395:5 | exit nested | | -| test.rs:393:5:395:5 | nested | test.rs:396:5:396:19 | ExprStmt | | -| test.rs:393:15:393:15 | x | test.rs:393:15:393:25 | Param | match | -| test.rs:393:15:393:25 | Param | test.rs:394:9:394:16 | ExprStmt | | -| test.rs:393:28:395:5 | BlockExpr | test.rs:393:5:395:5 | exit nested (normal) | | -| test.rs:394:9:394:10 | * ... | test.rs:394:15:394:15 | 1 | | -| test.rs:394:9:394:15 | ... += ... | test.rs:393:28:395:5 | BlockExpr | | -| test.rs:394:9:394:16 | ExprStmt | test.rs:394:10:394:10 | x | | -| test.rs:394:10:394:10 | x | test.rs:394:9:394:10 | * ... | | -| test.rs:394:15:394:15 | 1 | test.rs:394:9:394:15 | ... += ... | | -| test.rs:396:5:396:10 | PathExpr | test.rs:396:17:396:17 | x | | -| test.rs:396:5:396:18 | CallExpr | test.rs:391:27:397:1 | BlockExpr | | -| test.rs:396:5:396:19 | ExprStmt | test.rs:396:5:396:10 | PathExpr | | -| test.rs:396:12:396:17 | RefExpr | test.rs:396:5:396:18 | CallExpr | | -| test.rs:396:17:396:17 | x | test.rs:396:12:396:17 | RefExpr | | +| test.rs:285:32:285:32 | x | test.rs:285:36:285:37 | 10 | | +| test.rs:285:32:285:37 | ... < ... | test.rs:285:42:285:42 | x | true | +| test.rs:285:32:285:37 | ... < ... | test.rs:286:13:286:27 | TupleStructPat | false | +| test.rs:285:36:285:37 | 10 | test.rs:285:32:285:37 | ... < ... | | +| test.rs:285:42:285:42 | x | test.rs:285:46:285:46 | 5 | | +| test.rs:285:42:285:46 | ... + ... | test.rs:284:9:288:9 | MatchExpr | | +| test.rs:285:46:285:46 | 5 | test.rs:285:42:285:46 | ... + ... | | +| test.rs:286:13:286:27 | TupleStructPat | test.rs:286:26:286:26 | x | match | +| test.rs:286:13:286:27 | TupleStructPat | test.rs:287:13:287:24 | PathPat | no-match | +| test.rs:286:26:286:26 | x | test.rs:286:32:286:32 | x | match | +| test.rs:286:32:286:32 | x | test.rs:284:9:288:9 | MatchExpr | | +| test.rs:287:13:287:24 | PathPat | test.rs:287:29:287:29 | 5 | match | +| test.rs:287:29:287:29 | 5 | test.rs:284:9:288:9 | MatchExpr | | +| test.rs:291:5:300:5 | enter test_match_with_return_in_scrutinee | test.rs:291:44:291:54 | maybe_digit | | +| test.rs:291:5:300:5 | exit test_match_with_return_in_scrutinee (normal) | test.rs:291:5:300:5 | exit test_match_with_return_in_scrutinee | | +| test.rs:291:44:291:54 | maybe_digit | test.rs:291:44:291:67 | Param | match | +| test.rs:291:44:291:67 | Param | test.rs:292:19:292:29 | maybe_digit | | +| test.rs:291:77:300:5 | BlockExpr | test.rs:291:5:300:5 | exit test_match_with_return_in_scrutinee (normal) | | +| test.rs:292:9:299:9 | MatchExpr | test.rs:291:77:300:5 | BlockExpr | | +| test.rs:292:16:296:9 | IfExpr | test.rs:297:13:297:27 | TupleStructPat | | +| test.rs:292:19:292:29 | maybe_digit | test.rs:292:34:292:37 | PathExpr | | +| test.rs:292:19:292:40 | ... == ... | test.rs:293:13:293:21 | ExprStmt | true | +| test.rs:292:19:292:40 | ... == ... | test.rs:295:13:295:23 | maybe_digit | false | +| test.rs:292:34:292:37 | PathExpr | test.rs:292:39:292:39 | 3 | | +| test.rs:292:34:292:40 | CallExpr | test.rs:292:19:292:40 | ... == ... | | +| test.rs:292:39:292:39 | 3 | test.rs:292:34:292:40 | CallExpr | | +| test.rs:293:13:293:20 | ReturnExpr | test.rs:291:5:300:5 | exit test_match_with_return_in_scrutinee (normal) | return | +| test.rs:293:13:293:21 | ExprStmt | test.rs:293:20:293:20 | 3 | | +| test.rs:293:20:293:20 | 3 | test.rs:293:13:293:20 | ReturnExpr | | +| test.rs:294:16:296:9 | BlockExpr | test.rs:292:16:296:9 | IfExpr | | +| test.rs:295:13:295:23 | maybe_digit | test.rs:294:16:296:9 | BlockExpr | | +| test.rs:297:13:297:27 | TupleStructPat | test.rs:297:26:297:26 | x | match | +| test.rs:297:13:297:27 | TupleStructPat | test.rs:298:13:298:24 | PathPat | no-match | +| test.rs:297:26:297:26 | x | test.rs:297:32:297:32 | x | match | +| test.rs:297:32:297:32 | x | test.rs:297:36:297:36 | 5 | | +| test.rs:297:32:297:36 | ... + ... | test.rs:292:9:299:9 | MatchExpr | | +| test.rs:297:36:297:36 | 5 | test.rs:297:32:297:36 | ... + ... | | +| test.rs:298:13:298:24 | PathPat | test.rs:298:29:298:29 | 5 | match | +| test.rs:298:29:298:29 | 5 | test.rs:292:9:299:9 | MatchExpr | | +| test.rs:302:5:307:5 | enter test_match_and | test.rs:302:23:302:26 | cond | | +| test.rs:302:5:307:5 | exit test_match_and (normal) | test.rs:302:5:307:5 | exit test_match_and | | +| test.rs:302:23:302:26 | cond | test.rs:302:23:302:32 | Param | match | +| test.rs:302:23:302:32 | Param | test.rs:302:35:302:35 | r | | +| test.rs:302:35:302:35 | r | test.rs:302:35:302:48 | Param | match | +| test.rs:302:35:302:48 | Param | test.rs:303:16:303:16 | r | | +| test.rs:302:59:307:5 | BlockExpr | test.rs:302:5:307:5 | exit test_match_and (normal) | | +| test.rs:303:9:306:18 | ... && ... | test.rs:302:59:307:5 | BlockExpr | | +| test.rs:303:10:306:9 | [boolean(false)] MatchExpr | test.rs:303:9:306:18 | ... && ... | false | +| test.rs:303:10:306:9 | [boolean(true)] MatchExpr | test.rs:306:15:306:18 | cond | true | +| test.rs:303:16:303:16 | r | test.rs:304:13:304:19 | TupleStructPat | | +| test.rs:304:13:304:19 | TupleStructPat | test.rs:304:18:304:18 | a | match | +| test.rs:304:13:304:19 | TupleStructPat | test.rs:305:13:305:13 | WildcardPat | no-match | +| test.rs:304:18:304:18 | a | test.rs:304:24:304:24 | a | match | +| test.rs:304:24:304:24 | a | test.rs:303:10:306:9 | [boolean(false)] MatchExpr | false | +| test.rs:304:24:304:24 | a | test.rs:303:10:306:9 | [boolean(true)] MatchExpr | true | +| test.rs:305:13:305:13 | WildcardPat | test.rs:305:18:305:22 | false | match | +| test.rs:305:18:305:22 | false | test.rs:303:10:306:9 | [boolean(false)] MatchExpr | false | +| test.rs:306:15:306:18 | cond | test.rs:303:9:306:18 | ... && ... | | +| test.rs:309:5:314:5 | enter test_match_with_no_arms | test.rs:309:35:309:35 | r | | +| test.rs:309:5:314:5 | exit test_match_with_no_arms (normal) | test.rs:309:5:314:5 | exit test_match_with_no_arms | | +| test.rs:309:35:309:35 | r | test.rs:309:35:309:58 | Param | match | +| test.rs:309:35:309:58 | Param | test.rs:310:15:310:15 | r | | +| test.rs:309:66:314:5 | BlockExpr | test.rs:309:5:314:5 | exit test_match_with_no_arms (normal) | | +| test.rs:310:9:313:9 | MatchExpr | test.rs:309:66:314:5 | BlockExpr | | +| test.rs:310:15:310:15 | r | test.rs:311:13:311:21 | TupleStructPat | | +| test.rs:311:13:311:21 | TupleStructPat | test.rs:311:16:311:20 | value | match | +| test.rs:311:13:311:21 | TupleStructPat | test.rs:312:13:312:22 | TupleStructPat | no-match | +| test.rs:311:16:311:20 | value | test.rs:311:26:311:30 | value | match | +| test.rs:311:26:311:30 | value | test.rs:310:9:313:9 | MatchExpr | | +| test.rs:312:13:312:22 | TupleStructPat | test.rs:312:17:312:21 | never | match | +| test.rs:312:17:312:21 | never | test.rs:312:33:312:37 | never | match | +| test.rs:319:5:322:5 | enter test_let_match | test.rs:319:23:319:23 | a | | +| test.rs:319:5:322:5 | exit test_let_match (normal) | test.rs:319:5:322:5 | exit test_let_match | | +| test.rs:319:23:319:23 | a | test.rs:319:23:319:36 | Param | match | +| test.rs:319:23:319:36 | Param | test.rs:320:9:320:49 | LetStmt | | +| test.rs:319:39:322:5 | BlockExpr | test.rs:319:5:322:5 | exit test_let_match (normal) | | +| test.rs:320:9:320:49 | LetStmt | test.rs:320:23:320:23 | a | | +| test.rs:320:13:320:19 | TupleStructPat | test.rs:320:18:320:18 | n | match | +| test.rs:320:13:320:19 | TupleStructPat | test.rs:320:32:320:46 | "Expected some" | no-match | +| test.rs:320:18:320:18 | n | test.rs:321:9:321:9 | n | match | +| test.rs:320:23:320:23 | a | test.rs:320:13:320:19 | TupleStructPat | | +| test.rs:320:32:320:46 | "Expected some" | test.rs:320:30:320:48 | BlockExpr | | +| test.rs:321:9:321:9 | n | test.rs:319:39:322:5 | BlockExpr | | +| test.rs:324:5:330:5 | enter test_let_with_return | test.rs:324:29:324:29 | m | | +| test.rs:324:5:330:5 | exit test_let_with_return (normal) | test.rs:324:5:330:5 | exit test_let_with_return | | +| test.rs:324:29:324:29 | m | test.rs:324:29:324:42 | Param | match | +| test.rs:324:29:324:42 | Param | test.rs:325:9:328:10 | LetStmt | | +| test.rs:324:45:330:5 | BlockExpr | test.rs:324:5:330:5 | exit test_let_with_return (normal) | | +| test.rs:325:9:328:10 | LetStmt | test.rs:325:25:325:25 | m | | +| test.rs:325:13:325:15 | ret | test.rs:329:9:329:12 | true | match | +| test.rs:325:19:328:9 | MatchExpr | test.rs:325:13:325:15 | ret | | +| test.rs:325:25:325:25 | m | test.rs:326:13:326:21 | TupleStructPat | | +| test.rs:326:13:326:21 | TupleStructPat | test.rs:326:18:326:20 | ret | match | +| test.rs:326:13:326:21 | TupleStructPat | test.rs:327:13:327:16 | None | no-match | +| test.rs:326:18:326:20 | ret | test.rs:326:26:326:28 | ret | match | +| test.rs:326:26:326:28 | ret | test.rs:325:19:328:9 | MatchExpr | | +| test.rs:327:13:327:16 | None | test.rs:327:28:327:32 | false | match | +| test.rs:327:21:327:32 | ReturnExpr | test.rs:324:5:330:5 | exit test_let_with_return (normal) | return | +| test.rs:327:28:327:32 | false | test.rs:327:21:327:32 | ReturnExpr | | +| test.rs:329:9:329:12 | true | test.rs:324:45:330:5 | BlockExpr | | +| test.rs:335:5:338:5 | enter empty_tuple_pattern | test.rs:335:28:335:31 | unit | | +| test.rs:335:5:338:5 | exit empty_tuple_pattern (normal) | test.rs:335:5:338:5 | exit empty_tuple_pattern | | +| test.rs:335:28:335:31 | unit | test.rs:335:28:335:35 | Param | match | +| test.rs:335:28:335:35 | Param | test.rs:336:9:336:22 | LetStmt | | +| test.rs:336:9:336:22 | LetStmt | test.rs:336:18:336:21 | unit | | +| test.rs:336:13:336:14 | TuplePat | test.rs:337:9:337:15 | ExprStmt | match | +| test.rs:336:18:336:21 | unit | test.rs:336:13:336:14 | TuplePat | | +| test.rs:337:9:337:14 | ReturnExpr | test.rs:335:5:338:5 | exit empty_tuple_pattern (normal) | return | +| test.rs:337:9:337:15 | ExprStmt | test.rs:337:9:337:14 | ReturnExpr | | +| test.rs:342:5:346:5 | enter empty_struct_pattern | test.rs:342:29:342:30 | st | | +| test.rs:342:5:346:5 | exit empty_struct_pattern (normal) | test.rs:342:5:346:5 | exit empty_struct_pattern | | +| test.rs:342:29:342:30 | st | test.rs:342:29:342:40 | Param | match | +| test.rs:342:29:342:40 | Param | test.rs:343:15:343:16 | st | | +| test.rs:342:50:346:5 | BlockExpr | test.rs:342:5:346:5 | exit empty_struct_pattern (normal) | | +| test.rs:343:9:345:9 | MatchExpr | test.rs:342:50:346:5 | BlockExpr | | +| test.rs:343:15:343:16 | st | test.rs:344:13:344:23 | RecordPat | | +| test.rs:344:13:344:23 | RecordPat | test.rs:344:28:344:28 | 1 | match | +| test.rs:344:28:344:28 | 1 | test.rs:343:9:345:9 | MatchExpr | | +| test.rs:348:5:355:5 | enter range_pattern | test.rs:349:15:349:16 | 42 | | +| test.rs:348:5:355:5 | exit range_pattern (normal) | test.rs:348:5:355:5 | exit range_pattern | | +| test.rs:348:31:355:5 | BlockExpr | test.rs:348:5:355:5 | exit range_pattern (normal) | | +| test.rs:349:9:354:9 | MatchExpr | test.rs:348:31:355:5 | BlockExpr | | +| test.rs:349:15:349:16 | 42 | test.rs:350:13:350:15 | RangePat | | +| test.rs:350:13:350:15 | RangePat | test.rs:350:15:350:15 | LiteralPat | match | +| test.rs:350:13:350:15 | RangePat | test.rs:351:13:351:16 | RangePat | no-match | +| test.rs:350:15:350:15 | LiteralPat | test.rs:350:20:350:20 | 1 | match | +| test.rs:350:15:350:15 | LiteralPat | test.rs:351:13:351:16 | RangePat | no-match | +| test.rs:350:20:350:20 | 1 | test.rs:349:9:354:9 | MatchExpr | | +| test.rs:351:13:351:13 | LiteralPat | test.rs:351:16:351:16 | LiteralPat | match | +| test.rs:351:13:351:13 | LiteralPat | test.rs:352:13:352:15 | RangePat | no-match | +| test.rs:351:13:351:16 | RangePat | test.rs:351:13:351:13 | LiteralPat | match | +| test.rs:351:13:351:16 | RangePat | test.rs:352:13:352:15 | RangePat | no-match | +| test.rs:351:16:351:16 | LiteralPat | test.rs:351:21:351:21 | 2 | match | +| test.rs:351:16:351:16 | LiteralPat | test.rs:352:13:352:15 | RangePat | no-match | +| test.rs:351:21:351:21 | 2 | test.rs:349:9:354:9 | MatchExpr | | +| test.rs:352:13:352:13 | LiteralPat | test.rs:352:20:352:20 | 3 | match | +| test.rs:352:13:352:13 | LiteralPat | test.rs:353:13:353:14 | RestPat | no-match | +| test.rs:352:13:352:15 | RangePat | test.rs:352:13:352:13 | LiteralPat | match | +| test.rs:352:13:352:15 | RangePat | test.rs:353:13:353:14 | RestPat | no-match | +| test.rs:352:20:352:20 | 3 | test.rs:349:9:354:9 | MatchExpr | | +| test.rs:353:13:353:14 | RestPat | test.rs:353:19:353:19 | 4 | match | +| test.rs:353:19:353:19 | 4 | test.rs:349:9:354:9 | MatchExpr | | +| test.rs:359:5:364:5 | enter test_infinite_loop | test.rs:360:9:362:9 | ExprStmt | | +| test.rs:360:9:362:9 | ExprStmt | test.rs:361:13:361:13 | 1 | | +| test.rs:360:14:362:9 | BlockExpr | test.rs:361:13:361:13 | 1 | | +| test.rs:361:13:361:13 | 1 | test.rs:360:14:362:9 | BlockExpr | | +| test.rs:367:1:372:1 | enter dead_code | test.rs:368:5:370:5 | ExprStmt | | +| test.rs:367:1:372:1 | exit dead_code (normal) | test.rs:367:1:372:1 | exit dead_code | | +| test.rs:368:5:370:5 | ExprStmt | test.rs:368:9:368:12 | true | | +| test.rs:368:9:368:12 | true | test.rs:369:9:369:17 | ExprStmt | true | +| test.rs:369:9:369:16 | ReturnExpr | test.rs:367:1:372:1 | exit dead_code (normal) | return | +| test.rs:369:9:369:17 | ExprStmt | test.rs:369:16:369:16 | 0 | | +| test.rs:369:16:369:16 | 0 | test.rs:369:9:369:16 | ReturnExpr | | +| test.rs:374:1:387:1 | enter labelled_block1 | test.rs:375:5:386:6 | LetStmt | | +| test.rs:374:1:387:1 | exit labelled_block1 (normal) | test.rs:374:1:387:1 | exit labelled_block1 | | +| test.rs:374:29:387:1 | BlockExpr | test.rs:374:1:387:1 | exit labelled_block1 (normal) | | +| test.rs:375:5:386:6 | LetStmt | test.rs:376:9:376:19 | ExprStmt | | +| test.rs:375:9:375:14 | result | test.rs:374:29:387:1 | BlockExpr | match | +| test.rs:375:18:386:5 | BlockExpr | test.rs:375:9:375:14 | result | | +| test.rs:376:9:376:16 | PathExpr | test.rs:376:9:376:18 | CallExpr | | +| test.rs:376:9:376:18 | CallExpr | test.rs:377:9:379:9 | ExprStmt | | +| test.rs:376:9:376:19 | ExprStmt | test.rs:376:9:376:16 | PathExpr | | +| test.rs:377:9:379:9 | ExprStmt | test.rs:377:12:377:28 | PathExpr | | +| test.rs:377:9:379:9 | IfExpr | test.rs:380:9:380:24 | ExprStmt | | +| test.rs:377:12:377:28 | PathExpr | test.rs:377:12:377:30 | CallExpr | | +| test.rs:377:12:377:30 | CallExpr | test.rs:377:9:379:9 | IfExpr | false | +| test.rs:377:12:377:30 | CallExpr | test.rs:378:13:378:27 | ExprStmt | true | +| test.rs:378:13:378:26 | BreakExpr | test.rs:375:18:386:5 | BlockExpr | break | +| test.rs:378:13:378:27 | ExprStmt | test.rs:378:26:378:26 | 1 | | +| test.rs:378:26:378:26 | 1 | test.rs:378:13:378:26 | BreakExpr | | +| test.rs:380:9:380:21 | PathExpr | test.rs:380:9:380:23 | CallExpr | | +| test.rs:380:9:380:23 | CallExpr | test.rs:381:9:383:9 | ExprStmt | | +| test.rs:380:9:380:24 | ExprStmt | test.rs:380:9:380:21 | PathExpr | | +| test.rs:381:9:383:9 | ExprStmt | test.rs:381:12:381:28 | PathExpr | | +| test.rs:381:9:383:9 | IfExpr | test.rs:384:9:384:24 | ExprStmt | | +| test.rs:381:12:381:28 | PathExpr | test.rs:381:12:381:30 | CallExpr | | +| test.rs:381:12:381:30 | CallExpr | test.rs:381:9:383:9 | IfExpr | false | +| test.rs:381:12:381:30 | CallExpr | test.rs:382:13:382:27 | ExprStmt | true | +| test.rs:382:13:382:26 | BreakExpr | test.rs:375:18:386:5 | BlockExpr | break | +| test.rs:382:13:382:27 | ExprStmt | test.rs:382:26:382:26 | 2 | | +| test.rs:382:26:382:26 | 2 | test.rs:382:13:382:26 | BreakExpr | | +| test.rs:384:9:384:21 | PathExpr | test.rs:384:9:384:23 | CallExpr | | +| test.rs:384:9:384:23 | CallExpr | test.rs:385:9:385:9 | 3 | | +| test.rs:384:9:384:24 | ExprStmt | test.rs:384:9:384:21 | PathExpr | | +| test.rs:385:9:385:9 | 3 | test.rs:375:18:386:5 | BlockExpr | | +| test.rs:389:1:397:1 | enter labelled_block2 | test.rs:390:5:396:6 | LetStmt | | +| test.rs:389:1:397:1 | exit labelled_block2 (normal) | test.rs:389:1:397:1 | exit labelled_block2 | | +| test.rs:389:29:397:1 | BlockExpr | test.rs:389:1:397:1 | exit labelled_block2 (normal) | | +| test.rs:390:5:396:6 | LetStmt | test.rs:391:9:391:34 | LetStmt | | +| test.rs:390:9:390:14 | result | test.rs:389:29:397:1 | BlockExpr | match | +| test.rs:390:18:396:5 | BlockExpr | test.rs:390:9:390:14 | result | | +| test.rs:391:9:391:34 | LetStmt | test.rs:391:30:391:33 | PathExpr | | +| test.rs:391:13:391:13 | x | test.rs:392:9:394:10 | LetStmt | match | +| test.rs:391:30:391:33 | PathExpr | test.rs:391:13:391:13 | x | | +| test.rs:392:9:394:10 | LetStmt | test.rs:392:23:392:23 | x | | +| test.rs:392:13:392:19 | TupleStructPat | test.rs:392:18:392:18 | y | match | +| test.rs:392:13:392:19 | TupleStructPat | test.rs:393:13:393:27 | ExprStmt | no-match | +| test.rs:392:18:392:18 | y | test.rs:395:9:395:9 | x | match | +| test.rs:392:23:392:23 | x | test.rs:392:13:392:19 | TupleStructPat | | +| test.rs:393:13:393:26 | BreakExpr | test.rs:390:18:396:5 | BlockExpr | break | +| test.rs:393:13:393:27 | ExprStmt | test.rs:393:26:393:26 | 1 | | +| test.rs:393:26:393:26 | 1 | test.rs:393:13:393:26 | BreakExpr | | +| test.rs:395:9:395:9 | x | test.rs:390:18:396:5 | BlockExpr | | +| test.rs:399:1:405:1 | enter test_nested_function | test.rs:400:5:400:18 | LetStmt | | +| test.rs:399:1:405:1 | exit test_nested_function (normal) | test.rs:399:1:405:1 | exit test_nested_function | | +| test.rs:399:27:405:1 | BlockExpr | test.rs:399:1:405:1 | exit test_nested_function (normal) | | +| test.rs:400:5:400:18 | LetStmt | test.rs:400:17:400:17 | 0 | | +| test.rs:400:9:400:13 | x | test.rs:401:5:403:5 | nested | match | +| test.rs:400:17:400:17 | 0 | test.rs:400:9:400:13 | x | | +| test.rs:401:5:403:5 | enter nested | test.rs:401:15:401:15 | x | | +| test.rs:401:5:403:5 | exit nested (normal) | test.rs:401:5:403:5 | exit nested | | +| test.rs:401:5:403:5 | nested | test.rs:404:5:404:19 | ExprStmt | | +| test.rs:401:15:401:15 | x | test.rs:401:15:401:25 | Param | match | +| test.rs:401:15:401:25 | Param | test.rs:402:9:402:16 | ExprStmt | | +| test.rs:401:28:403:5 | BlockExpr | test.rs:401:5:403:5 | exit nested (normal) | | +| test.rs:402:9:402:10 | * ... | test.rs:402:15:402:15 | 1 | | +| test.rs:402:9:402:15 | ... += ... | test.rs:401:28:403:5 | BlockExpr | | +| test.rs:402:9:402:16 | ExprStmt | test.rs:402:10:402:10 | x | | +| test.rs:402:10:402:10 | x | test.rs:402:9:402:10 | * ... | | +| test.rs:402:15:402:15 | 1 | test.rs:402:9:402:15 | ... += ... | | +| test.rs:404:5:404:10 | PathExpr | test.rs:404:17:404:17 | x | | +| test.rs:404:5:404:18 | CallExpr | test.rs:399:27:405:1 | BlockExpr | | +| test.rs:404:5:404:19 | ExprStmt | test.rs:404:5:404:10 | PathExpr | | +| test.rs:404:12:404:17 | RefExpr | test.rs:404:5:404:18 | CallExpr | | +| test.rs:404:17:404:17 | x | test.rs:404:12:404:17 | RefExpr | | breakTarget -| test.rs:25:17:25:21 | BreakExpr | test.rs:19:9:31:9 | LoopExpr | -| test.rs:39:21:39:25 | BreakExpr | test.rs:37:13:44:13 | LoopExpr | -| test.rs:41:21:41:32 | BreakExpr | test.rs:36:9:45:9 | LoopExpr | -| test.rs:43:17:43:28 | BreakExpr | test.rs:37:13:44:13 | LoopExpr | -| test.rs:82:17:82:21 | BreakExpr | test.rs:79:9:85:9 | WhileExpr | -| test.rs:92:17:92:21 | BreakExpr | test.rs:90:9:94:9 | WhileExpr | -| test.rs:100:17:100:21 | BreakExpr | test.rs:98:9:103:9 | ForExpr | -| test.rs:108:13:108:26 | BreakExpr | test.rs:107:9:109:9 | LoopExpr | -| test.rs:185:17:185:28 | BreakExpr | test.rs:183:13:188:9 | LoopExpr | -| test.rs:198:17:198:35 | BreakExpr | test.rs:196:13:201:9 | LoopExpr | -| test.rs:210:13:210:30 | BreakExpr | test.rs:209:13:211:9 | BlockExpr | -| test.rs:370:13:370:26 | BreakExpr | test.rs:367:18:378:5 | BlockExpr | -| test.rs:374:13:374:26 | BreakExpr | test.rs:367:18:378:5 | BlockExpr | -| test.rs:385:13:385:26 | BreakExpr | test.rs:382:18:388:5 | BlockExpr | +| test.rs:26:17:26:21 | BreakExpr | test.rs:20:9:32:9 | LoopExpr | +| test.rs:40:21:40:25 | BreakExpr | test.rs:38:13:45:13 | LoopExpr | +| test.rs:42:21:42:32 | BreakExpr | test.rs:37:9:46:9 | LoopExpr | +| test.rs:44:17:44:28 | BreakExpr | test.rs:38:13:45:13 | LoopExpr | +| test.rs:83:17:83:21 | BreakExpr | test.rs:80:9:86:9 | WhileExpr | +| test.rs:93:17:93:21 | BreakExpr | test.rs:91:9:95:9 | WhileExpr | +| test.rs:101:17:101:21 | BreakExpr | test.rs:99:9:104:9 | ForExpr | +| test.rs:109:13:109:26 | BreakExpr | test.rs:108:9:110:9 | LoopExpr | +| test.rs:186:17:186:28 | BreakExpr | test.rs:184:13:189:9 | LoopExpr | +| test.rs:199:17:199:35 | BreakExpr | test.rs:197:13:202:9 | LoopExpr | +| test.rs:211:13:211:30 | BreakExpr | test.rs:210:13:212:9 | BlockExpr | +| test.rs:378:13:378:26 | BreakExpr | test.rs:375:18:386:5 | BlockExpr | +| test.rs:382:13:382:26 | BreakExpr | test.rs:375:18:386:5 | BlockExpr | +| test.rs:393:13:393:26 | BreakExpr | test.rs:390:18:396:5 | BlockExpr | continueTarget -| test.rs:28:17:28:24 | ContinueExpr | test.rs:19:9:31:9 | LoopExpr | -| test.rs:54:21:54:28 | ContinueExpr | test.rs:52:13:59:13 | LoopExpr | -| test.rs:56:21:56:35 | ContinueExpr | test.rs:50:9:60:9 | LoopExpr | -| test.rs:58:17:58:31 | ContinueExpr | test.rs:52:13:59:13 | LoopExpr | -| test.rs:68:21:68:28 | ContinueExpr | test.rs:66:13:73:13 | LoopExpr | -| test.rs:70:21:70:34 | ContinueExpr | test.rs:66:13:73:13 | LoopExpr | -| test.rs:72:17:72:30 | ContinueExpr | test.rs:66:13:73:13 | LoopExpr | +| test.rs:29:17:29:24 | ContinueExpr | test.rs:20:9:32:9 | LoopExpr | +| test.rs:55:21:55:28 | ContinueExpr | test.rs:53:13:60:13 | LoopExpr | +| test.rs:57:21:57:35 | ContinueExpr | test.rs:51:9:61:9 | LoopExpr | +| test.rs:59:17:59:31 | ContinueExpr | test.rs:53:13:60:13 | LoopExpr | +| test.rs:69:21:69:28 | ContinueExpr | test.rs:67:13:74:13 | LoopExpr | +| test.rs:71:21:71:34 | ContinueExpr | test.rs:67:13:74:13 | LoopExpr | +| test.rs:73:17:73:30 | ContinueExpr | test.rs:67:13:74:13 | LoopExpr | diff --git a/rust/ql/test/library-tests/controlflow/test.rs b/rust/ql/test/library-tests/controlflow/test.rs index 60c7ac0a8085..1de079eaa3bd 100644 --- a/rust/ql/test/library-tests/controlflow/test.rs +++ b/rust/ql/test/library-tests/controlflow/test.rs @@ -1,4 +1,5 @@ use std::collections::HashMap; +use std::convert::Infallible; mod calls { fn function_call() { @@ -304,6 +305,13 @@ mod match_expression { _ => false, }) && cond } + + fn test_match_with_no_arms(r: Result) -> T { + match r { + Ok(value) => value, + Err(never) => match never {}, + } + } } mod let_statement { From 7b870d30a47eeb5cb363d3451226419abb67f4d0 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 21 Oct 2024 09:29:37 +0200 Subject: [PATCH 212/217] Rust: move integration tests to where other languages have them --- rust/{ => ql}/integration-tests/conftest.py | 0 rust/{ => ql}/integration-tests/hello-project/functions.expected | 0 rust/{ => ql}/integration-tests/hello-project/functions.ql | 0 .../{ => ql}/integration-tests/hello-project/manifests/Cargo.toml | 0 .../integration-tests/hello-project/manifests/rust-project.json | 0 .../integration-tests/hello-project/source_archive.expected | 0 .../integration-tests/hello-project/src/directory_module/mod.rs | 0 .../hello-project/src/directory_module/nested_module.rs | 0 .../hello-project/src/directory_module/not_loaded.rs | 0 rust/{ => ql}/integration-tests/hello-project/src/file_module.rs | 0 rust/{ => ql}/integration-tests/hello-project/src/main.rs | 0 rust/{ => ql}/integration-tests/hello-project/test_project.py | 0 rust/{ => ql}/integration-tests/hello-workspace/exe/Cargo.toml | 0 .../integration-tests/hello-workspace/exe/src/a_module.rs | 0 rust/{ => ql}/integration-tests/hello-workspace/exe/src/main.rs | 0 .../{ => ql}/integration-tests/hello-workspace/functions.expected | 0 rust/{ => ql}/integration-tests/hello-workspace/functions.ql | 0 rust/{ => ql}/integration-tests/hello-workspace/lib/Cargo.toml | 0 .../integration-tests/hello-workspace/lib/src/a_module/mod.rs | 0 rust/{ => ql}/integration-tests/hello-workspace/lib/src/lib.rs | 0 .../integration-tests/hello-workspace/manifests/Cargo.toml | 0 .../integration-tests/hello-workspace/manifests/rust-project.json | 0 .../integration-tests/hello-workspace/source_archive.expected | 0 rust/{ => ql}/integration-tests/hello-workspace/test_workspace.py | 0 rust/{ => ql}/integration-tests/qlpack.lock.yml | 0 rust/{ => ql}/integration-tests/qlpack.yml | 0 26 files changed, 0 insertions(+), 0 deletions(-) rename rust/{ => ql}/integration-tests/conftest.py (100%) rename rust/{ => ql}/integration-tests/hello-project/functions.expected (100%) rename rust/{ => ql}/integration-tests/hello-project/functions.ql (100%) rename rust/{ => ql}/integration-tests/hello-project/manifests/Cargo.toml (100%) rename rust/{ => ql}/integration-tests/hello-project/manifests/rust-project.json (100%) rename rust/{ => ql}/integration-tests/hello-project/source_archive.expected (100%) rename rust/{ => ql}/integration-tests/hello-project/src/directory_module/mod.rs (100%) rename rust/{ => ql}/integration-tests/hello-project/src/directory_module/nested_module.rs (100%) rename rust/{ => ql}/integration-tests/hello-project/src/directory_module/not_loaded.rs (100%) rename rust/{ => ql}/integration-tests/hello-project/src/file_module.rs (100%) rename rust/{ => ql}/integration-tests/hello-project/src/main.rs (100%) rename rust/{ => ql}/integration-tests/hello-project/test_project.py (100%) rename rust/{ => ql}/integration-tests/hello-workspace/exe/Cargo.toml (100%) rename rust/{ => ql}/integration-tests/hello-workspace/exe/src/a_module.rs (100%) rename rust/{ => ql}/integration-tests/hello-workspace/exe/src/main.rs (100%) rename rust/{ => ql}/integration-tests/hello-workspace/functions.expected (100%) rename rust/{ => ql}/integration-tests/hello-workspace/functions.ql (100%) rename rust/{ => ql}/integration-tests/hello-workspace/lib/Cargo.toml (100%) rename rust/{ => ql}/integration-tests/hello-workspace/lib/src/a_module/mod.rs (100%) rename rust/{ => ql}/integration-tests/hello-workspace/lib/src/lib.rs (100%) rename rust/{ => ql}/integration-tests/hello-workspace/manifests/Cargo.toml (100%) rename rust/{ => ql}/integration-tests/hello-workspace/manifests/rust-project.json (100%) rename rust/{ => ql}/integration-tests/hello-workspace/source_archive.expected (100%) rename rust/{ => ql}/integration-tests/hello-workspace/test_workspace.py (100%) rename rust/{ => ql}/integration-tests/qlpack.lock.yml (100%) rename rust/{ => ql}/integration-tests/qlpack.yml (100%) diff --git a/rust/integration-tests/conftest.py b/rust/ql/integration-tests/conftest.py similarity index 100% rename from rust/integration-tests/conftest.py rename to rust/ql/integration-tests/conftest.py diff --git a/rust/integration-tests/hello-project/functions.expected b/rust/ql/integration-tests/hello-project/functions.expected similarity index 100% rename from rust/integration-tests/hello-project/functions.expected rename to rust/ql/integration-tests/hello-project/functions.expected diff --git a/rust/integration-tests/hello-project/functions.ql b/rust/ql/integration-tests/hello-project/functions.ql similarity index 100% rename from rust/integration-tests/hello-project/functions.ql rename to rust/ql/integration-tests/hello-project/functions.ql diff --git a/rust/integration-tests/hello-project/manifests/Cargo.toml b/rust/ql/integration-tests/hello-project/manifests/Cargo.toml similarity index 100% rename from rust/integration-tests/hello-project/manifests/Cargo.toml rename to rust/ql/integration-tests/hello-project/manifests/Cargo.toml diff --git a/rust/integration-tests/hello-project/manifests/rust-project.json b/rust/ql/integration-tests/hello-project/manifests/rust-project.json similarity index 100% rename from rust/integration-tests/hello-project/manifests/rust-project.json rename to rust/ql/integration-tests/hello-project/manifests/rust-project.json diff --git a/rust/integration-tests/hello-project/source_archive.expected b/rust/ql/integration-tests/hello-project/source_archive.expected similarity index 100% rename from rust/integration-tests/hello-project/source_archive.expected rename to rust/ql/integration-tests/hello-project/source_archive.expected diff --git a/rust/integration-tests/hello-project/src/directory_module/mod.rs b/rust/ql/integration-tests/hello-project/src/directory_module/mod.rs similarity index 100% rename from rust/integration-tests/hello-project/src/directory_module/mod.rs rename to rust/ql/integration-tests/hello-project/src/directory_module/mod.rs diff --git a/rust/integration-tests/hello-project/src/directory_module/nested_module.rs b/rust/ql/integration-tests/hello-project/src/directory_module/nested_module.rs similarity index 100% rename from rust/integration-tests/hello-project/src/directory_module/nested_module.rs rename to rust/ql/integration-tests/hello-project/src/directory_module/nested_module.rs diff --git a/rust/integration-tests/hello-project/src/directory_module/not_loaded.rs b/rust/ql/integration-tests/hello-project/src/directory_module/not_loaded.rs similarity index 100% rename from rust/integration-tests/hello-project/src/directory_module/not_loaded.rs rename to rust/ql/integration-tests/hello-project/src/directory_module/not_loaded.rs diff --git a/rust/integration-tests/hello-project/src/file_module.rs b/rust/ql/integration-tests/hello-project/src/file_module.rs similarity index 100% rename from rust/integration-tests/hello-project/src/file_module.rs rename to rust/ql/integration-tests/hello-project/src/file_module.rs diff --git a/rust/integration-tests/hello-project/src/main.rs b/rust/ql/integration-tests/hello-project/src/main.rs similarity index 100% rename from rust/integration-tests/hello-project/src/main.rs rename to rust/ql/integration-tests/hello-project/src/main.rs diff --git a/rust/integration-tests/hello-project/test_project.py b/rust/ql/integration-tests/hello-project/test_project.py similarity index 100% rename from rust/integration-tests/hello-project/test_project.py rename to rust/ql/integration-tests/hello-project/test_project.py diff --git a/rust/integration-tests/hello-workspace/exe/Cargo.toml b/rust/ql/integration-tests/hello-workspace/exe/Cargo.toml similarity index 100% rename from rust/integration-tests/hello-workspace/exe/Cargo.toml rename to rust/ql/integration-tests/hello-workspace/exe/Cargo.toml diff --git a/rust/integration-tests/hello-workspace/exe/src/a_module.rs b/rust/ql/integration-tests/hello-workspace/exe/src/a_module.rs similarity index 100% rename from rust/integration-tests/hello-workspace/exe/src/a_module.rs rename to rust/ql/integration-tests/hello-workspace/exe/src/a_module.rs diff --git a/rust/integration-tests/hello-workspace/exe/src/main.rs b/rust/ql/integration-tests/hello-workspace/exe/src/main.rs similarity index 100% rename from rust/integration-tests/hello-workspace/exe/src/main.rs rename to rust/ql/integration-tests/hello-workspace/exe/src/main.rs diff --git a/rust/integration-tests/hello-workspace/functions.expected b/rust/ql/integration-tests/hello-workspace/functions.expected similarity index 100% rename from rust/integration-tests/hello-workspace/functions.expected rename to rust/ql/integration-tests/hello-workspace/functions.expected diff --git a/rust/integration-tests/hello-workspace/functions.ql b/rust/ql/integration-tests/hello-workspace/functions.ql similarity index 100% rename from rust/integration-tests/hello-workspace/functions.ql rename to rust/ql/integration-tests/hello-workspace/functions.ql diff --git a/rust/integration-tests/hello-workspace/lib/Cargo.toml b/rust/ql/integration-tests/hello-workspace/lib/Cargo.toml similarity index 100% rename from rust/integration-tests/hello-workspace/lib/Cargo.toml rename to rust/ql/integration-tests/hello-workspace/lib/Cargo.toml diff --git a/rust/integration-tests/hello-workspace/lib/src/a_module/mod.rs b/rust/ql/integration-tests/hello-workspace/lib/src/a_module/mod.rs similarity index 100% rename from rust/integration-tests/hello-workspace/lib/src/a_module/mod.rs rename to rust/ql/integration-tests/hello-workspace/lib/src/a_module/mod.rs diff --git a/rust/integration-tests/hello-workspace/lib/src/lib.rs b/rust/ql/integration-tests/hello-workspace/lib/src/lib.rs similarity index 100% rename from rust/integration-tests/hello-workspace/lib/src/lib.rs rename to rust/ql/integration-tests/hello-workspace/lib/src/lib.rs diff --git a/rust/integration-tests/hello-workspace/manifests/Cargo.toml b/rust/ql/integration-tests/hello-workspace/manifests/Cargo.toml similarity index 100% rename from rust/integration-tests/hello-workspace/manifests/Cargo.toml rename to rust/ql/integration-tests/hello-workspace/manifests/Cargo.toml diff --git a/rust/integration-tests/hello-workspace/manifests/rust-project.json b/rust/ql/integration-tests/hello-workspace/manifests/rust-project.json similarity index 100% rename from rust/integration-tests/hello-workspace/manifests/rust-project.json rename to rust/ql/integration-tests/hello-workspace/manifests/rust-project.json diff --git a/rust/integration-tests/hello-workspace/source_archive.expected b/rust/ql/integration-tests/hello-workspace/source_archive.expected similarity index 100% rename from rust/integration-tests/hello-workspace/source_archive.expected rename to rust/ql/integration-tests/hello-workspace/source_archive.expected diff --git a/rust/integration-tests/hello-workspace/test_workspace.py b/rust/ql/integration-tests/hello-workspace/test_workspace.py similarity index 100% rename from rust/integration-tests/hello-workspace/test_workspace.py rename to rust/ql/integration-tests/hello-workspace/test_workspace.py diff --git a/rust/integration-tests/qlpack.lock.yml b/rust/ql/integration-tests/qlpack.lock.yml similarity index 100% rename from rust/integration-tests/qlpack.lock.yml rename to rust/ql/integration-tests/qlpack.lock.yml diff --git a/rust/integration-tests/qlpack.yml b/rust/ql/integration-tests/qlpack.yml similarity index 100% rename from rust/integration-tests/qlpack.yml rename to rust/ql/integration-tests/qlpack.yml From 9c172f62a425d9436f82816611aa7fb017cd7c2f Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 21 Oct 2024 09:59:23 +0200 Subject: [PATCH 213/217] Rust: Fix dead end in CFG for match expressions with no arms --- .../rust/controlflow/internal/ControlFlowGraphImpl.qll | 8 ++++++-- rust/ql/test/library-tests/controlflow/Cfg.expected | 2 ++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index 11ac25133bef..fdca529831d6 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -494,9 +494,13 @@ class MatchExprTree extends PostOrderTree instanceof MatchExpr { override predicate first(AstNode node) { first(super.getExpr(), node) } override predicate succ(AstNode pred, AstNode succ, Completion c) { - // Edge from the scrutinee to the first arm. + // Edge from the scrutinee to the first arm or to the match expression if no arms. last(super.getExpr(), pred, c) and - first(super.getArm(0).getPat(), succ) and + ( + first(super.getArm(0).getPat(), succ) + or + not exists(super.getArm(0)) and succ = this + ) and completionIsNormal(c) or // Edge from a failed pattern or guard in one arm to the beginning of the next arm. diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 3b811e27f2be..cdbf56592c9a 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -681,6 +681,8 @@ edges | test.rs:311:26:311:30 | value | test.rs:310:9:313:9 | MatchExpr | | | test.rs:312:13:312:22 | TupleStructPat | test.rs:312:17:312:21 | never | match | | test.rs:312:17:312:21 | never | test.rs:312:33:312:37 | never | match | +| test.rs:312:27:312:40 | MatchExpr | test.rs:310:9:313:9 | MatchExpr | | +| test.rs:312:33:312:37 | never | test.rs:312:27:312:40 | MatchExpr | | | test.rs:319:5:322:5 | enter test_let_match | test.rs:319:23:319:23 | a | | | test.rs:319:5:322:5 | exit test_let_match (normal) | test.rs:319:5:322:5 | exit test_let_match | | | test.rs:319:23:319:23 | a | test.rs:319:23:319:36 | Param | match | From 3ae04752c4a6fc4c7e1e4d7be74a7a10a4235e6b Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 21 Oct 2024 10:07:11 +0200 Subject: [PATCH 214/217] Rust: Accept less CFG inconsistencies --- .../CONSISTENCY/CfgConsistency.expected | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 rust/ql/test/query-tests/unusedentities/CONSISTENCY/CfgConsistency.expected diff --git a/rust/ql/test/query-tests/unusedentities/CONSISTENCY/CfgConsistency.expected b/rust/ql/test/query-tests/unusedentities/CONSISTENCY/CfgConsistency.expected deleted file mode 100644 index bdd995b19f3e..000000000000 --- a/rust/ql/test/query-tests/unusedentities/CONSISTENCY/CfgConsistency.expected +++ /dev/null @@ -1,11 +0,0 @@ -multipleSuccessors -| main.rs:428:17:428:17 | 0 | successor | main.rs:428:9:428:10 | a2 | -| main.rs:428:17:428:17 | 0 | successor | main.rs:428:20:428:62 | ClosureExpr | -| main.rs:431:17:431:17 | 0 | successor | main.rs:431:9:431:10 | a3 | -| main.rs:431:17:431:17 | 0 | successor | main.rs:431:20:431:41 | ClosureExpr | -| main.rs:434:17:434:17 | 0 | successor | main.rs:434:9:434:10 | a4 | -| main.rs:434:17:434:17 | 0 | successor | main.rs:434:20:434:35 | ClosureExpr | -| main.rs:437:17:437:17 | 0 | successor | main.rs:437:9:437:10 | a5 | -| main.rs:437:17:437:17 | 0 | successor | main.rs:437:20:437:35 | ClosureExpr | -| main.rs:441:17:441:17 | 0 | successor | main.rs:441:9:441:10 | a6 | -| main.rs:441:17:441:17 | 0 | successor | main.rs:441:20:441:46 | ClosureExpr | From 7e82595caed9ced41cc4aadd1d94949c1262ac0d Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 21 Oct 2024 11:40:13 +0200 Subject: [PATCH 215/217] Rust: Fix bad join Before ``` Evaluated relational algebra for predicate MatchExprImpl::Impl::MatchExpr.getLastArm/0#dispred#24e5f4cf@9cf607tl with tuple counts: 660677 ~0% {4} r1 = SCAN `MatchExprImpl::Impl::MatchExpr.getArm/1#dispred#817de8a3` OUTPUT _, In.0, In.2, In.1 660677 ~0% {3} | REWRITE WITH Tmp.0 := 1, Out.0 := (Tmp.0 + In.3) KEEPING 3 5342095756 ~0% {3} | JOIN WITH `MatchArmList::Generated::MatchArmList.getNumberOfArms/0#dispred#9ad72f08_10#join_rhs` ON FIRST 1 OUTPUT Lhs.1, Rhs.1, Lhs.2 96597 ~3% {2} | JOIN WITH `MatchExpr::Generated::MatchExpr.getMatchArmList/0#dispred#11f1a73e` ON FIRST 2 OUTPUT Lhs.0, Lhs.2 return r1 ``` After ``` Evaluated relational algebra for predicate MatchExprImpl::Impl::MatchExpr.getLastArm/0#dispred#24e5f4cf@9d7a92pu with tuple counts: 660677 ~0% {5} r1 = JOIN `MatchExprImpl::Impl::MatchExpr.getArm/1#344daffc` WITH `MatchExprImpl::Impl::MatchExpr.getNumberOfArms/0#ab0d8732` ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, _, Rhs.1 {4} | REWRITE WITH Tmp.3 := 1, Out.3 := (In.4 - Tmp.3), TEST Out.3 = InOut.1 KEEPING 4 96597 ~3% {2} | SCAN OUTPUT In.0, In.2 return r1 ``` --- rust/ql/lib/codeql/rust/elements/internal/MatchExprImpl.qll | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rust/ql/lib/codeql/rust/elements/internal/MatchExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MatchExprImpl.qll index f707a27afd49..c8cb535b526d 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MatchExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MatchExprImpl.qll @@ -31,6 +31,7 @@ module Impl { /** * Gets the `index`th arm of this match expression. */ + pragma[nomagic] MatchArm getArm(int index) { result = this.getMatchArmList().getArm(index) } /** @@ -41,6 +42,7 @@ module Impl { /** * Gets the number of arms of this match expression. */ + pragma[nomagic] int getNumberOfArms() { result = this.getMatchArmList().getNumberOfArms() } /** From 1f5e02f539efc89124d7b74405e2e2ed373443e4 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 21 Oct 2024 13:41:11 +0200 Subject: [PATCH 216/217] Rust: Move all expression CFG trees inside an `ExprTrees` module --- .../internal/ControlFlowGraphImpl.qll | 758 +++++++++--------- .../rust/controlflow/internal/Scope.qll | 2 +- 2 files changed, 384 insertions(+), 376 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index fdca529831d6..418927b7a1ba 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -65,148 +65,6 @@ private module CfgImpl = import CfgImpl -class ArrayExprTree extends StandardPostOrderTree, ArrayExpr { - override AstNode getChildNode(int i) { result = this.getExpr(i) } -} - -class AsmExprTree extends LeafTree instanceof AsmExpr { } - -class AwaitExprTree extends StandardPostOrderTree instanceof AwaitExpr { - override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } -} - -// NOTE: `become` is a reserved but unused keyword. -class BecomeExprTree extends StandardPostOrderTree instanceof BecomeExpr { - override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } -} - -class BinaryOpExprTree extends StandardPostOrderTree instanceof BinaryExpr { - BinaryOpExprTree() { not this instanceof BinaryLogicalOperation } - - override AstNode getChildNode(int i) { - i = 0 and result = super.getLhs() - or - i = 1 and result = super.getRhs() - } -} - -class LogicalOrTree extends PostOrderTree, LogicalOrExpr { - final override predicate propagatesAbnormal(AstNode child) { child = this.getAnOperand() } - - override predicate first(AstNode node) { first(this.getLhs(), node) } - - override predicate succ(AstNode pred, AstNode succ, Completion c) { - // Edge from lhs to rhs - last(this.getLhs(), pred, c) and - c.(BooleanCompletion).failed() and - first(this.getRhs(), succ) - or - // Edge from lhs to this - last(this.getLhs(), pred, c) and - c.(BooleanCompletion).succeeded() and - succ = this - or - // Edge from rhs to this - last(this.getRhs(), pred, c) and - succ = this and - completionIsNormal(c) - } -} - -class LogicalAndTree extends PostOrderTree, LogicalAndExpr { - final override predicate propagatesAbnormal(AstNode child) { child = this.getAnOperand() } - - override predicate first(AstNode node) { first(this.getLhs(), node) } - - override predicate succ(AstNode pred, AstNode succ, Completion c) { - // Edge from lhs to rhs - last(this.getLhs(), pred, c) and - c.(BooleanCompletion).succeeded() and - first(this.getRhs(), succ) - or - // Edge from lhs to this - last(this.getLhs(), pred, c) and - c.(BooleanCompletion).failed() and - succ = this - or - // Edge from rhs to this - last(this.getRhs(), pred, c) and - succ = this and - completionIsNormal(c) - } -} - -class BlockExprTree extends StandardPostOrderTree, BlockExpr { - override AstNode getChildNode(int i) { - result = this.getStmtList().getStatement(i) - or - i = this.getStmtList().getNumberOfStatements() and - result = this.getStmtList().getTailExpr() - } - - override predicate propagatesAbnormal(AstNode child) { child = this.getChildNode(_) } -} - -class BreakExprTree extends StandardPostOrderTree, BreakExpr { - override AstNode getChildNode(int i) { i = 0 and result = this.getExpr() } - - override predicate last(AstNode last, Completion c) { none() } - - override predicate succ(AstNode pred, AstNode succ, Completion c) { - super.succ(pred, succ, c) - or - pred = this and c.isValidFor(pred) and succ = this.getTarget() - } -} - -class CallExprTree extends StandardPostOrderTree instanceof CallExpr { - override AstNode getChildNode(int i) { - i = 0 and result = super.getExpr() - or - result = super.getArgList().getArg(i - 1) - } -} - -class CastExprTree extends StandardPostOrderTree instanceof CastExpr { - override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } -} - -class ClosureExprTree extends StandardTree, ClosureExpr { - override predicate first(AstNode first) { first = this } - - override predicate last(AstNode last, Completion c) { - last = this and - completionIsValidFor(c, this) - } - - override predicate propagatesAbnormal(AstNode child) { none() } - - override AstNode getChildNode(int i) { - result = this.getParamList().getParam(i) - or - i = this.getParamList().getNumberOfParams() and - result = this.getBody() - } -} - -class ContinueExprTree extends LeafTree, ContinueExpr { - override predicate last(AstNode last, Completion c) { none() } - - override predicate succ(AstNode pred, AstNode succ, Completion c) { - pred = this and - c.isValidFor(pred) and - first(this.getTarget().(LoopingExprTree).getLoopContinue(), succ) - } -} - -class ExprStmtTree extends StandardPreOrderTree instanceof ExprStmt { - override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } -} - -class FieldExprTree extends StandardPostOrderTree instanceof FieldExpr { - override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } -} - class FunctionTree extends StandardTree, Function { override predicate first(AstNode first) { first = this } @@ -229,58 +87,6 @@ class ParamTree extends StandardPostOrderTree, Param { override AstNode getChildNode(int i) { i = 0 and result = this.getPat() } } -class IfExprTree extends PostOrderTree instanceof IfExpr { - override predicate first(AstNode node) { first(super.getCondition(), node) } - - override predicate propagatesAbnormal(AstNode child) { - child = [super.getCondition(), super.getThen(), super.getElse()] - } - - private ConditionalCompletion conditionCompletion(Completion c) { - if super.getCondition() instanceof LetExpr - then result = c.(MatchCompletion) - else result = c.(BooleanCompletion) - } - - override predicate succ(AstNode pred, AstNode succ, Completion c) { - // Edges from the condition to the branches - last(super.getCondition(), pred, c) and - ( - first(super.getThen(), succ) and this.conditionCompletion(c).succeeded() - or - first(super.getElse(), succ) and this.conditionCompletion(c).failed() - or - not super.hasElse() and succ = this and this.conditionCompletion(c).failed() - ) - or - // An edge from the then branch to the last node - last(super.getThen(), pred, c) and - succ = this and - completionIsNormal(c) - or - // An edge from the else branch to the last node - last(super.getElse(), pred, c) and - succ = this and - completionIsNormal(c) - } -} - -class FormatArgsExprTree extends StandardPostOrderTree, FormatArgsExpr { - override AstNode getChildNode(int i) { - i = -1 and result = this.getTemplate() - or - result = this.getArg(i).getExpr() - } -} - -class IndexExprTree extends StandardPostOrderTree instanceof IndexExpr { - override AstNode getChildNode(int i) { - i = 0 and result = super.getBase() - or - i = 1 and result = super.getIndex() - } -} - class ItemTree extends LeafTree, Item { ItemTree() { not this instanceof MacroCall and @@ -288,19 +94,6 @@ class ItemTree extends LeafTree, Item { } } -// `LetExpr` is a pre-order tree such that the pattern itself ends up -// dominating successors in the graph in the same way that patterns do in -// `match` expressions. -class LetExprTree extends StandardPreOrderTree, LetExpr { - override AstNode getChildNode(int i) { - i = 0 and - result = this.getExpr() - or - i = 1 and - result = this.getPat() - } -} - class LetStmtTree extends PreOrderTree, LetStmt { final override predicate propagatesAbnormal(AstNode child) { child = [this.getInitializer(), this.getLetElse().getBlockExpr()] @@ -332,97 +125,6 @@ class LetStmtTree extends PreOrderTree, LetStmt { } } -class LiteralExprTree extends LeafTree instanceof LiteralExpr { } - -abstract class LoopingExprTree extends PostOrderTree { - override predicate propagatesAbnormal(AstNode child) { child = this.getLoopBody() } - - abstract BlockExpr getLoopBody(); - - /** - * Gets the node to execute when continuing the loop; either after - * executing the last node in the body or after an explicit `continue`. - */ - abstract AstNode getLoopContinue(); - - override predicate succ(AstNode pred, AstNode succ, Completion c) { - // Edge back to the start for final expression and continue expressions - last(this.getLoopBody(), pred, c) and - completionIsNormal(c) and - first(this.getLoopContinue(), succ) - } -} - -class LoopExprTree extends LoopingExprTree instanceof LoopExpr { - override BlockExpr getLoopBody() { result = LoopExpr.super.getLoopBody() } - - override AstNode getLoopContinue() { result = this.getLoopBody() } - - override predicate first(AstNode node) { first(this.getLoopBody(), node) } -} - -class WhileExprTree extends LoopingExprTree instanceof WhileExpr { - override BlockExpr getLoopBody() { result = WhileExpr.super.getLoopBody() } - - override AstNode getLoopContinue() { result = super.getCondition() } - - override predicate propagatesAbnormal(AstNode child) { - super.propagatesAbnormal(child) - or - child = super.getCondition() - } - - override predicate first(AstNode node) { first(super.getCondition(), node) } - - private ConditionalCompletion conditionCompletion(Completion c) { - if super.getCondition() instanceof LetExpr - then result = c.(MatchCompletion) - else result = c.(BooleanCompletion) - } - - override predicate succ(AstNode pred, AstNode succ, Completion c) { - super.succ(pred, succ, c) - or - last(super.getCondition(), pred, c) and - this.conditionCompletion(c).succeeded() and - first(this.getLoopBody(), succ) - or - last(super.getCondition(), pred, c) and - this.conditionCompletion(c).failed() and - succ = this - } -} - -class ForExprTree extends LoopingExprTree instanceof ForExpr { - override BlockExpr getLoopBody() { result = ForExpr.super.getLoopBody() } - - override AstNode getLoopContinue() { result = super.getPat() } - - override predicate propagatesAbnormal(AstNode child) { - super.propagatesAbnormal(child) - or - child = super.getIterable() - } - - override predicate first(AstNode node) { first(super.getIterable(), node) } - - override predicate succ(AstNode pred, AstNode succ, Completion c) { - super.succ(pred, succ, c) - or - last(super.getIterable(), pred, c) and - first(super.getPat(), succ) and - completionIsNormal(c) - or - last(super.getPat(), pred, c) and - c.(MatchCompletion).succeeded() and - first(this.getLoopBody(), succ) - or - last(super.getPat(), pred, c) and - c.(MatchCompletion).failed() and - succ = this - } -} - class MacroCallTree extends ControlFlowTree, MacroCall { override predicate first(AstNode first) { first(this.getExpanded(), first) @@ -443,10 +145,6 @@ class MacroCallTree extends ControlFlowTree, MacroCall { override predicate propagatesAbnormal(AstNode child) { child = this.getExpanded() } } -class MacroExprTree extends StandardPostOrderTree, MacroExpr { - override AstNode getChildNode(int i) { i = 0 and result = this.getMacroCall() } -} - class MacroStmtsTree extends StandardPreOrderTree, MacroStmts { override AstNode getChildNode(int i) { result = this.getStatement(i) @@ -486,44 +184,6 @@ class MatchArmTree extends ControlFlowTree, MatchArm { } } -class MatchExprTree extends PostOrderTree instanceof MatchExpr { - override predicate propagatesAbnormal(AstNode child) { - child = [super.getExpr(), super.getAnArm().getExpr()] - } - - override predicate first(AstNode node) { first(super.getExpr(), node) } - - override predicate succ(AstNode pred, AstNode succ, Completion c) { - // Edge from the scrutinee to the first arm or to the match expression if no arms. - last(super.getExpr(), pred, c) and - ( - first(super.getArm(0).getPat(), succ) - or - not exists(super.getArm(0)) and succ = this - ) and - completionIsNormal(c) - or - // Edge from a failed pattern or guard in one arm to the beginning of the next arm. - exists(int i | - ( - last(super.getArm(i).getPat(), pred, c) or - last(super.getArm(i).getGuard().getCondition(), pred, c) - ) and - first(super.getArm(i + 1), succ) and - c.(ConditionalCompletion).failed() - ) - or - // Edge from the end of each arm to the match expression. - last(super.getArm(_).getExpr(), pred, c) and succ = this and completionIsNormal(c) - } -} - -class MethodCallExprTree extends StandardPostOrderTree, MethodCallExpr { - override AstNode getChildNode(int i) { - if i = 0 then result = this.getReceiver() else result = this.getArgList().getArg(i - 1) - } -} - class NameTree extends LeafTree, Name { } class NameRefTree extends LeafTree, NameRef { } @@ -544,54 +204,402 @@ class ParenExprTree extends ControlFlowTree, ParenExpr { override predicate succ(AstNode pred, AstNode succ, Completion c) { none() } } -class PathExprTree extends LeafTree instanceof PathExpr { } +class TypeRefTree extends LeafTree instanceof TypeRef { } -class PrefixExprTree extends StandardPostOrderTree instanceof PrefixExpr { - override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } -} +/** + * Provides `ControlFlowTree`s for expressions. + * + * Since expressions construct values, they are modeled in post-order, except for + * `LetExpr`s. + */ +module ExprTrees { + class ArrayExprTree extends StandardPostOrderTree, ArrayExpr { + override AstNode getChildNode(int i) { result = this.getExpr(i) } + } -class RangeExprTree extends StandardPostOrderTree instanceof RangeExpr { - override AstNode getChildNode(int i) { - i = 0 and result = super.getStart() - or - i = 1 and result = super.getEnd() + class AsmExprTree extends LeafTree instanceof AsmExpr { } + + class AwaitExprTree extends StandardPostOrderTree instanceof AwaitExpr { + override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } } -} -class RecordExprTree extends StandardPostOrderTree instanceof RecordExpr { - override AstNode getChildNode(int i) { - result = super.getRecordExprFieldList().getField(i).getExpr() + // NOTE: `become` is a reserved but unused keyword. + class BecomeExprTree extends StandardPostOrderTree instanceof BecomeExpr { + override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } } -} -class RefExprTree extends StandardPostOrderTree instanceof RefExpr { - override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } -} + class BinaryOpExprTree extends StandardPostOrderTree instanceof BinaryExpr { + BinaryOpExprTree() { not this instanceof BinaryLogicalOperation } -class ReturnExprTree extends StandardPostOrderTree instanceof ReturnExpr { - override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } -} + override AstNode getChildNode(int i) { + i = 0 and result = super.getLhs() + or + i = 1 and result = super.getRhs() + } + } -class TryExprTree extends StandardPostOrderTree instanceof TryExpr { - override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } -} + class LogicalOrTree extends PostOrderTree, LogicalOrExpr { + final override predicate propagatesAbnormal(AstNode child) { child = this.getAnOperand() } -class TupleExprTree extends StandardPostOrderTree instanceof TupleExpr { - override AstNode getChildNode(int i) { result = super.getField(i) } -} + override predicate first(AstNode node) { first(this.getLhs(), node) } -class TypeRefTree extends LeafTree instanceof TypeRef { } + override predicate succ(AstNode pred, AstNode succ, Completion c) { + // Edge from lhs to rhs + last(this.getLhs(), pred, c) and + c.(BooleanCompletion).failed() and + first(this.getRhs(), succ) + or + // Edge from lhs to this + last(this.getLhs(), pred, c) and + c.(BooleanCompletion).succeeded() and + succ = this + or + // Edge from rhs to this + last(this.getRhs(), pred, c) and + succ = this and + completionIsNormal(c) + } + } -class UnderscoreExprTree extends LeafTree instanceof UnderscoreExpr { } + class LogicalAndTree extends PostOrderTree, LogicalAndExpr { + final override predicate propagatesAbnormal(AstNode child) { child = this.getAnOperand() } -// NOTE: `yield` is a reserved but unused keyword. -class YieldExprTree extends StandardPostOrderTree instanceof YieldExpr { - override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } -} + override predicate first(AstNode node) { first(this.getLhs(), node) } + + override predicate succ(AstNode pred, AstNode succ, Completion c) { + // Edge from lhs to rhs + last(this.getLhs(), pred, c) and + c.(BooleanCompletion).succeeded() and + first(this.getRhs(), succ) + or + // Edge from lhs to this + last(this.getLhs(), pred, c) and + c.(BooleanCompletion).failed() and + succ = this + or + // Edge from rhs to this + last(this.getRhs(), pred, c) and + succ = this and + completionIsNormal(c) + } + } + + class BlockExprTree extends StandardPostOrderTree, BlockExpr { + override AstNode getChildNode(int i) { + result = this.getStmtList().getStatement(i) + or + i = this.getStmtList().getNumberOfStatements() and + result = this.getStmtList().getTailExpr() + } + + override predicate propagatesAbnormal(AstNode child) { child = this.getChildNode(_) } + } + + class BreakExprTree extends StandardPostOrderTree, BreakExpr { + override AstNode getChildNode(int i) { i = 0 and result = this.getExpr() } + + override predicate last(AstNode last, Completion c) { none() } + + override predicate succ(AstNode pred, AstNode succ, Completion c) { + super.succ(pred, succ, c) + or + pred = this and c.isValidFor(pred) and succ = this.getTarget() + } + } + + class CallExprTree extends StandardPostOrderTree instanceof CallExpr { + override AstNode getChildNode(int i) { + i = 0 and result = super.getExpr() + or + result = super.getArgList().getArg(i - 1) + } + } + + class CastExprTree extends StandardPostOrderTree instanceof CastExpr { + override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } + } + + class ClosureExprTree extends StandardTree, ClosureExpr { + override predicate first(AstNode first) { first = this } + + override predicate last(AstNode last, Completion c) { + last = this and + completionIsValidFor(c, this) + } + + override predicate propagatesAbnormal(AstNode child) { none() } + + override AstNode getChildNode(int i) { + result = this.getParamList().getParam(i) + or + i = this.getParamList().getNumberOfParams() and + result = this.getBody() + } + } + + class ContinueExprTree extends LeafTree, ContinueExpr { + override predicate last(AstNode last, Completion c) { none() } + + override predicate succ(AstNode pred, AstNode succ, Completion c) { + pred = this and + c.isValidFor(pred) and + first(this.getTarget().(LoopingExprTree).getLoopContinue(), succ) + } + } + + class ExprStmtTree extends StandardPreOrderTree instanceof ExprStmt { + override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } + } + + class FieldExprTree extends StandardPostOrderTree instanceof FieldExpr { + override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } + } + + class IfExprTree extends PostOrderTree instanceof IfExpr { + override predicate first(AstNode node) { first(super.getCondition(), node) } + + override predicate propagatesAbnormal(AstNode child) { + child = [super.getCondition(), super.getThen(), super.getElse()] + } + + private ConditionalCompletion conditionCompletion(Completion c) { + if super.getCondition() instanceof LetExpr + then result = c.(MatchCompletion) + else result = c.(BooleanCompletion) + } + + override predicate succ(AstNode pred, AstNode succ, Completion c) { + // Edges from the condition to the branches + last(super.getCondition(), pred, c) and + ( + first(super.getThen(), succ) and this.conditionCompletion(c).succeeded() + or + first(super.getElse(), succ) and this.conditionCompletion(c).failed() + or + not super.hasElse() and succ = this and this.conditionCompletion(c).failed() + ) + or + // An edge from the then branch to the last node + last(super.getThen(), pred, c) and + succ = this and + completionIsNormal(c) + or + // An edge from the else branch to the last node + last(super.getElse(), pred, c) and + succ = this and + completionIsNormal(c) + } + } + + class FormatArgsExprTree extends StandardPostOrderTree, FormatArgsExpr { + override AstNode getChildNode(int i) { + i = -1 and result = this.getTemplate() + or + result = this.getArg(i).getExpr() + } + } + + class IndexExprTree extends StandardPostOrderTree instanceof IndexExpr { + override AstNode getChildNode(int i) { + i = 0 and result = super.getBase() + or + i = 1 and result = super.getIndex() + } + } + + // `LetExpr` is a pre-order tree such that the pattern itself ends up + // dominating successors in the graph in the same way that patterns do in + // `match` expressions. + class LetExprTree extends StandardPreOrderTree, LetExpr { + override AstNode getChildNode(int i) { + i = 0 and + result = this.getExpr() + or + i = 1 and + result = this.getPat() + } + } + + class LiteralExprTree extends LeafTree instanceof LiteralExpr { } + + abstract class LoopingExprTree extends PostOrderTree { + override predicate propagatesAbnormal(AstNode child) { child = this.getLoopBody() } + + abstract BlockExpr getLoopBody(); + + /** + * Gets the node to execute when continuing the loop; either after + * executing the last node in the body or after an explicit `continue`. + */ + abstract AstNode getLoopContinue(); + + override predicate succ(AstNode pred, AstNode succ, Completion c) { + // Edge back to the start for final expression and continue expressions + last(this.getLoopBody(), pred, c) and + completionIsNormal(c) and + first(this.getLoopContinue(), succ) + } + } + + class LoopExprTree extends LoopingExprTree instanceof LoopExpr { + override BlockExpr getLoopBody() { result = LoopExpr.super.getLoopBody() } + + override AstNode getLoopContinue() { result = this.getLoopBody() } + + override predicate first(AstNode node) { first(this.getLoopBody(), node) } + } + + class WhileExprTree extends LoopingExprTree instanceof WhileExpr { + override BlockExpr getLoopBody() { result = WhileExpr.super.getLoopBody() } + + override AstNode getLoopContinue() { result = super.getCondition() } + + override predicate propagatesAbnormal(AstNode child) { + super.propagatesAbnormal(child) + or + child = super.getCondition() + } + + override predicate first(AstNode node) { first(super.getCondition(), node) } + + private ConditionalCompletion conditionCompletion(Completion c) { + if super.getCondition() instanceof LetExpr + then result = c.(MatchCompletion) + else result = c.(BooleanCompletion) + } + + override predicate succ(AstNode pred, AstNode succ, Completion c) { + super.succ(pred, succ, c) + or + last(super.getCondition(), pred, c) and + this.conditionCompletion(c).succeeded() and + first(this.getLoopBody(), succ) + or + last(super.getCondition(), pred, c) and + this.conditionCompletion(c).failed() and + succ = this + } + } + + class ForExprTree extends LoopingExprTree instanceof ForExpr { + override BlockExpr getLoopBody() { result = ForExpr.super.getLoopBody() } + + override AstNode getLoopContinue() { result = super.getPat() } + + override predicate propagatesAbnormal(AstNode child) { + super.propagatesAbnormal(child) + or + child = super.getIterable() + } + + override predicate first(AstNode node) { first(super.getIterable(), node) } + + override predicate succ(AstNode pred, AstNode succ, Completion c) { + super.succ(pred, succ, c) + or + last(super.getIterable(), pred, c) and + first(super.getPat(), succ) and + completionIsNormal(c) + or + last(super.getPat(), pred, c) and + c.(MatchCompletion).succeeded() and + first(this.getLoopBody(), succ) + or + last(super.getPat(), pred, c) and + c.(MatchCompletion).failed() and + succ = this + } + } + + class MacroExprTree extends StandardPostOrderTree, MacroExpr { + override AstNode getChildNode(int i) { i = 0 and result = this.getMacroCall() } + } + + class MatchExprTree extends PostOrderTree instanceof MatchExpr { + override predicate propagatesAbnormal(AstNode child) { + child = [super.getExpr(), super.getAnArm().getExpr()] + } + + override predicate first(AstNode node) { first(super.getExpr(), node) } + + override predicate succ(AstNode pred, AstNode succ, Completion c) { + // Edge from the scrutinee to the first arm or to the match expression if no arms. + last(super.getExpr(), pred, c) and + ( + first(super.getArm(0).getPat(), succ) + or + not exists(super.getArm(0)) and succ = this + ) and + completionIsNormal(c) + or + // Edge from a failed pattern or guard in one arm to the beginning of the next arm. + exists(int i | + ( + last(super.getArm(i).getPat(), pred, c) or + last(super.getArm(i).getGuard().getCondition(), pred, c) + ) and + first(super.getArm(i + 1), succ) and + c.(ConditionalCompletion).failed() + ) + or + // Edge from the end of each arm to the match expression. + last(super.getArm(_).getExpr(), pred, c) and succ = this and completionIsNormal(c) + } + } + + class MethodCallExprTree extends StandardPostOrderTree, MethodCallExpr { + override AstNode getChildNode(int i) { + if i = 0 then result = this.getReceiver() else result = this.getArgList().getArg(i - 1) + } + } + + class PathExprTree extends LeafTree instanceof PathExpr { } -// NOTE: `yeet` is experimental and not a part of Rust. -class YeetExprTree extends StandardPostOrderTree instanceof YeetExpr { - override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } + class PrefixExprTree extends StandardPostOrderTree instanceof PrefixExpr { + override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } + } + + class RangeExprTree extends StandardPostOrderTree instanceof RangeExpr { + override AstNode getChildNode(int i) { + i = 0 and result = super.getStart() + or + i = 1 and result = super.getEnd() + } + } + + class RecordExprTree extends StandardPostOrderTree instanceof RecordExpr { + override AstNode getChildNode(int i) { + result = super.getRecordExprFieldList().getField(i).getExpr() + } + } + + class RefExprTree extends StandardPostOrderTree instanceof RefExpr { + override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } + } + + class ReturnExprTree extends StandardPostOrderTree instanceof ReturnExpr { + override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } + } + + class TryExprTree extends StandardPostOrderTree instanceof TryExpr { + override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } + } + + class TupleExprTree extends StandardPostOrderTree instanceof TupleExpr { + override AstNode getChildNode(int i) { result = super.getField(i) } + } + + class UnderscoreExprTree extends LeafTree instanceof UnderscoreExpr { } + + // NOTE: `yield` is a reserved but unused keyword. + class YieldExprTree extends StandardPostOrderTree instanceof YieldExpr { + override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } + } + + // NOTE: `yeet` is experimental and not a part of Rust. + class YeetExprTree extends StandardPostOrderTree instanceof YeetExpr { + override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } + } } /** diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/Scope.qll b/rust/ql/lib/codeql/rust/controlflow/internal/Scope.qll index d85539ad9261..8a49ab975632 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/Scope.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/Scope.qll @@ -27,7 +27,7 @@ final class FunctionScope extends CfgScope, Function { final class ClosureScope extends CfgScope, ClosureExpr { override predicate scopeFirst(AstNode node) { - first(this.(ClosureExprTree).getFirstChildNode(), node) + first(this.(ExprTrees::ClosureExprTree).getFirstChildNode(), node) } override predicate scopeLast(AstNode node, Completion c) { last(this.getBody(), node, c) } From a6a68ef8be2cd6c66d3c7b3092e0b67bb1eb3099 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 21 Oct 2024 14:43:22 +0200 Subject: [PATCH 217/217] Apply suggestions from code review Co-authored-by: Simon Friis Vindum --- .../codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index 418927b7a1ba..688f0d1e96a9 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -238,7 +238,7 @@ module ExprTrees { } } - class LogicalOrTree extends PostOrderTree, LogicalOrExpr { + class LogicalOrExprTree extends PostOrderTree, LogicalOrExpr { final override predicate propagatesAbnormal(AstNode child) { child = this.getAnOperand() } override predicate first(AstNode node) { first(this.getLhs(), node) } @@ -261,7 +261,7 @@ module ExprTrees { } } - class LogicalAndTree extends PostOrderTree, LogicalAndExpr { + class LogicalAndExprTree extends PostOrderTree, LogicalAndExpr { final override predicate propagatesAbnormal(AstNode child) { child = this.getAnOperand() } override predicate first(AstNode node) { first(this.getLhs(), node) }